Modify shader ballot extension by adding OpSubgroupReadInvocationKHR
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 71af11b..0a0a053 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -4131,7 +4131,8 @@
spv::Op opCode = spv::OpNop;
std::vector<spv::Id> spvGroupOperands;
- if (op == glslang::EOpBallot || op == glslang::EOpReadFirstInvocation) {
+ if (op == glslang::EOpBallot || op == glslang::EOpReadFirstInvocation ||
+ op == glslang::EOpReadInvocation) {
builder.addExtension(spv::E_SPV_KHR_shader_ballot);
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
} else {
@@ -4171,7 +4172,7 @@
}
case glslang::EOpReadInvocation:
- opCode = spv::OpGroupBroadcast;
+ opCode = spv::OpSubgroupReadInvocationKHR;
if (builder.isVectorType(typeId))
return CreateInvocationsVectorOperation(opCode, typeId, operands);
break;
@@ -4283,13 +4284,15 @@
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 ||
+ op == spv::OpSubgroupReadInvocationKHR ||
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);
+ op == spv::OpGroupFAdd || op == spv::OpGroupIAdd || op == spv::OpGroupBroadcast ||
+ op == spv::OpSubgroupReadInvocationKHR);
#endif
// Handle group invocation operations scalar by scalar.
@@ -4309,13 +4312,16 @@
std::vector<unsigned int> indexes;
indexes.push_back(comp);
spv::Id scalar = builder.createCompositeExtract(operands[0], scalarType, indexes);
-
std::vector<spv::Id> spvGroupOperands;
- spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
- if (op == spv::OpGroupBroadcast) {
+ if (op == spv::OpSubgroupReadInvocationKHR) {
+ spvGroupOperands.push_back(scalar);
+ spvGroupOperands.push_back(operands[1]);
+ } else if (op == spv::OpGroupBroadcast) {
+ spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
spvGroupOperands.push_back(scalar);
spvGroupOperands.push_back(operands[1]);
} else {
+ spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
spvGroupOperands.push_back(spv::GroupOperationReduce);
spvGroupOperands.push_back(scalar);
}
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
index 878dcf5..8c2ab4c 100755
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -1152,6 +1152,7 @@
case 4421: return "OpSubgroupBallotKHR";
case 4422: return "OpSubgroupFirstInvocationKHR";
+ case 4432: return "OpSubgroupReadInvocationKHR";
#ifdef AMD_EXTENSIONS
case 5000: return "OpGroupIAddNonUniformAMD";
@@ -2764,6 +2765,10 @@
InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'");
+ InstructionDesc[OpSubgroupReadInvocationKHR].capabilities.push_back(CapabilityGroups);
+ InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'");
+ InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'");
+
#ifdef AMD_EXTENSIONS
InstructionDesc[OpGroupIAddNonUniformAMD].capabilities.push_back(CapabilityGroups);
InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
index bb3c3f4..088b1af 100755
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -905,6 +905,7 @@
OpImageSparseRead = 320,
OpSubgroupBallotKHR = 4421,
OpSubgroupFirstInvocationKHR = 4422,
+ OpSubgroupReadInvocationKHR = 4432,
OpMax = 0x7fffffff,
};
diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out
index 4f03312..b8d5e3a 100644
--- a/Test/baseResults/spv.shaderBallot.comp.out
+++ b/Test/baseResults/spv.shaderBallot.comp.out
@@ -3,11 +3,10 @@
// Module Version 10000
// Generated by (magic number): 80001
-// Id's are bound by 299
+// Id's are bound by 298
Capability Shader
Capability Int64
- Capability Groups
Capability SubgroupBallotKHR
Extension "SPV_KHR_shader_ballot"
1: ExtInstImport "GLSL.std.450"
@@ -45,7 +44,7 @@
Decorate 52(Buffers) BufferBlock
Decorate 55(data) DescriptorSet 0
Decorate 55(data) Binding 0
- Decorate 298 BuiltIn WorkgroupSize
+ Decorate 297 BuiltIn WorkgroupSize
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -77,23 +76,22 @@
57: 50(int) Constant 0
58: 6(int) Constant 0
59: TypePointer Uniform 48(float)
- 63: 6(int) Constant 3
- 67: 50(int) Constant 1
- 68: TypeVector 48(float) 2
- 69: TypePointer Uniform 49(fvec4)
- 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
+ 66: 50(int) Constant 1
+ 67: TypeVector 48(float) 2
+ 68: TypePointer Uniform 49(fvec4)
+ 82: 50(int) Constant 2
+ 83: TypeVector 48(float) 3
+ 99: 50(int) Constant 3
+ 114: TypePointer Uniform 50(int)
+ 121: TypeVector 50(int) 2
+ 122: TypePointer Uniform 51(ivec4)
+ 136: TypeVector 50(int) 3
+ 166: TypePointer Uniform 6(int)
+ 173: TypePointer Uniform 38(ivec4)
+ 187: TypeVector 6(int) 3
+ 295: 6(int) Constant 8
+ 296: 6(int) Constant 1
+ 297: 187(ivec3) ConstantComposite 295 295 296
4(main): 2 Function None 3
5: Label
8(invocation): 7(ptr) Variable Function
@@ -121,256 +119,256 @@
44: 17(int) Bitcast 43
45: 36(bool) IEqual 35 44
SelectionMerge 47 None
- BranchConditional 45 46 217
+ BranchConditional 45 46 216
46: Label
56: 6(int) Load 8(invocation)
60: 59(ptr) AccessChain 55(data) 57 57 58
61: 48(float) Load 60
62: 6(int) Load 8(invocation)
- 64: 48(float) GroupBroadcast 63 61 62
- 65: 59(ptr) AccessChain 55(data) 56 57 58
- Store 65 64
- 66: 6(int) Load 8(invocation)
- 70: 69(ptr) AccessChain 55(data) 67 57
- 71: 49(fvec4) Load 70
- 72: 68(fvec2) VectorShuffle 71 71 0 1
- 73: 6(int) Load 8(invocation)
- 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)
- 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: 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: 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: 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: 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
+ 63: 48(float) SubgroupReadInvocationKHR 61 62
+ 64: 59(ptr) AccessChain 55(data) 56 57 58
+ Store 64 63
+ 65: 6(int) Load 8(invocation)
+ 69: 68(ptr) AccessChain 55(data) 66 57
+ 70: 49(fvec4) Load 69
+ 71: 67(fvec2) VectorShuffle 70 70 0 1
+ 72: 6(int) Load 8(invocation)
+ 73: 48(float) CompositeExtract 71 0
+ 74: 48(float) SubgroupReadInvocationKHR 73 72
+ 75: 48(float) CompositeExtract 71 1
+ 76: 48(float) SubgroupReadInvocationKHR 75 72
+ 77: 67(fvec2) CompositeConstruct 74 76
+ 78: 68(ptr) AccessChain 55(data) 65 57
+ 79: 49(fvec4) Load 78
+ 80: 49(fvec4) VectorShuffle 79 77 4 5 2 3
+ Store 78 80
+ 81: 6(int) Load 8(invocation)
+ 84: 68(ptr) AccessChain 55(data) 82 57
+ 85: 49(fvec4) Load 84
+ 86: 83(fvec3) VectorShuffle 85 85 0 1 2
+ 87: 6(int) Load 8(invocation)
+ 88: 48(float) CompositeExtract 86 0
+ 89: 48(float) SubgroupReadInvocationKHR 88 87
+ 90: 48(float) CompositeExtract 86 1
+ 91: 48(float) SubgroupReadInvocationKHR 90 87
+ 92: 48(float) CompositeExtract 86 2
+ 93: 48(float) SubgroupReadInvocationKHR 92 87
+ 94: 83(fvec3) CompositeConstruct 89 91 93
+ 95: 68(ptr) AccessChain 55(data) 81 57
+ 96: 49(fvec4) Load 95
+ 97: 49(fvec4) VectorShuffle 96 94 4 5 6 3
+ Store 95 97
+ 98: 6(int) Load 8(invocation)
+ 100: 68(ptr) AccessChain 55(data) 99 57
+ 101: 49(fvec4) Load 100
+ 102: 6(int) Load 8(invocation)
+ 103: 48(float) CompositeExtract 101 0
+ 104: 48(float) SubgroupReadInvocationKHR 103 102
+ 105: 48(float) CompositeExtract 101 1
+ 106: 48(float) SubgroupReadInvocationKHR 105 102
+ 107: 48(float) CompositeExtract 101 2
+ 108: 48(float) SubgroupReadInvocationKHR 107 102
+ 109: 48(float) CompositeExtract 101 3
+ 110: 48(float) SubgroupReadInvocationKHR 109 102
+ 111: 49(fvec4) CompositeConstruct 104 106 108 110
+ 112: 68(ptr) AccessChain 55(data) 98 57
+ Store 112 111
+ 113: 6(int) Load 8(invocation)
+ 115: 114(ptr) AccessChain 55(data) 57 66 58
+ 116: 50(int) Load 115
+ 117: 6(int) Load 8(invocation)
+ 118: 50(int) SubgroupReadInvocationKHR 116 117
+ 119: 114(ptr) AccessChain 55(data) 113 66 58
+ Store 119 118
+ 120: 6(int) Load 8(invocation)
+ 123: 122(ptr) AccessChain 55(data) 66 66
+ 124: 51(ivec4) Load 123
+ 125: 121(ivec2) VectorShuffle 124 124 0 1
+ 126: 6(int) Load 8(invocation)
+ 127: 50(int) CompositeExtract 125 0
+ 128: 50(int) SubgroupReadInvocationKHR 127 126
+ 129: 50(int) CompositeExtract 125 1
+ 130: 50(int) SubgroupReadInvocationKHR 129 126
+ 131: 121(ivec2) CompositeConstruct 128 130
+ 132: 122(ptr) AccessChain 55(data) 120 66
+ 133: 51(ivec4) Load 132
+ 134: 51(ivec4) VectorShuffle 133 131 4 5 2 3
+ Store 132 134
+ 135: 6(int) Load 8(invocation)
+ 137: 122(ptr) AccessChain 55(data) 82 66
+ 138: 51(ivec4) Load 137
+ 139: 136(ivec3) VectorShuffle 138 138 0 1 2
+ 140: 6(int) Load 8(invocation)
+ 141: 50(int) CompositeExtract 139 0
+ 142: 50(int) SubgroupReadInvocationKHR 141 140
+ 143: 50(int) CompositeExtract 139 1
+ 144: 50(int) SubgroupReadInvocationKHR 143 140
+ 145: 50(int) CompositeExtract 139 2
+ 146: 50(int) SubgroupReadInvocationKHR 145 140
+ 147: 136(ivec3) CompositeConstruct 142 144 146
+ 148: 122(ptr) AccessChain 55(data) 135 66
+ 149: 51(ivec4) Load 148
+ 150: 51(ivec4) VectorShuffle 149 147 4 5 6 3
+ Store 148 150
+ 151: 6(int) Load 8(invocation)
+ 152: 122(ptr) AccessChain 55(data) 99 66
+ 153: 51(ivec4) Load 152
+ 154: 6(int) Load 8(invocation)
+ 155: 50(int) CompositeExtract 153 0
+ 156: 50(int) SubgroupReadInvocationKHR 155 154
+ 157: 50(int) CompositeExtract 153 1
+ 158: 50(int) SubgroupReadInvocationKHR 157 154
+ 159: 50(int) CompositeExtract 153 2
+ 160: 50(int) SubgroupReadInvocationKHR 159 154
+ 161: 50(int) CompositeExtract 153 3
+ 162: 50(int) SubgroupReadInvocationKHR 161 154
+ 163: 51(ivec4) CompositeConstruct 156 158 160 162
+ 164: 122(ptr) AccessChain 55(data) 151 66
+ Store 164 163
+ 165: 6(int) Load 8(invocation)
+ 167: 166(ptr) AccessChain 55(data) 57 82 58
+ 168: 6(int) Load 167
+ 169: 6(int) Load 8(invocation)
+ 170: 6(int) SubgroupReadInvocationKHR 168 169
+ 171: 166(ptr) AccessChain 55(data) 165 82 58
+ Store 171 170
+ 172: 6(int) Load 8(invocation)
+ 174: 173(ptr) AccessChain 55(data) 66 82
+ 175: 38(ivec4) Load 174
+ 176: 42(ivec2) VectorShuffle 175 175 0 1
+ 177: 6(int) Load 8(invocation)
+ 178: 6(int) CompositeExtract 176 0
+ 179: 6(int) SubgroupReadInvocationKHR 178 177
+ 180: 6(int) CompositeExtract 176 1
+ 181: 6(int) SubgroupReadInvocationKHR 180 177
+ 182: 42(ivec2) CompositeConstruct 179 181
+ 183: 173(ptr) AccessChain 55(data) 172 82
+ 184: 38(ivec4) Load 183
+ 185: 38(ivec4) VectorShuffle 184 182 4 5 2 3
+ Store 183 185
+ 186: 6(int) Load 8(invocation)
+ 188: 173(ptr) AccessChain 55(data) 82 82
+ 189: 38(ivec4) Load 188
+ 190: 187(ivec3) VectorShuffle 189 189 0 1 2
+ 191: 6(int) Load 8(invocation)
+ 192: 6(int) CompositeExtract 190 0
+ 193: 6(int) SubgroupReadInvocationKHR 192 191
+ 194: 6(int) CompositeExtract 190 1
+ 195: 6(int) SubgroupReadInvocationKHR 194 191
+ 196: 6(int) CompositeExtract 190 2
+ 197: 6(int) SubgroupReadInvocationKHR 196 191
+ 198: 187(ivec3) CompositeConstruct 193 195 197
+ 199: 173(ptr) AccessChain 55(data) 186 82
+ 200: 38(ivec4) Load 199
+ 201: 38(ivec4) VectorShuffle 200 198 4 5 6 3
+ Store 199 201
+ 202: 6(int) Load 8(invocation)
+ 203: 173(ptr) AccessChain 55(data) 99 82
+ 204: 38(ivec4) Load 203
+ 205: 6(int) Load 8(invocation)
+ 206: 6(int) CompositeExtract 204 0
+ 207: 6(int) SubgroupReadInvocationKHR 206 205
+ 208: 6(int) CompositeExtract 204 1
+ 209: 6(int) SubgroupReadInvocationKHR 208 205
+ 210: 6(int) CompositeExtract 204 2
+ 211: 6(int) SubgroupReadInvocationKHR 210 205
+ 212: 6(int) CompositeExtract 204 3
+ 213: 6(int) SubgroupReadInvocationKHR 212 205
+ 214: 38(ivec4) CompositeConstruct 207 209 211 213
+ 215: 173(ptr) AccessChain 55(data) 202 82
+ Store 215 214
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
+ 216: Label
+ 217: 6(int) Load 8(invocation)
+ 218: 59(ptr) AccessChain 55(data) 57 57 58
+ 219: 48(float) Load 218
+ 220: 48(float) SubgroupFirstInvocationKHR 219
+ 221: 59(ptr) AccessChain 55(data) 217 57 58
+ Store 221 220
+ 222: 6(int) Load 8(invocation)
+ 223: 68(ptr) AccessChain 55(data) 66 57
+ 224: 49(fvec4) Load 223
+ 225: 67(fvec2) VectorShuffle 224 224 0 1
+ 226: 67(fvec2) SubgroupFirstInvocationKHR 225
+ 227: 68(ptr) AccessChain 55(data) 222 57
+ 228: 49(fvec4) Load 227
+ 229: 49(fvec4) VectorShuffle 228 226 4 5 2 3
+ Store 227 229
+ 230: 6(int) Load 8(invocation)
+ 231: 68(ptr) AccessChain 55(data) 82 57
+ 232: 49(fvec4) Load 231
+ 233: 83(fvec3) VectorShuffle 232 232 0 1 2
+ 234: 83(fvec3) SubgroupFirstInvocationKHR 233
+ 235: 68(ptr) AccessChain 55(data) 230 57
+ 236: 49(fvec4) Load 235
+ 237: 49(fvec4) VectorShuffle 236 234 4 5 6 3
+ Store 235 237
+ 238: 6(int) Load 8(invocation)
+ 239: 68(ptr) AccessChain 55(data) 99 57
+ 240: 49(fvec4) Load 239
+ 241: 49(fvec4) SubgroupFirstInvocationKHR 240
+ 242: 68(ptr) AccessChain 55(data) 238 57
+ Store 242 241
+ 243: 6(int) Load 8(invocation)
+ 244: 114(ptr) AccessChain 55(data) 57 66 58
+ 245: 50(int) Load 244
+ 246: 50(int) SubgroupFirstInvocationKHR 245
+ 247: 114(ptr) AccessChain 55(data) 243 66 58
+ Store 247 246
+ 248: 6(int) Load 8(invocation)
+ 249: 122(ptr) AccessChain 55(data) 66 66
+ 250: 51(ivec4) Load 249
+ 251: 121(ivec2) VectorShuffle 250 250 0 1
+ 252: 121(ivec2) SubgroupFirstInvocationKHR 251
+ 253: 122(ptr) AccessChain 55(data) 248 66
+ 254: 51(ivec4) Load 253
+ 255: 51(ivec4) VectorShuffle 254 252 4 5 2 3
+ Store 253 255
+ 256: 6(int) Load 8(invocation)
+ 257: 122(ptr) AccessChain 55(data) 82 66
+ 258: 51(ivec4) Load 257
+ 259: 136(ivec3) VectorShuffle 258 258 0 1 2
+ 260: 136(ivec3) SubgroupFirstInvocationKHR 259
+ 261: 122(ptr) AccessChain 55(data) 256 66
+ 262: 51(ivec4) Load 261
+ 263: 51(ivec4) VectorShuffle 262 260 4 5 6 3
+ Store 261 263
+ 264: 6(int) Load 8(invocation)
+ 265: 122(ptr) AccessChain 55(data) 99 66
+ 266: 51(ivec4) Load 265
+ 267: 51(ivec4) SubgroupFirstInvocationKHR 266
+ 268: 122(ptr) AccessChain 55(data) 264 66
+ Store 268 267
+ 269: 6(int) Load 8(invocation)
+ 270: 166(ptr) AccessChain 55(data) 57 82 58
+ 271: 6(int) Load 270
+ 272: 6(int) SubgroupFirstInvocationKHR 271
+ 273: 166(ptr) AccessChain 55(data) 269 82 58
+ Store 273 272
+ 274: 6(int) Load 8(invocation)
+ 275: 173(ptr) AccessChain 55(data) 66 82
+ 276: 38(ivec4) Load 275
+ 277: 42(ivec2) VectorShuffle 276 276 0 1
+ 278: 42(ivec2) SubgroupFirstInvocationKHR 277
+ 279: 173(ptr) AccessChain 55(data) 274 82
+ 280: 38(ivec4) Load 279
+ 281: 38(ivec4) VectorShuffle 280 278 4 5 2 3
+ Store 279 281
+ 282: 6(int) Load 8(invocation)
+ 283: 173(ptr) AccessChain 55(data) 82 82
+ 284: 38(ivec4) Load 283
+ 285: 187(ivec3) VectorShuffle 284 284 0 1 2
+ 286: 187(ivec3) SubgroupFirstInvocationKHR 285
+ 287: 173(ptr) AccessChain 55(data) 282 82
+ 288: 38(ivec4) Load 287
+ 289: 38(ivec4) VectorShuffle 288 286 4 5 6 3
+ Store 287 289
+ 290: 6(int) Load 8(invocation)
+ 291: 173(ptr) AccessChain 55(data) 99 82
+ 292: 38(ivec4) Load 291
+ 293: 38(ivec4) SubgroupFirstInvocationKHR 292
+ 294: 173(ptr) AccessChain 55(data) 290 82
+ Store 294 293
Branch 47
47: Label
Return