SPV: OpGroupBroadcast is unable to handle vector operand.
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index a6c777c..c79b6c2 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -156,9 +156,7 @@
spv::Id makeSmearedConstant(spv::Id constant, int vectorSize);
spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
spv::Id createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
-#ifdef AMD_EXTENSIONS
- spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::Id typeId, spv::Id operand);
-#endif
+ spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::Id typeId, std::vector<spv::Id>& operands);
spv::Id createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
spv::Id createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId);
spv::Id getSymbolId(const glslang::TIntermSymbol* node);
@@ -4029,6 +4027,8 @@
case glslang::EOpReadInvocation:
opCode = spv::OpGroupBroadcast;
+ if (builder.isVectorType(typeId))
+ return CreateInvocationsVectorOperation(opCode, typeId, operands);
break;
case glslang::EOpReadFirstInvocation:
opCode = spv::OpSubgroupFirstInvocationKHR;
@@ -4084,7 +4084,7 @@
}
if (builder.isVectorType(typeId))
- return CreateInvocationsVectorOperation(opCode, typeId, operands[0]);
+ return CreateInvocationsVectorOperation(opCode, typeId, operands);
break;
case glslang::EOpMinInvocationsNonUniform:
@@ -4118,7 +4118,7 @@
}
if (builder.isVectorType(typeId))
- return CreateInvocationsVectorOperation(opCode, typeId, operands[0]);
+ return CreateInvocationsVectorOperation(opCode, typeId, operands);
break;
#endif
@@ -4131,16 +4131,21 @@
return builder.createOp(opCode, typeId, spvGroupOperands);
}
-#ifdef AMD_EXTENSIONS
// Create group invocation operations on a vector
-spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv::Id typeId, spv::Id operand)
+spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv::Id typeId, std::vector<spv::Id>& operands)
{
+#ifdef AMD_EXTENSIONS
assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin ||
op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax ||
- op == spv::OpGroupFAdd || op == spv::OpGroupIAdd ||
+ op == spv::OpGroupFAdd || op == spv::OpGroupIAdd || op == spv::OpGroupBroadcast ||
op == spv::OpGroupFMinNonUniformAMD || op == spv::OpGroupUMinNonUniformAMD || op == spv::OpGroupSMinNonUniformAMD ||
op == spv::OpGroupFMaxNonUniformAMD || op == spv::OpGroupUMaxNonUniformAMD || op == spv::OpGroupSMaxNonUniformAMD ||
op == spv::OpGroupFAddNonUniformAMD || op == spv::OpGroupIAddNonUniformAMD);
+#else
+ assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin ||
+ op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax ||
+ op == spv::OpGroupFAdd || op == spv::OpGroupIAdd || op == spv::OpGroupBroadcast);
+#endif
// Handle group invocation operations scalar by scalar.
// The result type is the same type as the original type.
@@ -4150,28 +4155,32 @@
// - make a vector out the scalar results
// get the types sorted out
- int numComponents = builder.getNumComponents(operand);
- spv::Id scalarType = builder.getScalarTypeId(builder.getTypeId(operand));
+ int numComponents = builder.getNumComponents(operands[0]);
+ spv::Id scalarType = builder.getScalarTypeId(builder.getTypeId(operands[0]));
std::vector<spv::Id> results;
// do each scalar op
for (int comp = 0; comp < numComponents; ++comp) {
std::vector<unsigned int> indexes;
indexes.push_back(comp);
- spv::Id scalar = builder.createCompositeExtract(operand, scalarType, indexes);
+ spv::Id scalar = builder.createCompositeExtract(operands[0], scalarType, indexes);
- std::vector<spv::Id> operands;
- operands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
- operands.push_back(spv::GroupOperationReduce);
- operands.push_back(scalar);
+ std::vector<spv::Id> spvGroupOperands;
+ spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
+ if (op == spv::OpGroupBroadcast) {
+ spvGroupOperands.push_back(scalar);
+ spvGroupOperands.push_back(operands[1]);
+ } else {
+ spvGroupOperands.push_back(spv::GroupOperationReduce);
+ spvGroupOperands.push_back(scalar);
+ }
- results.push_back(builder.createOp(op, scalarType, operands));
+ results.push_back(builder.createOp(op, scalarType, spvGroupOperands));
}
// put the pieces together
return builder.createCompositeConstruct(typeId, results);
}
-#endif
spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
{
diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out
index c60db16..b837b8b 100644
--- a/Test/baseResults/spv.shaderBallot.comp.out
+++ b/Test/baseResults/spv.shaderBallot.comp.out
@@ -7,7 +7,7 @@
// Module Version 10000
// Generated by (magic number): 80001
-// Id's are bound by 245
+// Id's are bound by 299
Capability Shader
Capability Int64
@@ -49,7 +49,7 @@
Decorate 52(Buffers) BufferBlock
Decorate 55(data) DescriptorSet 0
Decorate 55(data) Binding 0
- Decorate 244 BuiltIn WorkgroupSize
+ Decorate 298 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -85,19 +85,19 @@
67: 50(int) Constant 1
68: TypeVector 48(float) 2
69: TypePointer Uniform 49(fvec4)
- 79: 50(int) Constant 2
- 80: TypeVector 48(float) 3
- 90: 50(int) Constant 3
- 97: TypePointer Uniform 50(int)
- 104: TypeVector 50(int) 2
- 105: TypePointer Uniform 51(ivec4)
- 115: TypeVector 50(int) 3
- 131: TypePointer Uniform 6(int)
- 138: TypePointer Uniform 38(ivec4)
- 148: TypeVector 6(int) 3
- 242: 6(int) Constant 8
- 243: 6(int) Constant 1
- 244: 148(ivec3) ConstantComposite 242 242 243
+ 83: 50(int) Constant 2
+ 84: TypeVector 48(float) 3
+ 100: 50(int) Constant 3
+ 115: TypePointer Uniform 50(int)
+ 122: TypeVector 50(int) 2
+ 123: TypePointer Uniform 51(ivec4)
+ 137: TypeVector 50(int) 3
+ 167: TypePointer Uniform 6(int)
+ 174: TypePointer Uniform 38(ivec4)
+ 188: TypeVector 6(int) 3
+ 296: 6(int) Constant 8
+ 297: 6(int) Constant 1
+ 298: 188(ivec3) ConstantComposite 296 296 297
4(main): 2 Function None 3
5: Label
8(invocation): 7(ptr) Variable Function
@@ -125,7 +125,7 @@
44: 17(int) Bitcast 43
45: 36(bool) IEqual 35 44
SelectionMerge 47 None
- BranchConditional 45 46 163
+ BranchConditional 45 46 217
46: Label
56: 6(int) Load 8(invocation)
60: 59(ptr) AccessChain 55(data) 57 57 58
@@ -139,188 +139,242 @@
71: 49(fvec4) Load 70
72: 68(fvec2) VectorShuffle 71 71 0 1
73: 6(int) Load 8(invocation)
- 74: 68(fvec2) GroupBroadcast 63 72 73
- 75: 69(ptr) AccessChain 55(data) 66 57
- 76: 49(fvec4) Load 75
- 77: 49(fvec4) VectorShuffle 76 74 4 5 2 3
- Store 75 77
- 78: 6(int) Load 8(invocation)
- 81: 69(ptr) AccessChain 55(data) 79 57
- 82: 49(fvec4) Load 81
- 83: 80(fvec3) VectorShuffle 82 82 0 1 2
- 84: 6(int) Load 8(invocation)
- 85: 80(fvec3) GroupBroadcast 63 83 84
- 86: 69(ptr) AccessChain 55(data) 78 57
- 87: 49(fvec4) Load 86
- 88: 49(fvec4) VectorShuffle 87 85 4 5 6 3
- Store 86 88
- 89: 6(int) Load 8(invocation)
- 91: 69(ptr) AccessChain 55(data) 90 57
- 92: 49(fvec4) Load 91
- 93: 6(int) Load 8(invocation)
- 94: 49(fvec4) GroupBroadcast 63 92 93
- 95: 69(ptr) AccessChain 55(data) 89 57
- Store 95 94
- 96: 6(int) Load 8(invocation)
- 98: 97(ptr) AccessChain 55(data) 57 67 58
- 99: 50(int) Load 98
- 100: 6(int) Load 8(invocation)
- 101: 50(int) GroupBroadcast 63 99 100
- 102: 97(ptr) AccessChain 55(data) 96 67 58
- Store 102 101
+ 74: 48(float) CompositeExtract 72 0
+ 75: 48(float) GroupBroadcast 63 74 73
+ 76: 48(float) CompositeExtract 72 1
+ 77: 48(float) GroupBroadcast 63 76 73
+ 78: 68(fvec2) CompositeConstruct 75 77
+ 79: 69(ptr) AccessChain 55(data) 66 57
+ 80: 49(fvec4) Load 79
+ 81: 49(fvec4) VectorShuffle 80 78 4 5 2 3
+ Store 79 81
+ 82: 6(int) Load 8(invocation)
+ 85: 69(ptr) AccessChain 55(data) 83 57
+ 86: 49(fvec4) Load 85
+ 87: 84(fvec3) VectorShuffle 86 86 0 1 2
+ 88: 6(int) Load 8(invocation)
+ 89: 48(float) CompositeExtract 87 0
+ 90: 48(float) GroupBroadcast 63 89 88
+ 91: 48(float) CompositeExtract 87 1
+ 92: 48(float) GroupBroadcast 63 91 88
+ 93: 48(float) CompositeExtract 87 2
+ 94: 48(float) GroupBroadcast 63 93 88
+ 95: 84(fvec3) CompositeConstruct 90 92 94
+ 96: 69(ptr) AccessChain 55(data) 82 57
+ 97: 49(fvec4) Load 96
+ 98: 49(fvec4) VectorShuffle 97 95 4 5 6 3
+ Store 96 98
+ 99: 6(int) Load 8(invocation)
+ 101: 69(ptr) AccessChain 55(data) 100 57
+ 102: 49(fvec4) Load 101
103: 6(int) Load 8(invocation)
- 106: 105(ptr) AccessChain 55(data) 67 67
- 107: 51(ivec4) Load 106
- 108: 104(ivec2) VectorShuffle 107 107 0 1
- 109: 6(int) Load 8(invocation)
- 110: 104(ivec2) GroupBroadcast 63 108 109
- 111: 105(ptr) AccessChain 55(data) 103 67
- 112: 51(ivec4) Load 111
- 113: 51(ivec4) VectorShuffle 112 110 4 5 2 3
- Store 111 113
+ 104: 48(float) CompositeExtract 102 0
+ 105: 48(float) GroupBroadcast 63 104 103
+ 106: 48(float) CompositeExtract 102 1
+ 107: 48(float) GroupBroadcast 63 106 103
+ 108: 48(float) CompositeExtract 102 2
+ 109: 48(float) GroupBroadcast 63 108 103
+ 110: 48(float) CompositeExtract 102 3
+ 111: 48(float) GroupBroadcast 63 110 103
+ 112: 49(fvec4) CompositeConstruct 105 107 109 111
+ 113: 69(ptr) AccessChain 55(data) 99 57
+ Store 113 112
114: 6(int) Load 8(invocation)
- 116: 105(ptr) AccessChain 55(data) 79 67
- 117: 51(ivec4) Load 116
- 118: 115(ivec3) VectorShuffle 117 117 0 1 2
- 119: 6(int) Load 8(invocation)
- 120: 115(ivec3) GroupBroadcast 63 118 119
- 121: 105(ptr) AccessChain 55(data) 114 67
- 122: 51(ivec4) Load 121
- 123: 51(ivec4) VectorShuffle 122 120 4 5 6 3
- Store 121 123
- 124: 6(int) Load 8(invocation)
- 125: 105(ptr) AccessChain 55(data) 90 67
- 126: 51(ivec4) Load 125
+ 116: 115(ptr) AccessChain 55(data) 57 67 58
+ 117: 50(int) Load 116
+ 118: 6(int) Load 8(invocation)
+ 119: 50(int) GroupBroadcast 63 117 118
+ 120: 115(ptr) AccessChain 55(data) 114 67 58
+ Store 120 119
+ 121: 6(int) Load 8(invocation)
+ 124: 123(ptr) AccessChain 55(data) 67 67
+ 125: 51(ivec4) Load 124
+ 126: 122(ivec2) VectorShuffle 125 125 0 1
127: 6(int) Load 8(invocation)
- 128: 51(ivec4) GroupBroadcast 63 126 127
- 129: 105(ptr) AccessChain 55(data) 124 67
- Store 129 128
- 130: 6(int) Load 8(invocation)
- 132: 131(ptr) AccessChain 55(data) 57 79 58
- 133: 6(int) Load 132
- 134: 6(int) Load 8(invocation)
- 135: 6(int) GroupBroadcast 63 133 134
- 136: 131(ptr) AccessChain 55(data) 130 79 58
- Store 136 135
- 137: 6(int) Load 8(invocation)
- 139: 138(ptr) AccessChain 55(data) 67 79
- 140: 38(ivec4) Load 139
- 141: 42(ivec2) VectorShuffle 140 140 0 1
- 142: 6(int) Load 8(invocation)
- 143: 42(ivec2) GroupBroadcast 63 141 142
- 144: 138(ptr) AccessChain 55(data) 137 79
- 145: 38(ivec4) Load 144
- 146: 38(ivec4) VectorShuffle 145 143 4 5 2 3
- Store 144 146
- 147: 6(int) Load 8(invocation)
- 149: 138(ptr) AccessChain 55(data) 79 79
- 150: 38(ivec4) Load 149
- 151: 148(ivec3) VectorShuffle 150 150 0 1 2
+ 128: 50(int) CompositeExtract 126 0
+ 129: 50(int) GroupBroadcast 63 128 127
+ 130: 50(int) CompositeExtract 126 1
+ 131: 50(int) GroupBroadcast 63 130 127
+ 132: 122(ivec2) CompositeConstruct 129 131
+ 133: 123(ptr) AccessChain 55(data) 121 67
+ 134: 51(ivec4) Load 133
+ 135: 51(ivec4) VectorShuffle 134 132 4 5 2 3
+ Store 133 135
+ 136: 6(int) Load 8(invocation)
+ 138: 123(ptr) AccessChain 55(data) 83 67
+ 139: 51(ivec4) Load 138
+ 140: 137(ivec3) VectorShuffle 139 139 0 1 2
+ 141: 6(int) Load 8(invocation)
+ 142: 50(int) CompositeExtract 140 0
+ 143: 50(int) GroupBroadcast 63 142 141
+ 144: 50(int) CompositeExtract 140 1
+ 145: 50(int) GroupBroadcast 63 144 141
+ 146: 50(int) CompositeExtract 140 2
+ 147: 50(int) GroupBroadcast 63 146 141
+ 148: 137(ivec3) CompositeConstruct 143 145 147
+ 149: 123(ptr) AccessChain 55(data) 136 67
+ 150: 51(ivec4) Load 149
+ 151: 51(ivec4) VectorShuffle 150 148 4 5 6 3
+ Store 149 151
152: 6(int) Load 8(invocation)
- 153: 148(ivec3) GroupBroadcast 63 151 152
- 154: 138(ptr) AccessChain 55(data) 147 79
- 155: 38(ivec4) Load 154
- 156: 38(ivec4) VectorShuffle 155 153 4 5 6 3
- Store 154 156
- 157: 6(int) Load 8(invocation)
- 158: 138(ptr) AccessChain 55(data) 90 79
- 159: 38(ivec4) Load 158
- 160: 6(int) Load 8(invocation)
- 161: 38(ivec4) GroupBroadcast 63 159 160
- 162: 138(ptr) AccessChain 55(data) 157 79
- Store 162 161
- Branch 47
- 163: Label
- 164: 6(int) Load 8(invocation)
- 165: 59(ptr) AccessChain 55(data) 57 57 58
- 166: 48(float) Load 165
- 167: 48(float) SubgroupFirstInvocationKHR 166
- 168: 59(ptr) AccessChain 55(data) 164 57 58
- Store 168 167
- 169: 6(int) Load 8(invocation)
- 170: 69(ptr) AccessChain 55(data) 67 57
- 171: 49(fvec4) Load 170
- 172: 68(fvec2) VectorShuffle 171 171 0 1
- 173: 68(fvec2) SubgroupFirstInvocationKHR 172
- 174: 69(ptr) AccessChain 55(data) 169 57
- 175: 49(fvec4) Load 174
- 176: 49(fvec4) VectorShuffle 175 173 4 5 2 3
- Store 174 176
- 177: 6(int) Load 8(invocation)
- 178: 69(ptr) AccessChain 55(data) 79 57
- 179: 49(fvec4) Load 178
- 180: 80(fvec3) VectorShuffle 179 179 0 1 2
- 181: 80(fvec3) SubgroupFirstInvocationKHR 180
- 182: 69(ptr) AccessChain 55(data) 177 57
- 183: 49(fvec4) Load 182
- 184: 49(fvec4) VectorShuffle 183 181 4 5 6 3
- Store 182 184
- 185: 6(int) Load 8(invocation)
- 186: 69(ptr) AccessChain 55(data) 90 57
- 187: 49(fvec4) Load 186
- 188: 49(fvec4) SubgroupFirstInvocationKHR 187
- 189: 69(ptr) AccessChain 55(data) 185 57
- Store 189 188
- 190: 6(int) Load 8(invocation)
- 191: 97(ptr) AccessChain 55(data) 57 67 58
- 192: 50(int) Load 191
- 193: 50(int) SubgroupFirstInvocationKHR 192
- 194: 97(ptr) AccessChain 55(data) 190 67 58
- Store 194 193
- 195: 6(int) Load 8(invocation)
- 196: 105(ptr) AccessChain 55(data) 67 67
- 197: 51(ivec4) Load 196
- 198: 104(ivec2) VectorShuffle 197 197 0 1
- 199: 104(ivec2) SubgroupFirstInvocationKHR 198
- 200: 105(ptr) AccessChain 55(data) 195 67
- 201: 51(ivec4) Load 200
- 202: 51(ivec4) VectorShuffle 201 199 4 5 2 3
+ 153: 123(ptr) AccessChain 55(data) 100 67
+ 154: 51(ivec4) Load 153
+ 155: 6(int) Load 8(invocation)
+ 156: 50(int) CompositeExtract 154 0
+ 157: 50(int) GroupBroadcast 63 156 155
+ 158: 50(int) CompositeExtract 154 1
+ 159: 50(int) GroupBroadcast 63 158 155
+ 160: 50(int) CompositeExtract 154 2
+ 161: 50(int) GroupBroadcast 63 160 155
+ 162: 50(int) CompositeExtract 154 3
+ 163: 50(int) GroupBroadcast 63 162 155
+ 164: 51(ivec4) CompositeConstruct 157 159 161 163
+ 165: 123(ptr) AccessChain 55(data) 152 67
+ Store 165 164
+ 166: 6(int) Load 8(invocation)
+ 168: 167(ptr) AccessChain 55(data) 57 83 58
+ 169: 6(int) Load 168
+ 170: 6(int) Load 8(invocation)
+ 171: 6(int) GroupBroadcast 63 169 170
+ 172: 167(ptr) AccessChain 55(data) 166 83 58
+ Store 172 171
+ 173: 6(int) Load 8(invocation)
+ 175: 174(ptr) AccessChain 55(data) 67 83
+ 176: 38(ivec4) Load 175
+ 177: 42(ivec2) VectorShuffle 176 176 0 1
+ 178: 6(int) Load 8(invocation)
+ 179: 6(int) CompositeExtract 177 0
+ 180: 6(int) GroupBroadcast 63 179 178
+ 181: 6(int) CompositeExtract 177 1
+ 182: 6(int) GroupBroadcast 63 181 178
+ 183: 42(ivec2) CompositeConstruct 180 182
+ 184: 174(ptr) AccessChain 55(data) 173 83
+ 185: 38(ivec4) Load 184
+ 186: 38(ivec4) VectorShuffle 185 183 4 5 2 3
+ Store 184 186
+ 187: 6(int) Load 8(invocation)
+ 189: 174(ptr) AccessChain 55(data) 83 83
+ 190: 38(ivec4) Load 189
+ 191: 188(ivec3) VectorShuffle 190 190 0 1 2
+ 192: 6(int) Load 8(invocation)
+ 193: 6(int) CompositeExtract 191 0
+ 194: 6(int) GroupBroadcast 63 193 192
+ 195: 6(int) CompositeExtract 191 1
+ 196: 6(int) GroupBroadcast 63 195 192
+ 197: 6(int) CompositeExtract 191 2
+ 198: 6(int) GroupBroadcast 63 197 192
+ 199: 188(ivec3) CompositeConstruct 194 196 198
+ 200: 174(ptr) AccessChain 55(data) 187 83
+ 201: 38(ivec4) Load 200
+ 202: 38(ivec4) VectorShuffle 201 199 4 5 6 3
Store 200 202
203: 6(int) Load 8(invocation)
- 204: 105(ptr) AccessChain 55(data) 79 67
- 205: 51(ivec4) Load 204
- 206: 115(ivec3) VectorShuffle 205 205 0 1 2
- 207: 115(ivec3) SubgroupFirstInvocationKHR 206
- 208: 105(ptr) AccessChain 55(data) 203 67
- 209: 51(ivec4) Load 208
- 210: 51(ivec4) VectorShuffle 209 207 4 5 6 3
- Store 208 210
- 211: 6(int) Load 8(invocation)
- 212: 105(ptr) AccessChain 55(data) 90 67
- 213: 51(ivec4) Load 212
- 214: 51(ivec4) SubgroupFirstInvocationKHR 213
- 215: 105(ptr) AccessChain 55(data) 211 67
- Store 215 214
- 216: 6(int) Load 8(invocation)
- 217: 131(ptr) AccessChain 55(data) 57 79 58
- 218: 6(int) Load 217
- 219: 6(int) SubgroupFirstInvocationKHR 218
- 220: 131(ptr) AccessChain 55(data) 216 79 58
- Store 220 219
- 221: 6(int) Load 8(invocation)
- 222: 138(ptr) AccessChain 55(data) 67 79
- 223: 38(ivec4) Load 222
- 224: 42(ivec2) VectorShuffle 223 223 0 1
- 225: 42(ivec2) SubgroupFirstInvocationKHR 224
- 226: 138(ptr) AccessChain 55(data) 221 79
- 227: 38(ivec4) Load 226
- 228: 38(ivec4) VectorShuffle 227 225 4 5 2 3
- Store 226 228
- 229: 6(int) Load 8(invocation)
- 230: 138(ptr) AccessChain 55(data) 79 79
- 231: 38(ivec4) Load 230
- 232: 148(ivec3) VectorShuffle 231 231 0 1 2
- 233: 148(ivec3) SubgroupFirstInvocationKHR 232
- 234: 138(ptr) AccessChain 55(data) 229 79
- 235: 38(ivec4) Load 234
- 236: 38(ivec4) VectorShuffle 235 233 4 5 6 3
- Store 234 236
- 237: 6(int) Load 8(invocation)
- 238: 138(ptr) AccessChain 55(data) 90 79
- 239: 38(ivec4) Load 238
- 240: 38(ivec4) SubgroupFirstInvocationKHR 239
- 241: 138(ptr) AccessChain 55(data) 237 79
- Store 241 240
+ 204: 174(ptr) AccessChain 55(data) 100 83
+ 205: 38(ivec4) Load 204
+ 206: 6(int) Load 8(invocation)
+ 207: 6(int) CompositeExtract 205 0
+ 208: 6(int) GroupBroadcast 63 207 206
+ 209: 6(int) CompositeExtract 205 1
+ 210: 6(int) GroupBroadcast 63 209 206
+ 211: 6(int) CompositeExtract 205 2
+ 212: 6(int) GroupBroadcast 63 211 206
+ 213: 6(int) CompositeExtract 205 3
+ 214: 6(int) GroupBroadcast 63 213 206
+ 215: 38(ivec4) CompositeConstruct 208 210 212 214
+ 216: 174(ptr) AccessChain 55(data) 203 83
+ Store 216 215
+ Branch 47
+ 217: Label
+ 218: 6(int) Load 8(invocation)
+ 219: 59(ptr) AccessChain 55(data) 57 57 58
+ 220: 48(float) Load 219
+ 221: 48(float) SubgroupFirstInvocationKHR 220
+ 222: 59(ptr) AccessChain 55(data) 218 57 58
+ Store 222 221
+ 223: 6(int) Load 8(invocation)
+ 224: 69(ptr) AccessChain 55(data) 67 57
+ 225: 49(fvec4) Load 224
+ 226: 68(fvec2) VectorShuffle 225 225 0 1
+ 227: 68(fvec2) SubgroupFirstInvocationKHR 226
+ 228: 69(ptr) AccessChain 55(data) 223 57
+ 229: 49(fvec4) Load 228
+ 230: 49(fvec4) VectorShuffle 229 227 4 5 2 3
+ Store 228 230
+ 231: 6(int) Load 8(invocation)
+ 232: 69(ptr) AccessChain 55(data) 83 57
+ 233: 49(fvec4) Load 232
+ 234: 84(fvec3) VectorShuffle 233 233 0 1 2
+ 235: 84(fvec3) SubgroupFirstInvocationKHR 234
+ 236: 69(ptr) AccessChain 55(data) 231 57
+ 237: 49(fvec4) Load 236
+ 238: 49(fvec4) VectorShuffle 237 235 4 5 6 3
+ Store 236 238
+ 239: 6(int) Load 8(invocation)
+ 240: 69(ptr) AccessChain 55(data) 100 57
+ 241: 49(fvec4) Load 240
+ 242: 49(fvec4) SubgroupFirstInvocationKHR 241
+ 243: 69(ptr) AccessChain 55(data) 239 57
+ Store 243 242
+ 244: 6(int) Load 8(invocation)
+ 245: 115(ptr) AccessChain 55(data) 57 67 58
+ 246: 50(int) Load 245
+ 247: 50(int) SubgroupFirstInvocationKHR 246
+ 248: 115(ptr) AccessChain 55(data) 244 67 58
+ Store 248 247
+ 249: 6(int) Load 8(invocation)
+ 250: 123(ptr) AccessChain 55(data) 67 67
+ 251: 51(ivec4) Load 250
+ 252: 122(ivec2) VectorShuffle 251 251 0 1
+ 253: 122(ivec2) SubgroupFirstInvocationKHR 252
+ 254: 123(ptr) AccessChain 55(data) 249 67
+ 255: 51(ivec4) Load 254
+ 256: 51(ivec4) VectorShuffle 255 253 4 5 2 3
+ Store 254 256
+ 257: 6(int) Load 8(invocation)
+ 258: 123(ptr) AccessChain 55(data) 83 67
+ 259: 51(ivec4) Load 258
+ 260: 137(ivec3) VectorShuffle 259 259 0 1 2
+ 261: 137(ivec3) SubgroupFirstInvocationKHR 260
+ 262: 123(ptr) AccessChain 55(data) 257 67
+ 263: 51(ivec4) Load 262
+ 264: 51(ivec4) VectorShuffle 263 261 4 5 6 3
+ Store 262 264
+ 265: 6(int) Load 8(invocation)
+ 266: 123(ptr) AccessChain 55(data) 100 67
+ 267: 51(ivec4) Load 266
+ 268: 51(ivec4) SubgroupFirstInvocationKHR 267
+ 269: 123(ptr) AccessChain 55(data) 265 67
+ Store 269 268
+ 270: 6(int) Load 8(invocation)
+ 271: 167(ptr) AccessChain 55(data) 57 83 58
+ 272: 6(int) Load 271
+ 273: 6(int) SubgroupFirstInvocationKHR 272
+ 274: 167(ptr) AccessChain 55(data) 270 83 58
+ Store 274 273
+ 275: 6(int) Load 8(invocation)
+ 276: 174(ptr) AccessChain 55(data) 67 83
+ 277: 38(ivec4) Load 276
+ 278: 42(ivec2) VectorShuffle 277 277 0 1
+ 279: 42(ivec2) SubgroupFirstInvocationKHR 278
+ 280: 174(ptr) AccessChain 55(data) 275 83
+ 281: 38(ivec4) Load 280
+ 282: 38(ivec4) VectorShuffle 281 279 4 5 2 3
+ Store 280 282
+ 283: 6(int) Load 8(invocation)
+ 284: 174(ptr) AccessChain 55(data) 83 83
+ 285: 38(ivec4) Load 284
+ 286: 188(ivec3) VectorShuffle 285 285 0 1 2
+ 287: 188(ivec3) SubgroupFirstInvocationKHR 286
+ 288: 174(ptr) AccessChain 55(data) 283 83
+ 289: 38(ivec4) Load 288
+ 290: 38(ivec4) VectorShuffle 289 287 4 5 6 3
+ Store 288 290
+ 291: 6(int) Load 8(invocation)
+ 292: 174(ptr) AccessChain 55(data) 100 83
+ 293: 38(ivec4) Load 292
+ 294: 38(ivec4) SubgroupFirstInvocationKHR 293
+ 295: 174(ptr) AccessChain 55(data) 291 83
+ Store 295 294
Branch 47
47: Label
Return