I am trying to get a depth buffer for use in a post-processing effect. As I understand it, the camera's depth buffer gets written into in the ShadowCaster pipeline pass. By the time OnRenderObject is called, the usual rendering pipeline has finished, so ShadowCaster pass in not called when I do Graphics.DrawProcedural, even by including a Fallback "Diffuse" that does have a ShadowCaster pass. So the camera's depth buffer does not get written to. When I say "the camera's depth buffer", I'm referring to what gets returned by float depth = -LinearEyeDepth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, input.texCoords)); Something is keeping track of the depth of the objects rendered by Graphics.DrawProcedural in OnRenderObject, because they draw in the correct depth order. Is there another depth buffer, separate from what gets returned by the above depth texture? How can I get access to it? As an alternative, I experimented with Render Targets, attempting to write into my own depth buffer. I don't want to do two draw calls though, one into the main window and then another into my own render texture. I'd like to be able to draw into the main windows color buffer, and into my own depth buffer. But I can't figure out how to do that either. RenderTexture.active is null, which from the docs I think is expected: "If the active RenderTexture is null everything is rendered in the main window.". This approach seems wrong anyway, because there must be a depth buffer somewhere when Graphics.DrawProcedural is called. And last option I can think of is to somehow inject the Graphics.DrawProcedural into the middle of the rendering pipeline, rather than at the end in OnRenderObject. I've only just touched the tip of the iceberg with Command Buffers, so I don't know if this is possible or not. Any advice would be greatly appreciated.