From b04560933e66d57a63ba176afa3239b3a5c1e33f Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Wed, 10 Jan 2024 10:51:51 +0000 Subject: [PATCH] D3D12 Depth Overlay use non-stencil mask approach by default Only use stencil mask approach for depth exporting shaders. The stencil mask approach does not show discarded pixels as passing. --- renderdoc/driver/d3d12/d3d12_overlay.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/renderdoc/driver/d3d12/d3d12_overlay.cpp b/renderdoc/driver/d3d12/d3d12_overlay.cpp index dc925832a..1af183d46 100644 --- a/renderdoc/driver/d3d12/d3d12_overlay.cpp +++ b/renderdoc/driver/d3d12/d3d12_overlay.cpp @@ -2120,6 +2120,21 @@ ResourceId D3D12Replay::RenderOverlay(ResourceId texid, FloatVector clearCol, De ID3D12Resource *renderDepthStencil = NULL; bool useDepthWriteStencilPass = (overlay == DebugOverlay::Depth) && renderDepth; + if(useDepthWriteStencilPass) + { + useDepthWriteStencilPass = false; + WrappedID3D12PipelineState::ShaderEntry *wrappedPS = pipe->PS(); + if(wrappedPS) + { + ShaderReflection &reflection = pipe->PS()->GetDetails(); + for(SigParameter &output : reflection.outputSignature) + { + if(output.systemValue == ShaderBuiltin::DepthOutput) + useDepthWriteStencilPass = true; + } + } + } + HRESULT hr; DXGI_FORMAT dsFmt = dsViewDesc.Format; // the depth overlay uses stencil buffer as a mask for the passing pixels