From f63b89b16e88faa89085e4edc946a9b0011cbe9b Mon Sep 17 00:00:00 2001 From: baldurk Date: Sat, 23 Aug 2014 14:16:23 +0100 Subject: [PATCH] Fetch primitive ID --- renderdoc/data/hlsl/debugdisplay.hlsl | 5 +++++ renderdoc/driver/d3d11/d3d11_analyse.cpp | 28 ++++++++++++++++++++++++ renderdoc/driver/d3d11/d3d11_debug.cpp | 1 + renderdoc/driver/d3d11/d3d11_debug.h | 2 ++ 4 files changed, 36 insertions(+) diff --git a/renderdoc/data/hlsl/debugdisplay.hlsl b/renderdoc/data/hlsl/debugdisplay.hlsl index 122af3604..4ed76c370 100644 --- a/renderdoc/data/hlsl/debugdisplay.hlsl +++ b/renderdoc/data/hlsl/debugdisplay.hlsl @@ -408,3 +408,8 @@ void RENDERDOC_PixelHistoryCopyDepthStencil() depth_src[src_coord.xy].r, copy_stencil > 0 ? (float)stencil_src[src_coord.xy].g : -1.0f); } + +float4 RENDERDOC_PrimitiveIDPS(uint prim : SV_PrimitiveID) : SV_Target0 +{ + return asfloat(prim).xxxx; +} diff --git a/renderdoc/driver/d3d11/d3d11_analyse.cpp b/renderdoc/driver/d3d11/d3d11_analyse.cpp index 2e8a4e007..d79168796 100644 --- a/renderdoc/driver/d3d11/d3d11_analyse.cpp +++ b/renderdoc/driver/d3d11/d3d11_analyse.cpp @@ -4288,6 +4288,23 @@ vector D3D11DebugManager::PixelHistory(uint32_t frameID, vect depthSlot%2048, depthSlot/2048); depthSlot++; } + + m_pImmediateContext->ClearDepthStencilView(shadOutputDSV, D3D11_CLEAR_STENCIL, 1.0f, 0); + + // fetch primitive ID + { + m_pImmediateContext->OMSetRenderTargets(1, &shadOutputRTV, shadOutputDSV); + + m_pImmediateContext->PSGetShader(&curPS, curInst, &curNumInst); + m_pImmediateContext->PSSetShader(m_DebugRender.PrimitiveIDPS, NULL, 0); + + m_WrappedDevice->ReplayLog(frameID, 0, history[h].eventID, eReplay_OnlyDraw); + + m_pImmediateContext->PSSetShader(curPS, curInst, curNumInst); + + m_pImmediateContext->CopySubresourceRegion(shadoutStore, 0, shadColSlot%2048, shadColSlot/2048, 0, shadOutput, 0, &srcbox); + shadColSlot++; + } } for(int i=0; i < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; i++) @@ -4404,6 +4421,17 @@ vector D3D11DebugManager::PixelHistory(uint32_t frameID, vect shadColSlot++; depthSlot++; } + + // fetch primitive ID + { + // shader output is always 4 32bit components, so we can copy straight + byte *rowdata = shadoutStoreData + mapped.RowPitch * (shadColSlot/2048); + byte *data = rowdata + 4 * sizeof(float) * (shadColSlot%2048); + + memcpy(&history[h].primitiveID, data, sizeof(uint32_t)); + + shadColSlot++; + } } m_pImmediateContext->Unmap(shadoutStore, 0); diff --git a/renderdoc/driver/d3d11/d3d11_debug.cpp b/renderdoc/driver/d3d11/d3d11_debug.cpp index a3406b58f..01ef85fd7 100644 --- a/renderdoc/driver/d3d11/d3d11_debug.cpp +++ b/renderdoc/driver/d3d11/d3d11_debug.cpp @@ -786,6 +786,7 @@ bool D3D11DebugManager::InitDebugRendering() m_DebugRender.PixelHistoryUnusedCS = MakeCShader(displayhlsl.c_str(), "RENDERDOC_PixelHistoryUnused", "cs_5_0"); m_DebugRender.PixelHistoryDepthCopyCS = MakeCShader(displayhlsl.c_str(), "RENDERDOC_PixelHistoryCopyDepthStencil", "cs_5_0"); + m_DebugRender.PrimitiveIDPS = MakePShader(displayhlsl.c_str(), "RENDERDOC_PrimitiveIDPS", "ps_5_0"); string multisamplehlsl = GetEmbeddedResource(multisample_hlsl); diff --git a/renderdoc/driver/d3d11/d3d11_debug.h b/renderdoc/driver/d3d11/d3d11_debug.h index 123e34b50..529ddc481 100644 --- a/renderdoc/driver/d3d11/d3d11_debug.h +++ b/renderdoc/driver/d3d11/d3d11_debug.h @@ -398,6 +398,7 @@ class D3D11DebugManager SAFE_RELEASE(DepthCopyArrayToMSPS); SAFE_RELEASE(PixelHistoryUnusedCS); SAFE_RELEASE(PixelHistoryDepthCopyCS); + SAFE_RELEASE(PrimitiveIDPS); SAFE_RELEASE(QuadOverdrawPS); SAFE_RELEASE(QOResolvePS); @@ -462,6 +463,7 @@ class D3D11DebugManager ID3D11PixelShader *FloatCopyMSToArrayPS, *FloatCopyArrayToMSPS; ID3D11PixelShader *DepthCopyMSToArrayPS, *DepthCopyArrayToMSPS; ID3D11ComputeShader *PixelHistoryUnusedCS, *PixelHistoryDepthCopyCS; + ID3D11PixelShader *PrimitiveIDPS; ID3D11PixelShader *QuadOverdrawPS, *QOResolvePS;