From ede0c1d0eec887c392e58114cced32b5911793a4 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Thu, 17 Apr 2025 09:17:26 +0100 Subject: [PATCH] D3D12 Workgroup debugger, add padding lanes to align to subgroup size --- renderdoc/driver/d3d12/d3d12_shaderdebug.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp index 60f23f47a..c88c7abfd 100644 --- a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp +++ b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp @@ -3767,7 +3767,20 @@ ShaderDebugTrace *D3D12Replay::DebugThread(uint32_t eventId, 0U, 0U); } - // plain single thread case + // Add inactive padding lanes to round up to the subgroup size + const uint32_t numPaddingThreads = AlignUp(numThreads, subgroupSize) - numThreads; + if(numPaddingThreads > 0) + { + uint32_t newNumThreads = numThreads + numPaddingThreads; + workgroupProperties.resize(newNumThreads); + for(uint32_t i = numThreads; i < newNumThreads; ++i) + { + workgroupProperties[i][DXILDebug::ThreadProperty::Active] = 0; + workgroupProperties[i][DXILDebug::ThreadProperty::SubgroupIdx] = i % subgroupSize; + } + numThreads = newNumThreads; + } + DXILDebug::Debugger *debugger = new DXILDebug::Debugger(); ret = debugger->BeginDebug(eventId, dxbc, refl, activeLaneIndex, numThreads); DXILDebug::GlobalState &globalState = debugger->GetGlobalState();