From 48564a8e5352facc7cf2865faa3eafc8407f2e12 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sat, 27 Jul 2024 21:13:29 +0100 Subject: [PATCH] Make required nextSSAId parameter reference not pointer --- renderdoc/driver/shaders/dxil/dxil_bytecode.cpp | 10 +++++----- renderdoc/driver/shaders/dxil/dxil_bytecode.h | 2 +- .../driver/shaders/dxil/dxil_bytecode_editor.cpp | 12 +++++++++--- renderdoc/driver/shaders/dxil/dxil_disassemble.cpp | 14 ++++++++++---- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp b/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp index 84759ba82..0578d89ee 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp @@ -2580,7 +2580,7 @@ void LLVMOrderAccumulator::processGlobals(Program *prog, bool doLiveChecking) } } -void LLVMOrderAccumulator::processFunction(const Function *f, uint32_t *nextSSAId) +void LLVMOrderAccumulator::processFunction(const Function *f, uint32_t &nextSSAId) { const Function &func = *f; @@ -2637,8 +2637,8 @@ void LLVMOrderAccumulator::processFunction(const Function *f, uint32_t *nextSSAI #if DISABLED(DXC_COMPATIBLE_DISASM) if(arg->slot == ~0U) { - arg->slot = *nextSSAId; - (*nextSSAId)++; + arg->slot = nextSSAId; + nextSSAId++; } #else if(arg->getName().isEmpty()) @@ -2671,8 +2671,8 @@ void LLVMOrderAccumulator::processFunction(const Function *f, uint32_t *nextSSAI #if DISABLED(DXC_COMPATIBLE_DISASM) if(inst->slot == ~0U) { - inst->slot = *nextSSAId; - (*nextSSAId)++; + inst->slot = nextSSAId; + nextSSAId++; } #else if(inst->getName().isEmpty()) diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.h b/renderdoc/driver/shaders/dxil/dxil_bytecode.h index face3fd96..6bef18ed2 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode.h +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode.h @@ -1387,7 +1387,7 @@ public: size_t firstFuncConst; size_t numFuncConsts; - void processFunction(const Function *f, uint32_t *nextSSAId = NULL); + void processFunction(const Function *f, uint32_t &nextSSAId); void exitFunction(); private: diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp b/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp index 00e37766a..ae413a7e6 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp @@ -89,9 +89,11 @@ ProgramEditor::ProgramEditor(const DXBC::DXBCContainer *container, bytebuf &outB for(size_t idx = accum.firstConst; idx < accum.firstConst + accum.numConsts; idx++) m_Constants.push_back((Constant *)cast(accum.values[idx])); + uint32_t ssaID = 0; + for(Function *f : m_Functions) { - accum.processFunction(f); + accum.processFunction(f, ssaID); for(size_t idx = accum.firstFuncConst; idx < accum.firstFuncConst + accum.numFuncConsts; idx++) m_Constants.push_back((Constant *)cast(accum.values[idx])); accum.exitFunction(); @@ -105,11 +107,13 @@ ProgramEditor::~ProgramEditor() LLVMOrderAccumulator accum; accum.processGlobals(this, true); + uint32_t ssaID = 0; + // delete any functions that aren't referenced by call instructions rdcarray keep; for(Function *f : m_Functions) { - accum.processFunction(f); + accum.processFunction(f, ssaID); accum.exitFunction(); } @@ -1065,6 +1069,8 @@ bytebuf ProgramEditor::EncodeProgram() } \ } + uint32_t ssaID = 0; + for(Function *f : m_Functions) { if(f->external) @@ -1074,7 +1080,7 @@ bytebuf ProgramEditor::EncodeProgram() writer.Record(LLVMBC::FunctionRecord::DECLAREBLOCKS, f->blocks.size()); - accum.processFunction(f); + accum.processFunction(f, ssaID); if(accum.numFuncConsts) { diff --git a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp index d556c7851..962676ffa 100644 --- a/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_disassemble.cpp @@ -1064,7 +1064,7 @@ void Program::SettleIDs() uint32_t &nextMetaSlot = m_NextMetaSlot; for(size_t i = 0; i < m_Functions.size(); i++) { - m_Accum.processFunction(m_Functions[i], &m_NextSSAId); + m_Accum.processFunction(m_Functions[i], m_NextSSAId); Function &func = *m_Functions[i]; @@ -1636,11 +1636,13 @@ void Program::MakeDXCDisassemblyString() m_Disassembly += DisassembleTypes(m_DisassemblyInstructionLine); m_Disassembly += DisassembleGlobalVars(m_DisassemblyInstructionLine); + uint32_t ssaID = 0; + for(size_t i = 0; i < m_Functions.size(); i++) { const Function &func = *m_Functions[i]; - m_Accum.processFunction(m_Functions[i]); + m_Accum.processFunction(m_Functions[i], ssaID); if(func.attrs && func.attrs->functionSlot) { @@ -2709,11 +2711,13 @@ void Program::MakeRDDisassemblyString(const DXBC::Reflection *reflection) const char *swizzle = "xyzw"; + uint32_t ssaID = 0; + for(size_t i = 0; i < m_Functions.size(); i++) { const Function &func = *m_Functions[i]; - m_Accum.processFunction(m_Functions[i]); + m_Accum.processFunction(m_Functions[i], ssaID); if(func.external) continue; @@ -4705,11 +4709,13 @@ void Program::MakeRDDisassemblyString(const DXBC::Reflection *reflection) void Program::ParseReferences(const DXBC::Reflection *reflection) { + uint32_t ssaID = 0; + for(size_t i = 0; i < m_Functions.size(); i++) { const Function &func = *m_Functions[i]; - m_Accum.processFunction(m_Functions[i]); + m_Accum.processFunction(m_Functions[i], ssaID); if(func.external) continue;