mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
Add ability to add capability flags to a shader
This commit is contained in:
@@ -257,6 +257,19 @@ void SPIRVEditor::AddDecoration(const SPIRVOperation &op)
|
||||
addWords(decorationSection.endOffset, op.size());
|
||||
}
|
||||
|
||||
void SPIRVEditor::AddCapability(spv::Capability cap)
|
||||
{
|
||||
// don't add duplicate capabilities
|
||||
if(capabilities.find(cap) != capabilities.end())
|
||||
return;
|
||||
|
||||
// insert the operation at the very start
|
||||
SPIRVOperation op(spv::OpCapability, {(uint32_t)cap});
|
||||
spirv.insert(spirv.begin() + FirstRealWord, op.begin(), op.end());
|
||||
RegisterOp(SPIRVIterator(spirv, FirstRealWord));
|
||||
addWords(FirstRealWord, op.size());
|
||||
}
|
||||
|
||||
SPIRVId SPIRVEditor::AddType(const SPIRVOperation &op)
|
||||
{
|
||||
SPIRVId id = op[1];
|
||||
@@ -425,6 +438,10 @@ void SPIRVEditor::RegisterOp(SPIRVIterator it)
|
||||
|
||||
entries.push_back(entry);
|
||||
}
|
||||
else if(opcode == spv::OpCapability)
|
||||
{
|
||||
capabilities.insert((spv::Capability)it.word(1));
|
||||
}
|
||||
else if(opcode == spv::OpFunction)
|
||||
{
|
||||
SPIRVId id = it.word(2);
|
||||
@@ -553,6 +570,10 @@ void SPIRVEditor::UnregisterOp(SPIRVIterator it)
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(opcode == spv::OpCapability)
|
||||
{
|
||||
capabilities.erase((spv::Capability)it.word(1));
|
||||
}
|
||||
else if(opcode == spv::OpTypeVoid || opcode == spv::OpTypeBool || opcode == spv::OpTypeInt ||
|
||||
opcode == spv::OpTypeFloat)
|
||||
{
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "3rdparty/glslang/SPIRV/spirv.hpp"
|
||||
@@ -374,6 +375,7 @@ public:
|
||||
|
||||
void SetName(uint32_t id, const char *name);
|
||||
void AddDecoration(const SPIRVOperation &op);
|
||||
void AddCapability(spv::Capability cap);
|
||||
SPIRVId AddType(const SPIRVOperation &op);
|
||||
SPIRVId AddVariable(const SPIRVOperation &op);
|
||||
SPIRVId AddConstant(const SPIRVOperation &op);
|
||||
@@ -476,6 +478,7 @@ private:
|
||||
|
||||
std::vector<SPIRVEntry> entries;
|
||||
std::vector<SPIRVId> functions;
|
||||
std::set<spv::Capability> capabilities;
|
||||
|
||||
std::map<SPIRVScalar, SPIRVId> scalarTypes;
|
||||
std::map<SPIRVVector, SPIRVId> vectorTypes;
|
||||
|
||||
Reference in New Issue
Block a user