OpTypeForwardPointer support
OpTypeForwardPointer is mostly trivial to support and can be treated
as a regular OpTypePointer to meet SwiftShader's needs.
Bug: b/184952772
Change-Id: I8d75f5b0049b0cecaaece5beacd939260a26ccc4
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/66453
Tested-by: Alexis Hétu <sugoi@google.com>
Commit-Queue: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index c87d535..76dce73 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -276,6 +276,7 @@
case spv::OpTypeRuntimeArray:
case spv::OpTypeStruct:
case spv::OpTypePointer:
+ case spv::OpTypeForwardPointer:
case spv::OpTypeFunction:
DeclareType(insn);
break;
@@ -855,7 +856,8 @@
// A structure is a builtin block if it has a builtin
// member. All members of such a structure are builtins.
- switch(insn.opcode())
+ spv::Op opcode = insn.opcode();
+ switch(opcode)
{
case spv::OpTypeStruct:
{
@@ -874,8 +876,9 @@
}
break;
case spv::OpTypePointer:
+ case spv::OpTypeForwardPointer:
{
- Type::ID elementTypeId = insn.word(3);
+ Type::ID elementTypeId = insn.word((opcode == spv::OpTypeForwardPointer) ? 1 : 3);
type.element = elementTypeId;
type.isBuiltInBlock = getType(elementTypeId).isBuiltInBlock;
type.storageClass = static_cast<spv::StorageClass>(insn.word(2));
@@ -1078,6 +1081,7 @@
case spv::OpTypeSampler:
case spv::OpTypeImage:
case spv::OpTypeSampledImage:
+ case spv::OpTypeForwardPointer:
case spv::OpTypeFunction:
case spv::OpTypeRuntimeArray:
// Objects that don't consume any space.
@@ -1871,6 +1875,7 @@
case spv::OpTypeMatrix:
case spv::OpTypeStruct:
case spv::OpTypePointer:
+ case spv::OpTypeForwardPointer:
case spv::OpTypeFunction:
case spv::OpTypeImage:
case spv::OpTypeSampledImage: