diff --git a/renderdoc/driver/shaders/spirv/spirv_editor.cpp b/renderdoc/driver/shaders/spirv/spirv_editor.cpp index eef62e533..ebc3320b3 100644 --- a/renderdoc/driver/shaders/spirv/spirv_editor.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_editor.cpp @@ -255,25 +255,31 @@ void SPIRVEditor::AddDecoration(const SPIRVOperation &op) addWords(decorationSection.endOffset, op.size()); } -void SPIRVEditor::AddType(const SPIRVOperation &op) +SPIRVId SPIRVEditor::AddType(const SPIRVOperation &op) { - idOffsets[op[1]] = typeVarSection.endOffset; + SPIRVId id = op[1]; + idOffsets[id] = typeVarSection.endOffset; spirv.insert(spirv.begin() + typeVarSection.endOffset, op.begin(), op.end()); addWords(typeVarSection.endOffset, op.size()); + return id; } -void SPIRVEditor::AddVariable(const SPIRVOperation &op) +SPIRVId SPIRVEditor::AddVariable(const SPIRVOperation &op) { - idOffsets[op[2]] = typeVarSection.endOffset; + SPIRVId id = op[2]; + idOffsets[id] = typeVarSection.endOffset; spirv.insert(spirv.begin() + typeVarSection.endOffset, op.begin(), op.end()); addWords(typeVarSection.endOffset, op.size()); + return id; } -void SPIRVEditor::AddConstant(const SPIRVOperation &op) +SPIRVId SPIRVEditor::AddConstant(const SPIRVOperation &op) { - idOffsets[op[2]] = typeVarSection.endOffset; + SPIRVId id = op[2]; + idOffsets[id] = typeVarSection.endOffset; spirv.insert(spirv.begin() + typeVarSection.endOffset, op.begin(), op.end()); addWords(typeVarSection.endOffset, op.size()); + return id; } void SPIRVEditor::AddFunction(const SPIRVOperation *ops, size_t count) diff --git a/renderdoc/driver/shaders/spirv/spirv_editor.h b/renderdoc/driver/shaders/spirv/spirv_editor.h index 3cea93739..2d7db3b5f 100644 --- a/renderdoc/driver/shaders/spirv/spirv_editor.h +++ b/renderdoc/driver/shaders/spirv/spirv_editor.h @@ -319,9 +319,9 @@ public: void SetName(uint32_t id, const char *name); void AddDecoration(const SPIRVOperation &op); - void AddType(const SPIRVOperation &op); - void AddVariable(const SPIRVOperation &op); - void AddConstant(const SPIRVOperation &op); + SPIRVId AddType(const SPIRVOperation &op); + SPIRVId AddVariable(const SPIRVOperation &op); + SPIRVId AddConstant(const SPIRVOperation &op); void AddFunction(const SPIRVOperation *ops, size_t count); SPIRVIterator GetID(SPIRVId id); @@ -351,15 +351,13 @@ public: SPIRVId AddConstantImmediate(T t) { SPIRVId typeId = DeclareType(scalar()); - SPIRVId retId = MakeId(); - std::vector words = {typeId, retId}; + std::vector words = {typeId, MakeId()}; words.insert(words.end(), sizeof(T) / 4, 0U); memcpy(&words[2], &t, sizeof(T)); - AddConstant(SPIRVOperation(spv::OpConstant, words)); - return retId; + return AddConstant(SPIRVOperation(spv::OpConstant, words)); } // simple properties that are public.