SPV: Handle stride decorations for arrays of arrays, and using multiple type instances when strides are used.
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index c17a73e..e468705 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -1651,10 +1651,37 @@
}
if (type.isArray()) {
+ int stride = 0; // keep this 0 unless doing an explicit layout; 0 will mean no decoration, no stride
+
// Do all but the outer dimension
- for (int dim = type.getArraySizes()->getNumDims() - 1; dim > 0; --dim) {
- assert(type.getArraySizes()->getDimSize(dim) > 0);
- spvType = builder.makeArrayType(spvType, type.getArraySizes()->getDimSize(dim));
+ if (type.getArraySizes()->getNumDims() > 1) {
+ if (explicitLayout != glslang::ElpNone) {
+ // Use a dummy glslang type for querying internal strides of
+ // arrays of arrays, but using just a one-dimensional array.
+ glslang::TType simpleArrayType(type, 0); // deference type of the array
+ while (simpleArrayType.getArraySizes().getNumDims() > 1)
+ simpleArrayType.getArraySizes().dereference();
+
+ // Will compute the higher-order strides here, rather than making a whole
+ // pile of types and doing repetitive recursion on their contents.
+ stride = getArrayStride(simpleArrayType, explicitLayout, qualifier.layoutMatrix);
+ }
+ for (int dim = type.getArraySizes()->getNumDims() - 1; dim > 0; --dim) {
+ int size = type.getArraySizes()->getDimSize(dim);
+ assert(size > 0);
+ spvType = builder.makeArrayType(spvType, size, stride);
+ if (stride > 0)
+ builder.addDecoration(spvType, spv::DecorationArrayStride, stride);
+ stride *= size;
+ }
+ } else {
+ // single-dimensional array, and don't yet have stride
+
+ // We need to decorate array strides for types needing explicit layout,
+ // except for the very top if it is an array of blocks; that array is
+ // not laid out in memory in a way needing a stride.
+ if (explicitLayout != glslang::ElpNone && type.getBasicType() != glslang::EbtBlock)
+ stride = getArrayStride(type, explicitLayout, qualifier.layoutMatrix);
}
// Do the outer dimension, which might not be known for a runtime-sized array
@@ -1662,18 +1689,10 @@
spvType = builder.makeRuntimeArray(spvType);
} else {
assert(type.getOuterArraySize() > 0);
- spvType = builder.makeArrayType(spvType, type.getOuterArraySize());
+ spvType = builder.makeArrayType(spvType, type.getOuterArraySize(), stride);
}
-
- // TODO: explicit layout still needs to be done hierarchically for arrays of arrays, which
- // may still require additional "link time" support from the front-end
- // for arrays of arrays
-
- // We need to decorate array strides for types needing explicit layout,
- // except for the very top if it is an array of blocks; that array is
- // not laid out in memory in a way needing a stride.
- if (explicitLayout && type.getBasicType() != glslang::EbtBlock)
- builder.addDecoration(spvType, spv::DecorationArrayStride, getArrayStride(type, explicitLayout, qualifier.layoutMatrix));
+ if (stride > 0)
+ builder.addDecoration(spvType, spv::DecorationArrayStride, stride);
}
return spvType;
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index f1bb31f..98e8c39 100755
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -281,18 +281,23 @@
return type->getResultId();
}
-Id Builder::makeArrayType(Id element, unsigned size)
+// TODO: performance: track arrays per stride
+// If a stride is supplied (non-zero) make an array.
+// If no stride (0), reuse previous array types.
+Id Builder::makeArrayType(Id element, unsigned size, int stride)
{
// First, we need a constant instruction for the size
Id sizeId = makeUintConstant(size);
- // try to find existing type
Instruction* type;
- for (int t = 0; t < (int)groupedTypes[OpTypeArray].size(); ++t) {
- type = groupedTypes[OpTypeArray][t];
- if (type->getIdOperand(0) == element &&
- type->getIdOperand(1) == sizeId)
- return type->getResultId();
+ if (stride == 0) {
+ // try to find existing type
+ for (int t = 0; t < (int)groupedTypes[OpTypeArray].size(); ++t) {
+ type = groupedTypes[OpTypeArray][t];
+ if (type->getIdOperand(0) == element &&
+ type->getIdOperand(1) == sizeId)
+ return type->getResultId();
+ }
}
// not found, make it
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index 71126eb..7bf4396 100755
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -102,7 +102,7 @@
Id makeStructResultType(Id type0, Id type1);
Id makeVectorType(Id component, int size);
Id makeMatrixType(Id component, int cols, int rows);
- Id makeArrayType(Id element, unsigned size);
+ Id makeArrayType(Id element, unsigned size, int stride); // 0 means no stride decoration
Id makeRuntimeArray(Id element);
Id makeFunctionType(Id returnType, std::vector<Id>& paramTypes);
Id makeImageType(Id sampledType, Dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format);
diff --git a/Test/baseResults/spv.140.frag.out b/Test/baseResults/spv.140.frag.out
index 8b16537..e54dda6 100755
--- a/Test/baseResults/spv.140.frag.out
+++ b/Test/baseResults/spv.140.frag.out
@@ -5,7 +5,7 @@
// Module Version 10000
// Generated by (magic number): 80001
-// Id's are bound by 99
+// Id's are bound by 100
Capability Shader
1: ExtInstImport "GLSL.std.450"
@@ -24,39 +24,39 @@
Name 55 "sampR"
Name 63 "sampB"
Name 86 "samp2Da"
- Name 90 "bn"
- MemberName 90(bn) 0 "matra"
- MemberName 90(bn) 1 "matca"
- MemberName 90(bn) 2 "matr"
- MemberName 90(bn) 3 "matc"
- MemberName 90(bn) 4 "matrdef"
- Name 92 ""
- Name 95 "bi"
- MemberName 95(bi) 0 "v"
- Name 98 "bname"
+ Name 91 "bn"
+ MemberName 91(bn) 0 "matra"
+ MemberName 91(bn) 1 "matca"
+ MemberName 91(bn) 2 "matr"
+ MemberName 91(bn) 3 "matc"
+ MemberName 91(bn) 4 "matrdef"
+ Name 93 ""
+ Name 96 "bi"
+ MemberName 96(bi) 0 "v"
+ Name 99 "bname"
Decorate 16(gl_FrontFacing) BuiltIn FrontFacing
Decorate 33(gl_ClipDistance) BuiltIn ClipDistance
Decorate 89 ArrayStride 64
- Decorate 89 ArrayStride 64
- MemberDecorate 90(bn) 0 RowMajor
- MemberDecorate 90(bn) 0 Offset 0
- MemberDecorate 90(bn) 0 MatrixStride 16
- MemberDecorate 90(bn) 1 ColMajor
- MemberDecorate 90(bn) 1 Offset 256
- MemberDecorate 90(bn) 1 MatrixStride 16
- MemberDecorate 90(bn) 2 RowMajor
- MemberDecorate 90(bn) 2 Offset 512
- MemberDecorate 90(bn) 2 MatrixStride 16
- MemberDecorate 90(bn) 3 ColMajor
- MemberDecorate 90(bn) 3 Offset 576
- MemberDecorate 90(bn) 3 MatrixStride 16
- MemberDecorate 90(bn) 4 RowMajor
- MemberDecorate 90(bn) 4 Offset 640
- MemberDecorate 90(bn) 4 MatrixStride 16
- Decorate 90(bn) Block
- Decorate 94 ArrayStride 16
- MemberDecorate 95(bi) 0 Offset 0
- Decorate 95(bi) Block
+ Decorate 90 ArrayStride 64
+ MemberDecorate 91(bn) 0 RowMajor
+ MemberDecorate 91(bn) 0 Offset 0
+ MemberDecorate 91(bn) 0 MatrixStride 16
+ MemberDecorate 91(bn) 1 ColMajor
+ MemberDecorate 91(bn) 1 Offset 256
+ MemberDecorate 91(bn) 1 MatrixStride 16
+ MemberDecorate 91(bn) 2 RowMajor
+ MemberDecorate 91(bn) 2 Offset 512
+ MemberDecorate 91(bn) 2 MatrixStride 16
+ MemberDecorate 91(bn) 3 ColMajor
+ MemberDecorate 91(bn) 3 Offset 576
+ MemberDecorate 91(bn) 3 MatrixStride 16
+ MemberDecorate 91(bn) 4 RowMajor
+ MemberDecorate 91(bn) 4 Offset 640
+ MemberDecorate 91(bn) 4 MatrixStride 16
+ Decorate 91(bn) Block
+ Decorate 95 ArrayStride 16
+ MemberDecorate 96(bi) 0 Offset 0
+ Decorate 96(bi) Block
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -108,15 +108,16 @@
87: TypeMatrix 26(fvec4) 4
88: 29(int) Constant 4
89: TypeArray 87 88
- 90(bn): TypeStruct 89 89 87 87 87
- 91: TypePointer Uniform 90(bn)
- 92: 91(ptr) Variable Uniform
- 93: TypeVector 6(float) 3
- 94: TypeArray 93(fvec3) 50
- 95(bi): TypeStruct 94
- 96: TypeArray 95(bi) 88
- 97: TypePointer Uniform 96
- 98(bname): 97(ptr) Variable Uniform
+ 90: TypeArray 87 88
+ 91(bn): TypeStruct 89 90 87 87 87
+ 92: TypePointer Uniform 91(bn)
+ 93: 92(ptr) Variable Uniform
+ 94: TypeVector 6(float) 3
+ 95: TypeArray 94(fvec3) 50
+ 96(bi): TypeStruct 95
+ 97: TypeArray 96(bi) 88
+ 98: TypePointer Uniform 97
+ 99(bname): 98(ptr) Variable Uniform
4(main): 2 Function None 3
5: Label
13: 12(ptr) Variable Function
diff --git a/Test/baseResults/spv.layoutNested.vert.out b/Test/baseResults/spv.layoutNested.vert.out
index ac51aab..399e283 100644
--- a/Test/baseResults/spv.layoutNested.vert.out
+++ b/Test/baseResults/spv.layoutNested.vert.out
@@ -7,12 +7,12 @@
// Module Version 10000
// Generated by (magic number): 80001
-// Id's are bound by 69
+// Id's are bound by 70
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Vertex 4 "main" 62 65 67 68
+ EntryPoint Vertex 4 "main" 63 66 68 69
Source GLSL 450
Name 4 "main"
Name 14 "S"
@@ -24,82 +24,83 @@
MemberName 19(Block140) 1 "s"
MemberName 19(Block140) 2 "v"
Name 21 "inst140"
- Name 22 "S"
- MemberName 22(S) 0 "a"
- MemberName 22(S) 1 "b"
- MemberName 22(S) 2 "c"
- Name 25 "Block430"
- MemberName 25(Block430) 0 "u"
- MemberName 25(Block430) 1 "s"
- MemberName 25(Block430) 2 "v"
- Name 27 "inst430"
- Name 28 "S"
- MemberName 28(S) 0 "a"
- MemberName 28(S) 1 "b"
- MemberName 28(S) 2 "c"
- Name 30 "s"
- Name 31 "T"
- MemberName 31(T) 0 "m"
- MemberName 31(T) 1 "a"
- Name 33 "t"
- Name 34 "T"
- MemberName 34(T) 0 "m"
- MemberName 34(T) 1 "a"
- Name 35 "Nestor"
- MemberName 35(Nestor) 0 "nestorT"
- Name 36 "Bt1"
- MemberName 36(Bt1) 0 "nt"
- Name 38 "Btn1"
- Name 39 "T"
- MemberName 39(T) 0 "m"
- MemberName 39(T) 1 "a"
- Name 40 "Nestor"
- MemberName 40(Nestor) 0 "nestorT"
- Name 41 "Bt2"
- MemberName 41(Bt2) 0 "nt"
- Name 43 "Btn2"
- Name 44 "Bt3"
- MemberName 44(Bt3) 0 "ntcol"
- MemberName 44(Bt3) 1 "ntrow"
- Name 46 "Btn3"
- Name 47 "T"
- MemberName 47(T) 0 "m"
- MemberName 47(T) 1 "a"
- Name 48 "Nestor"
- MemberName 48(Nestor) 0 "nestorT"
- Name 49 "bBt1"
- MemberName 49(bBt1) 0 "nt"
- Name 51 "bBtn1"
- Name 52 "T"
- MemberName 52(T) 0 "m"
- MemberName 52(T) 1 "a"
- Name 53 "Nestor"
- MemberName 53(Nestor) 0 "nestorT"
- Name 54 "bBt2"
- MemberName 54(bBt2) 0 "nt"
- Name 56 "bBtn2"
- Name 57 "bBt3"
- MemberName 57(bBt3) 0 "ntcol"
- MemberName 57(bBt3) 1 "ntrow"
- Name 59 "bBtn3"
- Name 60 "S"
- MemberName 60(S) 0 "a"
- MemberName 60(S) 1 "b"
- MemberName 60(S) 2 "c"
- Name 62 "sout"
- Name 63 "S"
- MemberName 63(S) 0 "a"
- MemberName 63(S) 1 "b"
- MemberName 63(S) 2 "c"
- Name 65 "soutinv"
- Name 67 "gl_VertexID"
- Name 68 "gl_InstanceID"
+ Name 23 "S"
+ MemberName 23(S) 0 "a"
+ MemberName 23(S) 1 "b"
+ MemberName 23(S) 2 "c"
+ Name 26 "Block430"
+ MemberName 26(Block430) 0 "u"
+ MemberName 26(Block430) 1 "s"
+ MemberName 26(Block430) 2 "v"
+ Name 28 "inst430"
+ Name 29 "S"
+ MemberName 29(S) 0 "a"
+ MemberName 29(S) 1 "b"
+ MemberName 29(S) 2 "c"
+ Name 31 "s"
+ Name 32 "T"
+ MemberName 32(T) 0 "m"
+ MemberName 32(T) 1 "a"
+ Name 34 "t"
+ Name 35 "T"
+ MemberName 35(T) 0 "m"
+ MemberName 35(T) 1 "a"
+ Name 36 "Nestor"
+ MemberName 36(Nestor) 0 "nestorT"
+ Name 37 "Bt1"
+ MemberName 37(Bt1) 0 "nt"
+ Name 39 "Btn1"
+ Name 40 "T"
+ MemberName 40(T) 0 "m"
+ MemberName 40(T) 1 "a"
+ Name 41 "Nestor"
+ MemberName 41(Nestor) 0 "nestorT"
+ Name 42 "Bt2"
+ MemberName 42(Bt2) 0 "nt"
+ Name 44 "Btn2"
+ Name 45 "Bt3"
+ MemberName 45(Bt3) 0 "ntcol"
+ MemberName 45(Bt3) 1 "ntrow"
+ Name 47 "Btn3"
+ Name 48 "T"
+ MemberName 48(T) 0 "m"
+ MemberName 48(T) 1 "a"
+ Name 49 "Nestor"
+ MemberName 49(Nestor) 0 "nestorT"
+ Name 50 "bBt1"
+ MemberName 50(bBt1) 0 "nt"
+ Name 52 "bBtn1"
+ Name 53 "T"
+ MemberName 53(T) 0 "m"
+ MemberName 53(T) 1 "a"
+ Name 54 "Nestor"
+ MemberName 54(Nestor) 0 "nestorT"
+ Name 55 "bBt2"
+ MemberName 55(bBt2) 0 "nt"
+ Name 57 "bBtn2"
+ Name 58 "bBt3"
+ MemberName 58(bBt3) 0 "ntcol"
+ MemberName 58(bBt3) 1 "ntrow"
+ Name 60 "bBtn3"
+ Name 61 "S"
+ MemberName 61(S) 0 "a"
+ MemberName 61(S) 1 "b"
+ MemberName 61(S) 2 "c"
+ Name 63 "sout"
+ Name 64 "S"
+ MemberName 64(S) 0 "a"
+ MemberName 64(S) 1 "b"
+ MemberName 64(S) 2 "c"
+ Name 66 "soutinv"
+ Name 68 "gl_VertexID"
+ Name 69 "gl_InstanceID"
Decorate 13 ArrayStride 32
MemberDecorate 14(S) 0 Offset 0
MemberDecorate 14(S) 1 ColMajor
MemberDecorate 14(S) 1 Offset 16
MemberDecorate 14(S) 1 MatrixStride 16
MemberDecorate 14(S) 2 Offset 144
+ Decorate 16 ArrayStride 160
Decorate 18 ArrayStride 480
MemberDecorate 19(Block140) 0 Offset 0
MemberDecorate 19(Block140) 1 Offset 16
@@ -107,74 +108,75 @@
Decorate 19(Block140) Block
Decorate 21(inst140) DescriptorSet 0
Decorate 21(inst140) Binding 0
- Decorate 13 ArrayStride 16
- MemberDecorate 22(S) 0 Offset 0
- MemberDecorate 22(S) 1 ColMajor
- MemberDecorate 22(S) 1 Offset 16
- MemberDecorate 22(S) 1 MatrixStride 8
- MemberDecorate 22(S) 2 Offset 80
- Decorate 24 ArrayStride 288
- MemberDecorate 25(Block430) 0 Offset 0
- MemberDecorate 25(Block430) 1 Offset 16
- MemberDecorate 25(Block430) 2 Offset 592
- Decorate 25(Block430) BufferBlock
- Decorate 27(inst430) DescriptorSet 0
- Decorate 27(inst430) Binding 1
- MemberDecorate 34(T) 0 RowMajor
- MemberDecorate 34(T) 0 Offset 0
- MemberDecorate 34(T) 0 MatrixStride 16
- MemberDecorate 34(T) 1 Offset 32
- MemberDecorate 35(Nestor) 0 Offset 0
- MemberDecorate 36(Bt1) 0 Offset 0
- Decorate 36(Bt1) Block
- Decorate 38(Btn1) DescriptorSet 1
- Decorate 38(Btn1) Binding 0
- MemberDecorate 39(T) 0 ColMajor
- MemberDecorate 39(T) 0 Offset 0
- MemberDecorate 39(T) 0 MatrixStride 16
- MemberDecorate 39(T) 1 Offset 32
- MemberDecorate 40(Nestor) 0 Offset 0
- MemberDecorate 41(Bt2) 0 Offset 0
- Decorate 41(Bt2) Block
- Decorate 43(Btn2) DescriptorSet 1
- Decorate 43(Btn2) Binding 0
- MemberDecorate 44(Bt3) 0 Offset 0
- MemberDecorate 44(Bt3) 1 Offset 48
- Decorate 44(Bt3) Block
- Decorate 46(Btn3) DescriptorSet 1
- Decorate 46(Btn3) Binding 0
- MemberDecorate 47(T) 0 RowMajor
- MemberDecorate 47(T) 0 Offset 0
- MemberDecorate 47(T) 0 MatrixStride 8
- MemberDecorate 47(T) 1 Offset 16
- MemberDecorate 48(Nestor) 0 Offset 0
- MemberDecorate 49(bBt1) 0 Offset 0
- Decorate 49(bBt1) BufferBlock
- Decorate 51(bBtn1) DescriptorSet 1
- Decorate 51(bBtn1) Binding 0
- MemberDecorate 52(T) 0 ColMajor
- MemberDecorate 52(T) 0 Offset 0
- MemberDecorate 52(T) 0 MatrixStride 8
- MemberDecorate 52(T) 1 Offset 16
- MemberDecorate 53(Nestor) 0 Offset 0
- MemberDecorate 54(bBt2) 0 Offset 0
- Decorate 54(bBt2) BufferBlock
- Decorate 56(bBtn2) DescriptorSet 1
- Decorate 56(bBtn2) Binding 0
- MemberDecorate 57(bBt3) 0 Offset 0
- MemberDecorate 57(bBt3) 1 Offset 24
- Decorate 57(bBt3) BufferBlock
- Decorate 59(bBtn3) DescriptorSet 1
- Decorate 59(bBtn3) Binding 0
- MemberDecorate 60(S) 0 Flat
- MemberDecorate 60(S) 1 Flat
- MemberDecorate 60(S) 2 Flat
- MemberDecorate 63(S) 0 Invariant
- MemberDecorate 63(S) 1 Invariant
- MemberDecorate 63(S) 2 Invariant
- Decorate 65(soutinv) Invariant
- Decorate 67(gl_VertexID) BuiltIn VertexId
- Decorate 68(gl_InstanceID) BuiltIn InstanceId
+ Decorate 22 ArrayStride 16
+ MemberDecorate 23(S) 0 Offset 0
+ MemberDecorate 23(S) 1 ColMajor
+ MemberDecorate 23(S) 1 Offset 16
+ MemberDecorate 23(S) 1 MatrixStride 8
+ MemberDecorate 23(S) 2 Offset 80
+ Decorate 24 ArrayStride 96
+ Decorate 25 ArrayStride 288
+ MemberDecorate 26(Block430) 0 Offset 0
+ MemberDecorate 26(Block430) 1 Offset 16
+ MemberDecorate 26(Block430) 2 Offset 592
+ Decorate 26(Block430) BufferBlock
+ Decorate 28(inst430) DescriptorSet 0
+ Decorate 28(inst430) Binding 1
+ MemberDecorate 35(T) 0 RowMajor
+ MemberDecorate 35(T) 0 Offset 0
+ MemberDecorate 35(T) 0 MatrixStride 16
+ MemberDecorate 35(T) 1 Offset 32
+ MemberDecorate 36(Nestor) 0 Offset 0
+ MemberDecorate 37(Bt1) 0 Offset 0
+ Decorate 37(Bt1) Block
+ Decorate 39(Btn1) DescriptorSet 1
+ Decorate 39(Btn1) Binding 0
+ MemberDecorate 40(T) 0 ColMajor
+ MemberDecorate 40(T) 0 Offset 0
+ MemberDecorate 40(T) 0 MatrixStride 16
+ MemberDecorate 40(T) 1 Offset 32
+ MemberDecorate 41(Nestor) 0 Offset 0
+ MemberDecorate 42(Bt2) 0 Offset 0
+ Decorate 42(Bt2) Block
+ Decorate 44(Btn2) DescriptorSet 1
+ Decorate 44(Btn2) Binding 0
+ MemberDecorate 45(Bt3) 0 Offset 0
+ MemberDecorate 45(Bt3) 1 Offset 48
+ Decorate 45(Bt3) Block
+ Decorate 47(Btn3) DescriptorSet 1
+ Decorate 47(Btn3) Binding 0
+ MemberDecorate 48(T) 0 RowMajor
+ MemberDecorate 48(T) 0 Offset 0
+ MemberDecorate 48(T) 0 MatrixStride 8
+ MemberDecorate 48(T) 1 Offset 16
+ MemberDecorate 49(Nestor) 0 Offset 0
+ MemberDecorate 50(bBt1) 0 Offset 0
+ Decorate 50(bBt1) BufferBlock
+ Decorate 52(bBtn1) DescriptorSet 1
+ Decorate 52(bBtn1) Binding 0
+ MemberDecorate 53(T) 0 ColMajor
+ MemberDecorate 53(T) 0 Offset 0
+ MemberDecorate 53(T) 0 MatrixStride 8
+ MemberDecorate 53(T) 1 Offset 16
+ MemberDecorate 54(Nestor) 0 Offset 0
+ MemberDecorate 55(bBt2) 0 Offset 0
+ Decorate 55(bBt2) BufferBlock
+ Decorate 57(bBtn2) DescriptorSet 1
+ Decorate 57(bBtn2) Binding 0
+ MemberDecorate 58(bBt3) 0 Offset 0
+ MemberDecorate 58(bBt3) 1 Offset 24
+ Decorate 58(bBt3) BufferBlock
+ Decorate 60(bBtn3) DescriptorSet 1
+ Decorate 60(bBtn3) Binding 0
+ MemberDecorate 61(S) 0 Flat
+ MemberDecorate 61(S) 1 Flat
+ MemberDecorate 61(S) 2 Flat
+ MemberDecorate 64(S) 0 Invariant
+ MemberDecorate 64(S) 1 Invariant
+ MemberDecorate 64(S) 2 Invariant
+ Decorate 66(soutinv) Invariant
+ Decorate 68(gl_VertexID) BuiltIn VertexId
+ Decorate 69(gl_InstanceID) BuiltIn InstanceId
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
@@ -193,53 +195,54 @@
19(Block140): TypeStruct 6(int) 18 10(fvec2)
20: TypePointer Uniform 19(Block140)
21(inst140): 20(ptr) Variable Uniform
- 22(S): TypeStruct 8(ivec3) 13 7(int)
- 23: TypeArray 22(S) 15
- 24: TypeArray 23 17
- 25(Block430): TypeStruct 6(int) 24 10(fvec2)
- 26: TypePointer Uniform 25(Block430)
- 27(inst430): 26(ptr) Variable Uniform
- 28(S): TypeStruct 8(ivec3) 13 7(int)
- 29: TypePointer Private 28(S)
- 30(s): 29(ptr) Variable Private
- 31(T): TypeStruct 11 6(int)
- 32: TypePointer Private 31(T)
- 33(t): 32(ptr) Variable Private
- 34(T): TypeStruct 11 6(int)
- 35(Nestor): TypeStruct 34(T)
- 36(Bt1): TypeStruct 35(Nestor)
- 37: TypePointer Uniform 36(Bt1)
- 38(Btn1): 37(ptr) Variable Uniform
- 39(T): TypeStruct 11 6(int)
- 40(Nestor): TypeStruct 39(T)
- 41(Bt2): TypeStruct 40(Nestor)
- 42: TypePointer Uniform 41(Bt2)
- 43(Btn2): 42(ptr) Variable Uniform
- 44(Bt3): TypeStruct 40(Nestor) 35(Nestor)
- 45: TypePointer Uniform 44(Bt3)
- 46(Btn3): 45(ptr) Variable Uniform
- 47(T): TypeStruct 11 6(int)
- 48(Nestor): TypeStruct 47(T)
- 49(bBt1): TypeStruct 48(Nestor)
- 50: TypePointer Uniform 49(bBt1)
- 51(bBtn1): 50(ptr) Variable Uniform
- 52(T): TypeStruct 11 6(int)
- 53(Nestor): TypeStruct 52(T)
- 54(bBt2): TypeStruct 53(Nestor)
- 55: TypePointer Uniform 54(bBt2)
- 56(bBtn2): 55(ptr) Variable Uniform
- 57(bBt3): TypeStruct 48(Nestor) 53(Nestor)
- 58: TypePointer Uniform 57(bBt3)
- 59(bBtn3): 58(ptr) Variable Uniform
- 60(S): TypeStruct 8(ivec3) 13 7(int)
- 61: TypePointer Output 60(S)
- 62(sout): 61(ptr) Variable Output
- 63(S): TypeStruct 8(ivec3) 13 7(int)
- 64: TypePointer Output 63(S)
- 65(soutinv): 64(ptr) Variable Output
- 66: TypePointer Input 6(int)
- 67(gl_VertexID): 66(ptr) Variable Input
-68(gl_InstanceID): 66(ptr) Variable Input
+ 22: TypeArray 11 12
+ 23(S): TypeStruct 8(ivec3) 22 7(int)
+ 24: TypeArray 23(S) 15
+ 25: TypeArray 24 17
+ 26(Block430): TypeStruct 6(int) 25 10(fvec2)
+ 27: TypePointer Uniform 26(Block430)
+ 28(inst430): 27(ptr) Variable Uniform
+ 29(S): TypeStruct 8(ivec3) 13 7(int)
+ 30: TypePointer Private 29(S)
+ 31(s): 30(ptr) Variable Private
+ 32(T): TypeStruct 11 6(int)
+ 33: TypePointer Private 32(T)
+ 34(t): 33(ptr) Variable Private
+ 35(T): TypeStruct 11 6(int)
+ 36(Nestor): TypeStruct 35(T)
+ 37(Bt1): TypeStruct 36(Nestor)
+ 38: TypePointer Uniform 37(Bt1)
+ 39(Btn1): 38(ptr) Variable Uniform
+ 40(T): TypeStruct 11 6(int)
+ 41(Nestor): TypeStruct 40(T)
+ 42(Bt2): TypeStruct 41(Nestor)
+ 43: TypePointer Uniform 42(Bt2)
+ 44(Btn2): 43(ptr) Variable Uniform
+ 45(Bt3): TypeStruct 41(Nestor) 36(Nestor)
+ 46: TypePointer Uniform 45(Bt3)
+ 47(Btn3): 46(ptr) Variable Uniform
+ 48(T): TypeStruct 11 6(int)
+ 49(Nestor): TypeStruct 48(T)
+ 50(bBt1): TypeStruct 49(Nestor)
+ 51: TypePointer Uniform 50(bBt1)
+ 52(bBtn1): 51(ptr) Variable Uniform
+ 53(T): TypeStruct 11 6(int)
+ 54(Nestor): TypeStruct 53(T)
+ 55(bBt2): TypeStruct 54(Nestor)
+ 56: TypePointer Uniform 55(bBt2)
+ 57(bBtn2): 56(ptr) Variable Uniform
+ 58(bBt3): TypeStruct 49(Nestor) 54(Nestor)
+ 59: TypePointer Uniform 58(bBt3)
+ 60(bBtn3): 59(ptr) Variable Uniform
+ 61(S): TypeStruct 8(ivec3) 13 7(int)
+ 62: TypePointer Output 61(S)
+ 63(sout): 62(ptr) Variable Output
+ 64(S): TypeStruct 8(ivec3) 13 7(int)
+ 65: TypePointer Output 64(S)
+ 66(soutinv): 65(ptr) Variable Output
+ 67: TypePointer Input 6(int)
+ 68(gl_VertexID): 67(ptr) Variable Input
+69(gl_InstanceID): 67(ptr) Variable Input
4(main): 2 Function None 3
5: Label
Return