SpirvShader: Split objects from types.
Change-Id: Ifbcb30da30b912a1a60f5799717869c8d56cd90b
Reviewed-on: https://swiftshader-review.googlesource.com/c/25018
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Chris Forbes <chrisforbes@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index c9bd086..98f4b912 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -117,10 +117,9 @@
case spv::OpTypeFunction:
{
auto resultId = insn.word(1);
- auto &object = types[resultId];
- object.kind = Object::Kind::Type;
- object.definition = insn;
- object.sizeInComponents = ComputeTypeSize(insn);
+ auto &type = types[resultId];
+ type.definition = insn;
+ type.sizeInComponents = ComputeTypeSize(insn);
// A structure is a builtin block if it has a builtin
// member. All members of such a structure are builtins.
@@ -133,7 +132,7 @@
{
if (m.HasBuiltIn)
{
- object.isBuiltInBlock = true;
+ type.isBuiltInBlock = true;
break;
}
}
@@ -142,7 +141,7 @@
else if (insn.opcode() == spv::OpTypePointer)
{
auto pointeeType = insn.word(3);
- object.isBuiltInBlock = getType(pointeeType).isBuiltInBlock;
+ type.isBuiltInBlock = getType(pointeeType).isBuiltInBlock;
}
break;
}
diff --git a/src/Pipeline/SpirvShader.hpp b/src/Pipeline/SpirvShader.hpp
index b2a3b3a..9611403 100644
--- a/src/Pipeline/SpirvShader.hpp
+++ b/src/Pipeline/SpirvShader.hpp
@@ -128,6 +128,15 @@
return InsnIterator{insns.cend()};
}
+ class Type
+ {
+ public:
+ InsnIterator definition;
+ spv::StorageClass storageClass;
+ uint32_t sizeInComponents = 0;
+ bool isBuiltInBlock = false;
+ };
+
class Object
{
public:
@@ -140,7 +149,6 @@
enum class Kind
{
Unknown, /* for paranoia -- if we get left with an object in this state, the module was broken */
- Type,
Variable,
InterfaceVariable,
Constant,
@@ -252,7 +260,7 @@
std::unordered_map<spv::BuiltIn, BuiltinMapping, BuiltInHash> inputBuiltins;
std::unordered_map<spv::BuiltIn, BuiltinMapping, BuiltInHash> outputBuiltins;
- Object const &getType(uint32_t id) const
+ Type const &getType(uint32_t id) const
{
auto it = types.find(id);
assert(it != types.end());
@@ -270,7 +278,7 @@
const int serialID;
static volatile int serialCounter;
Modes modes;
- std::unordered_map<uint32_t, Object> types;
+ std::unordered_map<uint32_t, Type> types;
std::unordered_map<uint32_t, Object> defs;
void ProcessExecutionMode(InsnIterator it);