Merge pull request #1603 from KhronosGroup/uint-array-length
SPV: Generate OpArrayLength with no signedness.
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 5c00024..3d0d65e 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -1825,6 +1825,12 @@
unsigned int member = node->getOperand()->getAsBinaryNode()->getRight()->getAsConstantUnion()->getConstArray()[0].getUConst();
spv::Id length = builder.createArrayLength(builder.accessChainGetLValue(), member);
+ // GLSL semantics say the result of .length() is an int, while SPIR-V says
+ // signedness must be 0. So, convert from SPIR-V unsigned back to GLSL's
+ // AST expectation of a signed result.
+ if (glslangIntermediate->getSource() == glslang::EShSourceGlsl)
+ length = builder.createUnaryOp(spv::OpBitcast, builder.makeIntType(32), length);
+
builder.clearAccessChain();
builder.setAccessChainRValue(length);
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
old mode 100644
new mode 100755
index 8755d9e..951d104
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -1293,7 +1293,7 @@
Id Builder::createArrayLength(Id base, unsigned int member)
{
- spv::Id intType = makeIntType(32);
+ spv::Id intType = makeUintType(32);
Instruction* length = new Instruction(getUniqueId(), intType, OpArrayLength);
length->addIdOperand(base);
length->addImmediateOperand(member);
diff --git a/Test/baseResults/hlsl.structbuffer.byte.frag.out b/Test/baseResults/hlsl.structbuffer.byte.frag.out
index 49958a6..a23ccd2 100644
--- a/Test/baseResults/hlsl.structbuffer.byte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.byte.frag.out
@@ -323,10 +323,6 @@
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'pos' (layout( location=0) flat in uint)
-error: SPIRV-Tools Validation Errors
-error: OpStore Pointer <id> '14[size]'s type does not match Object <id> '20's type.
- OpStore %size %20
-
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 114
@@ -370,13 +366,13 @@
16(sbuf): TypeStruct 15
17: TypePointer Uniform 16(sbuf)
18(sbuf): 17(ptr) Variable Uniform
- 19: TypeInt 32 1
- 21: 19(int) Constant 0
- 23: 19(int) Constant 2
+ 20: TypeInt 32 1
+ 21: 20(int) Constant 0
+ 23: 20(int) Constant 2
25: TypePointer Uniform 6(int)
- 29: TypePointer Function 19(int)
+ 29: TypePointer Function 20(int)
32: 6(int) Constant 4
- 39: 19(int) Constant 1
+ 39: 20(int) Constant 1
43: TypeVector 6(int) 2
45: TypeVector 8(float) 2
47: 8(float) Constant 0
@@ -384,7 +380,7 @@
69: TypeVector 6(int) 3
71: TypeVector 8(float) 3
80: 6(int) Constant 12
- 95: 19(int) Constant 3
+ 95: 20(int) Constant 3
99: TypeVector 6(int) 4
106: TypePointer Input 6(int)
107(pos): 106(ptr) Variable Input
@@ -409,22 +405,22 @@
30(byteAddrTemp): 29(ptr) Variable Function
53(byteAddrTemp): 29(ptr) Variable Function
78(byteAddrTemp): 29(ptr) Variable Function
- 20: 19(int) ArrayLength 18(sbuf) 0
- Store 14(size) 20
+ 19: 6(int) ArrayLength 18(sbuf) 0
+ Store 14(size) 19
22: 6(int) Load 11(pos)
- 24: 19(int) ShiftRightLogical 22 23
+ 24: 20(int) ShiftRightLogical 22 23
26: 25(ptr) AccessChain 18(sbuf) 21 24
27: 6(int) Load 26
28: 8(float) ConvertUToF 27
31: 6(int) Load 11(pos)
33: 6(int) IAdd 31 32
- 34: 19(int) ShiftRightLogical 33 23
+ 34: 20(int) ShiftRightLogical 33 23
Store 30(byteAddrTemp) 34
- 35: 19(int) Load 30(byteAddrTemp)
+ 35: 20(int) Load 30(byteAddrTemp)
36: 25(ptr) AccessChain 18(sbuf) 21 35
37: 6(int) Load 36
- 38: 19(int) Load 30(byteAddrTemp)
- 40: 19(int) IAdd 38 39
+ 38: 20(int) Load 30(byteAddrTemp)
+ 40: 20(int) IAdd 38 39
41: 25(ptr) AccessChain 18(sbuf) 21 40
42: 6(int) Load 41
44: 43(ivec2) CompositeConstruct 37 42
@@ -436,17 +432,17 @@
52: 9(fvec4) FAdd 51 50
54: 6(int) Load 11(pos)
56: 6(int) IAdd 54 55
- 57: 19(int) ShiftRightLogical 56 23
+ 57: 20(int) ShiftRightLogical 56 23
Store 53(byteAddrTemp) 57
- 58: 19(int) Load 53(byteAddrTemp)
+ 58: 20(int) Load 53(byteAddrTemp)
59: 25(ptr) AccessChain 18(sbuf) 21 58
60: 6(int) Load 59
- 61: 19(int) Load 53(byteAddrTemp)
- 62: 19(int) IAdd 61 39
+ 61: 20(int) Load 53(byteAddrTemp)
+ 62: 20(int) IAdd 61 39
63: 25(ptr) AccessChain 18(sbuf) 21 62
64: 6(int) Load 63
- 65: 19(int) Load 53(byteAddrTemp)
- 66: 19(int) IAdd 65 23
+ 65: 20(int) Load 53(byteAddrTemp)
+ 66: 20(int) IAdd 65 23
67: 25(ptr) AccessChain 18(sbuf) 21 66
68: 6(int) Load 67
70: 69(ivec3) CompositeConstruct 60 64 68
@@ -458,21 +454,21 @@
77: 9(fvec4) FAdd 52 76
79: 6(int) Load 11(pos)
81: 6(int) IAdd 79 80
- 82: 19(int) ShiftRightLogical 81 23
+ 82: 20(int) ShiftRightLogical 81 23
Store 78(byteAddrTemp) 82
- 83: 19(int) Load 78(byteAddrTemp)
+ 83: 20(int) Load 78(byteAddrTemp)
84: 25(ptr) AccessChain 18(sbuf) 21 83
85: 6(int) Load 84
- 86: 19(int) Load 78(byteAddrTemp)
- 87: 19(int) IAdd 86 39
+ 86: 20(int) Load 78(byteAddrTemp)
+ 87: 20(int) IAdd 86 39
88: 25(ptr) AccessChain 18(sbuf) 21 87
89: 6(int) Load 88
- 90: 19(int) Load 78(byteAddrTemp)
- 91: 19(int) IAdd 90 23
+ 90: 20(int) Load 78(byteAddrTemp)
+ 91: 20(int) IAdd 90 23
92: 25(ptr) AccessChain 18(sbuf) 21 91
93: 6(int) Load 92
- 94: 19(int) Load 78(byteAddrTemp)
- 96: 19(int) IAdd 94 95
+ 94: 20(int) Load 78(byteAddrTemp)
+ 96: 20(int) IAdd 94 95
97: 25(ptr) AccessChain 18(sbuf) 21 96
98: 6(int) Load 97
100: 99(ivec4) CompositeConstruct 85 89 93 98
diff --git a/Test/baseResults/hlsl.structbuffer.coherent.frag.out b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
index 1d11b64..738e13d 100644
--- a/Test/baseResults/hlsl.structbuffer.coherent.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
@@ -175,10 +175,6 @@
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'pos' (layout( location=0) flat in uint)
-error: SPIRV-Tools Validation Errors
-error: OpStore Pointer <id> '26[size]'s type does not match Object <id> '33's type.
- OpStore %size %33
-
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 78
@@ -276,7 +272,7 @@
22: 6(int) IAdd 20 21
25: 24(ptr) AccessChain 17(sbuf2) 19 22
Store 25 23
- 33: 18(int) ArrayLength 32(sbuf) 0
+ 33: 6(int) ArrayLength 32(sbuf) 0
Store 26(size) 33
Store 34(stride) 35
36: 6(int) Load 11(pos)
diff --git a/Test/baseResults/hlsl.structbuffer.frag.out b/Test/baseResults/hlsl.structbuffer.frag.out
index e058d11..af76bfb 100644
--- a/Test/baseResults/hlsl.structbuffer.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.frag.out
@@ -187,10 +187,6 @@
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'pos' (layout( location=0) flat in uint)
-error: SPIRV-Tools Validation Errors
-error: OpStore Pointer <id> '43[size]'s type does not match Object <id> '44's type.
- OpStore %size %44
-
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 96
@@ -312,7 +308,7 @@
41: 15(bool) INotEqual 39 35
42: 37(ptr) AccessChain 18(mydata) 40
Store 42 41
- 44: 24(int) ArrayLength 23(sbuf) 0
+ 44: 6(int) ArrayLength 23(sbuf) 0
Store 43(size) 44
Store 45(stride) 46
47: 6(int) Load 11(pos)
diff --git a/Test/baseResults/hlsl.structbuffer.rw.frag.out b/Test/baseResults/hlsl.structbuffer.rw.frag.out
index 7fbd150..13a5956 100644
--- a/Test/baseResults/hlsl.structbuffer.rw.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rw.frag.out
@@ -175,10 +175,6 @@
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'pos' (layout( location=0) flat in uint)
-error: SPIRV-Tools Validation Errors
-error: OpStore Pointer <id> '26[size]'s type does not match Object <id> '33's type.
- OpStore %size %33
-
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 78
@@ -274,7 +270,7 @@
22: 6(int) IAdd 20 21
25: 24(ptr) AccessChain 17(sbuf2) 19 22
Store 25 23
- 33: 18(int) ArrayLength 32(sbuf) 0
+ 33: 6(int) ArrayLength 32(sbuf) 0
Store 26(size) 33
Store 34(stride) 35
36: 6(int) Load 11(pos)
diff --git a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
index ed27c89..690a0da 100644
--- a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
@@ -1003,10 +1003,6 @@
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:? 'pos' (layout( location=0) flat in uint)
-error: SPIRV-Tools Validation Errors
-error: OpStore Pointer <id> '14[size]'s type does not match Object <id> '20's type.
- OpStore %size %20
-
// Module Version 10000
// Generated by (magic number): 80007
// Id's are bound by 239
@@ -1053,18 +1049,18 @@
16(sbuf): TypeStruct 15
17: TypePointer Uniform 16(sbuf)
18(sbuf): 17(ptr) Variable Uniform
- 19: TypeInt 32 1
- 21: TypePointer Function 19(int)
- 24: 19(int) Constant 2
- 26: 19(int) Constant 0
+ 20: TypeInt 32 1
+ 21: TypePointer Function 20(int)
+ 24: 20(int) Constant 2
+ 26: 20(int) Constant 0
30: TypePointer Uniform 6(int)
- 45: 19(int) Constant 1
+ 45: 20(int) Constant 1
49: TypeVector 6(int) 2
51: 6(int) Constant 0
66: 6(int) Constant 1
87: TypeVector 6(int) 3
125: 6(int) Constant 2
- 147: 19(int) Constant 3
+ 147: 20(int) Constant 3
151: TypeVector 6(int) 4
219: 6(int) Constant 3
231: TypePointer Input 6(int)
@@ -1094,46 +1090,46 @@
73(byteAddrTemp): 21(ptr) Variable Function
128(byteAddrTemp): 21(ptr) Variable Function
132(byteAddrTemp): 21(ptr) Variable Function
- 20: 19(int) ArrayLength 18(sbuf) 0
- Store 14(size) 20
+ 19: 6(int) ArrayLength 18(sbuf) 0
+ Store 14(size) 19
23: 6(int) Load 11(pos)
- 25: 19(int) ShiftRightLogical 23 24
+ 25: 20(int) ShiftRightLogical 23 24
Store 22(byteAddrTemp) 25
- 27: 19(int) Load 22(byteAddrTemp)
+ 27: 20(int) Load 22(byteAddrTemp)
28: 6(int) Load 11(pos)
- 29: 19(int) ShiftRightLogical 28 24
+ 29: 20(int) ShiftRightLogical 28 24
31: 30(ptr) AccessChain 18(sbuf) 26 29
32: 6(int) Load 31
33: 30(ptr) AccessChain 18(sbuf) 26 27
Store 33 32
35: 6(int) Load 11(pos)
- 36: 19(int) ShiftRightLogical 35 24
+ 36: 20(int) ShiftRightLogical 35 24
Store 34(byteAddrTemp) 36
- 37: 19(int) Load 34(byteAddrTemp)
+ 37: 20(int) Load 34(byteAddrTemp)
39: 6(int) Load 11(pos)
- 40: 19(int) ShiftRightLogical 39 24
+ 40: 20(int) ShiftRightLogical 39 24
Store 38(byteAddrTemp) 40
- 41: 19(int) Load 38(byteAddrTemp)
+ 41: 20(int) Load 38(byteAddrTemp)
42: 30(ptr) AccessChain 18(sbuf) 26 41
43: 6(int) Load 42
- 44: 19(int) Load 38(byteAddrTemp)
- 46: 19(int) IAdd 44 45
+ 44: 20(int) Load 38(byteAddrTemp)
+ 46: 20(int) IAdd 44 45
47: 30(ptr) AccessChain 18(sbuf) 26 46
48: 6(int) Load 47
50: 49(ivec2) CompositeConstruct 43 48
52: 6(int) CompositeExtract 50 0
53: 30(ptr) AccessChain 18(sbuf) 26 37
Store 53 52
- 54: 19(int) Load 34(byteAddrTemp)
- 55: 19(int) IAdd 54 45
+ 54: 20(int) Load 34(byteAddrTemp)
+ 55: 20(int) IAdd 54 45
56: 6(int) Load 11(pos)
- 57: 19(int) ShiftRightLogical 56 24
+ 57: 20(int) ShiftRightLogical 56 24
Store 38(byteAddrTemp) 57
- 58: 19(int) Load 38(byteAddrTemp)
+ 58: 20(int) Load 38(byteAddrTemp)
59: 30(ptr) AccessChain 18(sbuf) 26 58
60: 6(int) Load 59
- 61: 19(int) Load 38(byteAddrTemp)
- 62: 19(int) IAdd 61 45
+ 61: 20(int) Load 38(byteAddrTemp)
+ 62: 20(int) IAdd 61 45
63: 30(ptr) AccessChain 18(sbuf) 26 62
64: 6(int) Load 63
65: 49(ivec2) CompositeConstruct 60 64
@@ -1141,61 +1137,61 @@
68: 30(ptr) AccessChain 18(sbuf) 26 55
Store 68 67
70: 6(int) Load 11(pos)
- 71: 19(int) ShiftRightLogical 70 24
+ 71: 20(int) ShiftRightLogical 70 24
Store 69(byteAddrTemp) 71
- 72: 19(int) Load 69(byteAddrTemp)
+ 72: 20(int) Load 69(byteAddrTemp)
74: 6(int) Load 11(pos)
- 75: 19(int) ShiftRightLogical 74 24
+ 75: 20(int) ShiftRightLogical 74 24
Store 73(byteAddrTemp) 75
- 76: 19(int) Load 73(byteAddrTemp)
+ 76: 20(int) Load 73(byteAddrTemp)
77: 30(ptr) AccessChain 18(sbuf) 26 76
78: 6(int) Load 77
- 79: 19(int) Load 73(byteAddrTemp)
- 80: 19(int) IAdd 79 45
+ 79: 20(int) Load 73(byteAddrTemp)
+ 80: 20(int) IAdd 79 45
81: 30(ptr) AccessChain 18(sbuf) 26 80
82: 6(int) Load 81
- 83: 19(int) Load 73(byteAddrTemp)
- 84: 19(int) IAdd 83 24
+ 83: 20(int) Load 73(byteAddrTemp)
+ 84: 20(int) IAdd 83 24
85: 30(ptr) AccessChain 18(sbuf) 26 84
86: 6(int) Load 85
88: 87(ivec3) CompositeConstruct 78 82 86
89: 6(int) CompositeExtract 88 0
90: 30(ptr) AccessChain 18(sbuf) 26 72
Store 90 89
- 91: 19(int) Load 69(byteAddrTemp)
- 92: 19(int) IAdd 91 45
+ 91: 20(int) Load 69(byteAddrTemp)
+ 92: 20(int) IAdd 91 45
93: 6(int) Load 11(pos)
- 94: 19(int) ShiftRightLogical 93 24
+ 94: 20(int) ShiftRightLogical 93 24
Store 73(byteAddrTemp) 94
- 95: 19(int) Load 73(byteAddrTemp)
+ 95: 20(int) Load 73(byteAddrTemp)
96: 30(ptr) AccessChain 18(sbuf) 26 95
97: 6(int) Load 96
- 98: 19(int) Load 73(byteAddrTemp)
- 99: 19(int) IAdd 98 45
+ 98: 20(int) Load 73(byteAddrTemp)
+ 99: 20(int) IAdd 98 45
100: 30(ptr) AccessChain 18(sbuf) 26 99
101: 6(int) Load 100
- 102: 19(int) Load 73(byteAddrTemp)
- 103: 19(int) IAdd 102 24
+ 102: 20(int) Load 73(byteAddrTemp)
+ 103: 20(int) IAdd 102 24
104: 30(ptr) AccessChain 18(sbuf) 26 103
105: 6(int) Load 104
106: 87(ivec3) CompositeConstruct 97 101 105
107: 6(int) CompositeExtract 106 1
108: 30(ptr) AccessChain 18(sbuf) 26 92
Store 108 107
- 109: 19(int) Load 69(byteAddrTemp)
- 110: 19(int) IAdd 109 24
+ 109: 20(int) Load 69(byteAddrTemp)
+ 110: 20(int) IAdd 109 24
111: 6(int) Load 11(pos)
- 112: 19(int) ShiftRightLogical 111 24
+ 112: 20(int) ShiftRightLogical 111 24
Store 73(byteAddrTemp) 112
- 113: 19(int) Load 73(byteAddrTemp)
+ 113: 20(int) Load 73(byteAddrTemp)
114: 30(ptr) AccessChain 18(sbuf) 26 113
115: 6(int) Load 114
- 116: 19(int) Load 73(byteAddrTemp)
- 117: 19(int) IAdd 116 45
+ 116: 20(int) Load 73(byteAddrTemp)
+ 117: 20(int) IAdd 116 45
118: 30(ptr) AccessChain 18(sbuf) 26 117
119: 6(int) Load 118
- 120: 19(int) Load 73(byteAddrTemp)
- 121: 19(int) IAdd 120 24
+ 120: 20(int) Load 73(byteAddrTemp)
+ 121: 20(int) IAdd 120 24
122: 30(ptr) AccessChain 18(sbuf) 26 121
123: 6(int) Load 122
124: 87(ivec3) CompositeConstruct 115 119 123
@@ -1203,97 +1199,97 @@
127: 30(ptr) AccessChain 18(sbuf) 26 110
Store 127 126
129: 6(int) Load 11(pos)
- 130: 19(int) ShiftRightLogical 129 24
+ 130: 20(int) ShiftRightLogical 129 24
Store 128(byteAddrTemp) 130
- 131: 19(int) Load 128(byteAddrTemp)
+ 131: 20(int) Load 128(byteAddrTemp)
133: 6(int) Load 11(pos)
- 134: 19(int) ShiftRightLogical 133 24
+ 134: 20(int) ShiftRightLogical 133 24
Store 132(byteAddrTemp) 134
- 135: 19(int) Load 132(byteAddrTemp)
+ 135: 20(int) Load 132(byteAddrTemp)
136: 30(ptr) AccessChain 18(sbuf) 26 135
137: 6(int) Load 136
- 138: 19(int) Load 132(byteAddrTemp)
- 139: 19(int) IAdd 138 45
+ 138: 20(int) Load 132(byteAddrTemp)
+ 139: 20(int) IAdd 138 45
140: 30(ptr) AccessChain 18(sbuf) 26 139
141: 6(int) Load 140
- 142: 19(int) Load 132(byteAddrTemp)
- 143: 19(int) IAdd 142 24
+ 142: 20(int) Load 132(byteAddrTemp)
+ 143: 20(int) IAdd 142 24
144: 30(ptr) AccessChain 18(sbuf) 26 143
145: 6(int) Load 144
- 146: 19(int) Load 132(byteAddrTemp)
- 148: 19(int) IAdd 146 147
+ 146: 20(int) Load 132(byteAddrTemp)
+ 148: 20(int) IAdd 146 147
149: 30(ptr) AccessChain 18(sbuf) 26 148
150: 6(int) Load 149
152: 151(ivec4) CompositeConstruct 137 141 145 150
153: 6(int) CompositeExtract 152 0
154: 30(ptr) AccessChain 18(sbuf) 26 131
Store 154 153
- 155: 19(int) Load 128(byteAddrTemp)
- 156: 19(int) IAdd 155 45
+ 155: 20(int) Load 128(byteAddrTemp)
+ 156: 20(int) IAdd 155 45
157: 6(int) Load 11(pos)
- 158: 19(int) ShiftRightLogical 157 24
+ 158: 20(int) ShiftRightLogical 157 24
Store 132(byteAddrTemp) 158
- 159: 19(int) Load 132(byteAddrTemp)
+ 159: 20(int) Load 132(byteAddrTemp)
160: 30(ptr) AccessChain 18(sbuf) 26 159
161: 6(int) Load 160
- 162: 19(int) Load 132(byteAddrTemp)
- 163: 19(int) IAdd 162 45
+ 162: 20(int) Load 132(byteAddrTemp)
+ 163: 20(int) IAdd 162 45
164: 30(ptr) AccessChain 18(sbuf) 26 163
165: 6(int) Load 164
- 166: 19(int) Load 132(byteAddrTemp)
- 167: 19(int) IAdd 166 24
+ 166: 20(int) Load 132(byteAddrTemp)
+ 167: 20(int) IAdd 166 24
168: 30(ptr) AccessChain 18(sbuf) 26 167
169: 6(int) Load 168
- 170: 19(int) Load 132(byteAddrTemp)
- 171: 19(int) IAdd 170 147
+ 170: 20(int) Load 132(byteAddrTemp)
+ 171: 20(int) IAdd 170 147
172: 30(ptr) AccessChain 18(sbuf) 26 171
173: 6(int) Load 172
174: 151(ivec4) CompositeConstruct 161 165 169 173
175: 6(int) CompositeExtract 174 1
176: 30(ptr) AccessChain 18(sbuf) 26 156
Store 176 175
- 177: 19(int) Load 128(byteAddrTemp)
- 178: 19(int) IAdd 177 24
+ 177: 20(int) Load 128(byteAddrTemp)
+ 178: 20(int) IAdd 177 24
179: 6(int) Load 11(pos)
- 180: 19(int) ShiftRightLogical 179 24
+ 180: 20(int) ShiftRightLogical 179 24
Store 132(byteAddrTemp) 180
- 181: 19(int) Load 132(byteAddrTemp)
+ 181: 20(int) Load 132(byteAddrTemp)
182: 30(ptr) AccessChain 18(sbuf) 26 181
183: 6(int) Load 182
- 184: 19(int) Load 132(byteAddrTemp)
- 185: 19(int) IAdd 184 45
+ 184: 20(int) Load 132(byteAddrTemp)
+ 185: 20(int) IAdd 184 45
186: 30(ptr) AccessChain 18(sbuf) 26 185
187: 6(int) Load 186
- 188: 19(int) Load 132(byteAddrTemp)
- 189: 19(int) IAdd 188 24
+ 188: 20(int) Load 132(byteAddrTemp)
+ 189: 20(int) IAdd 188 24
190: 30(ptr) AccessChain 18(sbuf) 26 189
191: 6(int) Load 190
- 192: 19(int) Load 132(byteAddrTemp)
- 193: 19(int) IAdd 192 147
+ 192: 20(int) Load 132(byteAddrTemp)
+ 193: 20(int) IAdd 192 147
194: 30(ptr) AccessChain 18(sbuf) 26 193
195: 6(int) Load 194
196: 151(ivec4) CompositeConstruct 183 187 191 195
197: 6(int) CompositeExtract 196 2
198: 30(ptr) AccessChain 18(sbuf) 26 178
Store 198 197
- 199: 19(int) Load 128(byteAddrTemp)
- 200: 19(int) IAdd 199 147
+ 199: 20(int) Load 128(byteAddrTemp)
+ 200: 20(int) IAdd 199 147
201: 6(int) Load 11(pos)
- 202: 19(int) ShiftRightLogical 201 24
+ 202: 20(int) ShiftRightLogical 201 24
Store 132(byteAddrTemp) 202
- 203: 19(int) Load 132(byteAddrTemp)
+ 203: 20(int) Load 132(byteAddrTemp)
204: 30(ptr) AccessChain 18(sbuf) 26 203
205: 6(int) Load 204
- 206: 19(int) Load 132(byteAddrTemp)
- 207: 19(int) IAdd 206 45
+ 206: 20(int) Load 132(byteAddrTemp)
+ 207: 20(int) IAdd 206 45
208: 30(ptr) AccessChain 18(sbuf) 26 207
209: 6(int) Load 208
- 210: 19(int) Load 132(byteAddrTemp)
- 211: 19(int) IAdd 210 24
+ 210: 20(int) Load 132(byteAddrTemp)
+ 211: 20(int) IAdd 210 24
212: 30(ptr) AccessChain 18(sbuf) 26 211
213: 6(int) Load 212
- 214: 19(int) Load 132(byteAddrTemp)
- 215: 19(int) IAdd 214 147
+ 214: 20(int) Load 132(byteAddrTemp)
+ 215: 20(int) IAdd 214 147
216: 30(ptr) AccessChain 18(sbuf) 26 215
217: 6(int) Load 216
218: 151(ivec4) CompositeConstruct 205 209 213 217
@@ -1301,7 +1297,7 @@
221: 30(ptr) AccessChain 18(sbuf) 26 200
Store 221 220
222: 6(int) Load 11(pos)
- 223: 19(int) ShiftRightLogical 222 24
+ 223: 20(int) ShiftRightLogical 222 24
224: 30(ptr) AccessChain 18(sbuf) 26 223
225: 6(int) Load 224
226: 8(float) ConvertUToF 225
diff --git a/Test/baseResults/spv.310.comp.out b/Test/baseResults/spv.310.comp.out
index fd1309d..f4eaa20 100644
--- a/Test/baseResults/spv.310.comp.out
+++ b/Test/baseResults/spv.310.comp.out
@@ -1,14 +1,14 @@
spv.310.comp
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 71
+// Id's are bound by 72
Capability Shader
Capability DeviceGroup
Extension "SPV_KHR_device_group"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint GLCompute 4 "main" 53 64
+ EntryPoint GLCompute 4 "main" 53 65
ExecutionMode 4 LocalSize 16 32 4
Source ESSL 310
SourceExtension "GL_EXT_device_group"
@@ -30,7 +30,7 @@
MemberName 48(outs) 1 "va"
Name 50 "outnames"
Name 53 "gl_LocalInvocationID"
- Name 64 "gl_DeviceIndex"
+ Name 65 "gl_DeviceIndex"
Decorate 11 ArrayStride 16
MemberDecorate 12(outb) 0 Offset 0
MemberDecorate 12(outb) 1 Offset 4
@@ -48,8 +48,8 @@
Decorate 48(outs) BufferBlock
Decorate 50(outnames) DescriptorSet 0
Decorate 53(gl_LocalInvocationID) BuiltIn LocalInvocationId
- Decorate 64(gl_DeviceIndex) BuiltIn DeviceIndex
- Decorate 70 BuiltIn WorkgroupSize
+ Decorate 65(gl_DeviceIndex) BuiltIn DeviceIndex
+ Decorate 71 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -89,15 +89,15 @@
52: TypePointer Input 51(ivec3)
53(gl_LocalInvocationID): 52(ptr) Variable Input
54: TypePointer Input 6(int)
- 61: TypePointer Uniform 15(int)
- 63: TypePointer Input 15(int)
-64(gl_DeviceIndex): 63(ptr) Variable Input
- 65: 6(int) Constant 1
- 66: 6(int) Constant 3400
- 67: 6(int) Constant 16
- 68: 6(int) Constant 32
- 69: 6(int) Constant 4
- 70: 51(ivec3) ConstantComposite 67 68 69
+ 62: TypePointer Uniform 15(int)
+ 64: TypePointer Input 15(int)
+65(gl_DeviceIndex): 64(ptr) Variable Input
+ 66: 6(int) Constant 1
+ 67: 6(int) Constant 3400
+ 68: 6(int) Constant 16
+ 69: 6(int) Constant 32
+ 70: 6(int) Constant 4
+ 71: 51(ivec3) ConstantComposite 68 69 70
4(main): 2 Function None 3
5: Label
ControlBarrier 7 7 8
@@ -124,10 +124,11 @@
58: 22(fvec4) CompositeConstruct 57 57 57 57
59: 29(ptr) AccessChain 50(outnames) 26 56
Store 59 58
- 60: 15(int) ArrayLength 14(outbname) 3
- 62: 61(ptr) AccessChain 50(outnames) 16
- Store 62 60
- MemoryBarrier 65 8
- MemoryBarrier 7 66
+ 60: 6(int) ArrayLength 14(outbname) 3
+ 61: 15(int) Bitcast 60
+ 63: 62(ptr) AccessChain 50(outnames) 16
+ Store 63 61
+ MemoryBarrier 66 8
+ MemoryBarrier 7 67
Return
FunctionEnd
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index eafb8f6..e0c42c8 100644
--- a/glslang/Include/revision.h
+++ b/glslang/Include/revision.h
@@ -1,3 +1,3 @@
// This header is generated by the make-revision script.
-#define GLSLANG_PATCH_LEVEL 3006
+#define GLSLANG_PATCH_LEVEL 3009