Return SPIRVId from Add*() functions for convenience's sake

This commit is contained in:
baldurk
2018-01-08 16:59:37 +00:00
parent 8fc56df0e0
commit 30bf276ae8
2 changed files with 17 additions and 13 deletions
@@ -255,25 +255,31 @@ void SPIRVEditor::AddDecoration(const SPIRVOperation &op)
addWords(decorationSection.endOffset, op.size()); 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()); spirv.insert(spirv.begin() + typeVarSection.endOffset, op.begin(), op.end());
addWords(typeVarSection.endOffset, op.size()); 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()); spirv.insert(spirv.begin() + typeVarSection.endOffset, op.begin(), op.end());
addWords(typeVarSection.endOffset, op.size()); 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()); spirv.insert(spirv.begin() + typeVarSection.endOffset, op.begin(), op.end());
addWords(typeVarSection.endOffset, op.size()); addWords(typeVarSection.endOffset, op.size());
return id;
} }
void SPIRVEditor::AddFunction(const SPIRVOperation *ops, size_t count) void SPIRVEditor::AddFunction(const SPIRVOperation *ops, size_t count)
@@ -319,9 +319,9 @@ public:
void SetName(uint32_t id, const char *name); void SetName(uint32_t id, const char *name);
void AddDecoration(const SPIRVOperation &op); void AddDecoration(const SPIRVOperation &op);
void AddType(const SPIRVOperation &op); SPIRVId AddType(const SPIRVOperation &op);
void AddVariable(const SPIRVOperation &op); SPIRVId AddVariable(const SPIRVOperation &op);
void AddConstant(const SPIRVOperation &op); SPIRVId AddConstant(const SPIRVOperation &op);
void AddFunction(const SPIRVOperation *ops, size_t count); void AddFunction(const SPIRVOperation *ops, size_t count);
SPIRVIterator GetID(SPIRVId id); SPIRVIterator GetID(SPIRVId id);
@@ -351,15 +351,13 @@ public:
SPIRVId AddConstantImmediate(T t) SPIRVId AddConstantImmediate(T t)
{ {
SPIRVId typeId = DeclareType(scalar<T>()); SPIRVId typeId = DeclareType(scalar<T>());
SPIRVId retId = MakeId(); std::vector<uint32_t> words = {typeId, MakeId()};
std::vector<uint32_t> words = {typeId, retId};
words.insert(words.end(), sizeof(T) / 4, 0U); words.insert(words.end(), sizeof(T) / 4, 0U);
memcpy(&words[2], &t, sizeof(T)); memcpy(&words[2], &t, sizeof(T));
AddConstant(SPIRVOperation(spv::OpConstant, words)); return AddConstant(SPIRVOperation(spv::OpConstant, words));
return retId;
} }
// simple properties that are public. // simple properties that are public.