From d0bbdc31434a6fd3dd1889bc2bb9dff84104fa61 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Wed, 17 Apr 2024 07:33:19 +0100 Subject: [PATCH] Add "DXC DXIL" disassembly target Default to using DXBC/DXIL disassembly target which shows RD DXIL disassembly "DXC DXIL" disassembly target shows the DXC style DXIL disassembly which was the default in RenderDoc before the RD DXIL disassembly view existed --- renderdoc/driver/d3d11/d3d11_replay.cpp | 2 +- renderdoc/driver/d3d11/d3d11_shaderdebug.cpp | 6 +++--- renderdoc/driver/d3d12/d3d12_overlay.cpp | 2 +- renderdoc/driver/d3d12/d3d12_replay.cpp | 6 ++++++ renderdoc/driver/d3d12/d3d12_shaderdebug.cpp | 6 +++--- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/renderdoc/driver/d3d11/d3d11_replay.cpp b/renderdoc/driver/d3d11/d3d11_replay.cpp index c8725a9d8..32878a4c9 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.cpp +++ b/renderdoc/driver/d3d11/d3d11_replay.cpp @@ -339,7 +339,7 @@ rdcstr D3D11Replay::DisassembleShader(ResourceId pipeline, const ShaderReflectio DXBC::DXBCContainer *dxbc = it->second->GetDXBC(); if(target == DXBCDisassemblyTarget || target.empty()) - return dxbc->GetDisassembly(true); + return dxbc->GetDisassembly(false); return StringFormat::Fmt("; Invalid disassembly target %s", target.c_str()); } diff --git a/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp b/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp index b3a33ef58..c0b0a513b 100644 --- a/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp +++ b/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp @@ -1466,7 +1466,7 @@ ShaderDebugTrace *D3D11Replay::DebugVertex(uint32_t eventId, uint32_t vertid, ui if(!dxbc) return new ShaderDebugTrace; - dxbc->GetDisassembly(true); + dxbc->GetDisassembly(false); D3D11RenderState *rs = m_pImmediateContext->GetCurrentPipelineState(); @@ -1857,7 +1857,7 @@ ShaderDebugTrace *D3D11Replay::DebugPixel(uint32_t eventId, uint32_t x, uint32_t if(!dxbc) return new ShaderDebugTrace; - dxbc->GetDisassembly(true); + dxbc->GetDisassembly(false); DXBC::DXBCContainer *prevdxbc = NULL; @@ -2599,7 +2599,7 @@ ShaderDebugTrace *D3D11Replay::DebugThread(uint32_t eventId, if(!dxbc) return new ShaderDebugTrace; - dxbc->GetDisassembly(true); + dxbc->GetDisassembly(false); D3D11RenderState *rs = m_pImmediateContext->GetCurrentPipelineState(); diff --git a/renderdoc/driver/d3d12/d3d12_overlay.cpp b/renderdoc/driver/d3d12/d3d12_overlay.cpp index b1216f52c..37b009bf2 100644 --- a/renderdoc/driver/d3d12/d3d12_overlay.cpp +++ b/renderdoc/driver/d3d12/d3d12_overlay.cpp @@ -972,7 +972,7 @@ void D3D12Replay::PatchQuadWritePS(D3D12_EXPANDED_PIPELINE_STATE_STREAM_DESC &pi if(!D3D12_Debug_OverlayDumpDirPath().empty()) FileIO::WriteAll(D3D12_Debug_OverlayDumpDirPath() + "/after_quadps.dxbc", patchedPs); - DXBC::DXBCContainer(patchedPs, rdcstr(), GraphicsAPI::D3D12, ~0U, ~0U).GetDisassembly(true); + DXBC::DXBCContainer(patchedPs, rdcstr(), GraphicsAPI::D3D12, ~0U, ~0U).GetDisassembly(false); pipeDesc.PS.pShaderBytecode = patchedPs.data(); pipeDesc.PS.BytecodeLength = patchedPs.size(); diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index 1f38834cd..b06195fcf 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -56,6 +56,7 @@ static const char *LiveDriverDisassemblyTarget = "Live driver disassembly"; ID3DDevice *GetD3D12DeviceIfAlloc(IUnknown *dev); static const char *DXBCDXILDisassemblyTarget = "DXBC/DXIL"; +static const char *DXCDXILDisassemblyTarget = "DXC DXIL"; D3D12Replay::D3D12Replay(WrappedID3D12Device *d) { @@ -539,6 +540,8 @@ rdcarray D3D12Replay::GetDisassemblyTargets(bool withPipeline) // DXBC/DXIL is always first ret.push_back(DXBCDXILDisassemblyTarget); + // DXC DXIL + ret.push_back(DXCDXILDisassemblyTarget); if(!m_ISAChecked && m_TexRender.BlendPipe) { @@ -581,6 +584,9 @@ rdcstr D3D12Replay::DisassembleShader(ResourceId pipeline, const ShaderReflectio DXBC::DXBCContainer *dxbc = sh->GetDXBC(); if(target == DXBCDXILDisassemblyTarget || target.empty()) + return dxbc->GetDisassembly(false); + + if(target == DXCDXILDisassemblyTarget) return dxbc->GetDisassembly(true); if(target == LiveDriverDisassemblyTarget) diff --git a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp index 762362243..29db6ebca 100644 --- a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp +++ b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp @@ -1519,7 +1519,7 @@ ShaderDebugTrace *D3D12Replay::DebugVertex(uint32_t eventId, uint32_t vertid, ui return new ShaderDebugTrace; } - dxbc->GetDisassembly(true); + dxbc->GetDisassembly(false); const ActionDescription *action = m_pDevice->GetAction(eventId); @@ -1901,7 +1901,7 @@ ShaderDebugTrace *D3D12Replay::DebugPixel(uint32_t eventId, uint32_t x, uint32_t return new ShaderDebugTrace; } - dxbc->GetDisassembly(true); + dxbc->GetDisassembly(false); // Fetch the previous stage's disassembly, to match outputs to PS inputs DXBCContainer *prevDxbc = NULL; @@ -2725,7 +2725,7 @@ ShaderDebugTrace *D3D12Replay::DebugThread(uint32_t eventId, return new ShaderDebugTrace; } - dxbc->GetDisassembly(true); + dxbc->GetDisassembly(false); InterpretDebugger *interpreter = new InterpretDebugger; interpreter->eventId = eventId;