Add functions for adding declared constants

This commit is contained in:
baldurk
2018-01-08 15:56:37 +00:00
parent 78e0a7424f
commit e59dea2142
2 changed files with 24 additions and 0 deletions
@@ -269,6 +269,13 @@ void SPIRVEditor::AddVariable(const SPIRVOperation &op)
addWords(typeVarSection.endOffset, op.size());
}
void SPIRVEditor::AddConstant(const SPIRVOperation &op)
{
idOffsets[op[2]] = typeVarSection.endOffset;
spirv.insert(spirv.begin() + typeVarSection.endOffset, op.begin(), op.end());
addWords(typeVarSection.endOffset, op.size());
}
void SPIRVEditor::AddFunction(const SPIRVOperation *ops, size_t count)
{
idOffsets[ops[0][2]] = spirv.size();
@@ -319,6 +319,7 @@ public:
void AddDecoration(const SPIRVOperation &op);
void AddType(const SPIRVOperation &op);
void AddVariable(const SPIRVOperation &op);
void AddConstant(const SPIRVOperation &op);
void AddFunction(const SPIRVOperation *ops, size_t count);
SPIRVIterator GetID(SPIRVId id);
@@ -340,6 +341,22 @@ public:
SPIRVId DeclareStructType(std::vector<uint32_t> members);
// helper for AddConstant
template <typename T>
SPIRVId AddConstantImmediate(T t)
{
SPIRVId typeId = DeclareType(scalar<T>());
SPIRVId retId = MakeId();
std::vector<uint32_t> words = {typeId, retId};
words.insert(words.end(), sizeof(T) / 4, 0U);
memcpy(&words[2], &t, sizeof(T));
AddConstant(SPIRVOperation(spv::OpConstant, words));
return retId;
}
// simple properties that are public.
struct
{