diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp b/renderdoc/driver/shaders/dxil/dxil_bytecode.cpp index 0578d89ee..3b0299318 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,9 @@ void LLVMOrderAccumulator::processFunction(const Function *f, uint32_t &nextSSAI #if DISABLED(DXC_COMPATIBLE_DISASM) if(arg->slot == ~0U) { - arg->slot = nextSSAId; - nextSSAId++; + RDCASSERT(!nextSSAId); + arg->slot = *nextSSAId; + (*nextSSAId)++; } #else if(arg->getName().isEmpty()) @@ -2671,8 +2672,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 6bef18ed2..face3fd96 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); + void processFunction(const Function *f, uint32_t *nextSSAId = NULL); void exitFunction(); private: diff --git a/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp b/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp index ae413a7e6..e8aa318c9 100644 --- a/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_bytecode_editor.cpp @@ -93,7 +93,7 @@ ProgramEditor::ProgramEditor(const DXBC::DXBCContainer *container, bytebuf &outB for(Function *f : m_Functions) { - accum.processFunction(f, ssaID); + 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(); @@ -113,7 +113,7 @@ ProgramEditor::~ProgramEditor() rdcarray keep; for(Function *f : m_Functions) { - accum.processFunction(f, ssaID); + accum.processFunction(f, &ssaID); accum.exitFunction(); } @@ -1080,7 +1080,7 @@ bytebuf ProgramEditor::EncodeProgram() writer.Record(LLVMBC::FunctionRecord::DECLAREBLOCKS, f->blocks.size()); - accum.processFunction(f, ssaID); + 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 962676ffa..d556c7851 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,13 +1636,11 @@ 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], ssaID); + m_Accum.processFunction(m_Functions[i]); if(func.attrs && func.attrs->functionSlot) { @@ -2711,13 +2709,11 @@ 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], ssaID); + m_Accum.processFunction(m_Functions[i]); if(func.external) continue; @@ -4709,13 +4705,11 @@ 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], ssaID); + m_Accum.processFunction(m_Functions[i]); if(func.external) continue;