Merge pull request #640 from chaoc/modify-shader-ballot

Modify shader ballot extension by adding OpSubgroupReadInvocationKHR
This commit is contained in:
John Kessenich 2016-12-21 17:40:29 -07:00 committed by GitHub
commit 807a0d9e2f
4 changed files with 280 additions and 270 deletions

View File

@ -4131,7 +4131,8 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
spv::Op opCode = spv::OpNop; spv::Op opCode = spv::OpNop;
std::vector<spv::Id> spvGroupOperands; 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.addExtension(spv::E_SPV_KHR_shader_ballot);
builder.addCapability(spv::CapabilitySubgroupBallotKHR); builder.addCapability(spv::CapabilitySubgroupBallotKHR);
} else { } else {
@ -4171,7 +4172,7 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
} }
case glslang::EOpReadInvocation: case glslang::EOpReadInvocation:
opCode = spv::OpGroupBroadcast; opCode = spv::OpSubgroupReadInvocationKHR;
if (builder.isVectorType(typeId)) if (builder.isVectorType(typeId))
return CreateInvocationsVectorOperation(opCode, typeId, operands); return CreateInvocationsVectorOperation(opCode, typeId, operands);
break; break;
@ -4283,13 +4284,15 @@ spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv
assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin || assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin ||
op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax || 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 ||
op == spv::OpGroupFMinNonUniformAMD || op == spv::OpGroupUMinNonUniformAMD || op == spv::OpGroupSMinNonUniformAMD || op == spv::OpGroupFMinNonUniformAMD || op == spv::OpGroupUMinNonUniformAMD || op == spv::OpGroupSMinNonUniformAMD ||
op == spv::OpGroupFMaxNonUniformAMD || op == spv::OpGroupUMaxNonUniformAMD || op == spv::OpGroupSMaxNonUniformAMD || op == spv::OpGroupFMaxNonUniformAMD || op == spv::OpGroupUMaxNonUniformAMD || op == spv::OpGroupSMaxNonUniformAMD ||
op == spv::OpGroupFAddNonUniformAMD || op == spv::OpGroupIAddNonUniformAMD); op == spv::OpGroupFAddNonUniformAMD || op == spv::OpGroupIAddNonUniformAMD);
#else #else
assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin || assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin ||
op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax || 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 #endif
// Handle group invocation operations scalar by scalar. // Handle group invocation operations scalar by scalar.
@ -4309,13 +4312,16 @@ spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv
std::vector<unsigned int> indexes; std::vector<unsigned int> indexes;
indexes.push_back(comp); indexes.push_back(comp);
spv::Id scalar = builder.createCompositeExtract(operands[0], scalarType, indexes); spv::Id scalar = builder.createCompositeExtract(operands[0], scalarType, indexes);
std::vector<spv::Id> spvGroupOperands; std::vector<spv::Id> spvGroupOperands;
spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup)); if (op == spv::OpSubgroupReadInvocationKHR) {
if (op == spv::OpGroupBroadcast) { 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(scalar);
spvGroupOperands.push_back(operands[1]); spvGroupOperands.push_back(operands[1]);
} else { } else {
spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
spvGroupOperands.push_back(spv::GroupOperationReduce); spvGroupOperands.push_back(spv::GroupOperationReduce);
spvGroupOperands.push_back(scalar); spvGroupOperands.push_back(scalar);
} }

View File

@ -1158,6 +1158,7 @@ const char* OpcodeString(int op)
case 4421: return "OpSubgroupBallotKHR"; case 4421: return "OpSubgroupBallotKHR";
case 4422: return "OpSubgroupFirstInvocationKHR"; case 4422: return "OpSubgroupFirstInvocationKHR";
case 4432: return "OpSubgroupReadInvocationKHR";
#ifdef AMD_EXTENSIONS #ifdef AMD_EXTENSIONS
case 5000: return "OpGroupIAddNonUniformAMD"; case 5000: return "OpGroupIAddNonUniformAMD";
@ -2770,6 +2771,10 @@ void Parameterize()
InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'"); 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 #ifdef AMD_EXTENSIONS
InstructionDesc[OpGroupIAddNonUniformAMD].capabilities.push_back(CapabilityGroups); InstructionDesc[OpGroupIAddNonUniformAMD].capabilities.push_back(CapabilityGroups);
InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'"); InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'");

View File

@ -905,6 +905,7 @@ enum Op {
OpImageSparseRead = 320, OpImageSparseRead = 320,
OpSubgroupBallotKHR = 4421, OpSubgroupBallotKHR = 4421,
OpSubgroupFirstInvocationKHR = 4422, OpSubgroupFirstInvocationKHR = 4422,
OpSubgroupReadInvocationKHR = 4432,
OpMax = 0x7fffffff, OpMax = 0x7fffffff,
}; };

View File

@ -3,11 +3,10 @@ Warning, version 450 is not yet complete; most version-specific features are pre
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 299 // Id's are bound by 298
Capability Shader Capability Shader
Capability Int64 Capability Int64
Capability Groups
Capability SubgroupBallotKHR Capability SubgroupBallotKHR
Extension "SPV_KHR_shader_ballot" Extension "SPV_KHR_shader_ballot"
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
@ -45,7 +44,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Decorate 52(Buffers) BufferBlock Decorate 52(Buffers) BufferBlock
Decorate 55(data) DescriptorSet 0 Decorate 55(data) DescriptorSet 0
Decorate 55(data) Binding 0 Decorate 55(data) Binding 0
Decorate 298 BuiltIn WorkgroupSize Decorate 297 BuiltIn WorkgroupSize
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeInt 32 0 6: TypeInt 32 0
@ -77,23 +76,22 @@ Warning, version 450 is not yet complete; most version-specific features are pre
57: 50(int) Constant 0 57: 50(int) Constant 0
58: 6(int) Constant 0 58: 6(int) Constant 0
59: TypePointer Uniform 48(float) 59: TypePointer Uniform 48(float)
63: 6(int) Constant 3 66: 50(int) Constant 1
67: 50(int) Constant 1 67: TypeVector 48(float) 2
68: TypeVector 48(float) 2 68: TypePointer Uniform 49(fvec4)
69: TypePointer Uniform 49(fvec4) 82: 50(int) Constant 2
83: 50(int) Constant 2 83: TypeVector 48(float) 3
84: TypeVector 48(float) 3 99: 50(int) Constant 3
100: 50(int) Constant 3 114: TypePointer Uniform 50(int)
115: TypePointer Uniform 50(int) 121: TypeVector 50(int) 2
122: TypeVector 50(int) 2 122: TypePointer Uniform 51(ivec4)
123: TypePointer Uniform 51(ivec4) 136: TypeVector 50(int) 3
137: TypeVector 50(int) 3 166: TypePointer Uniform 6(int)
167: TypePointer Uniform 6(int) 173: TypePointer Uniform 38(ivec4)
174: TypePointer Uniform 38(ivec4) 187: TypeVector 6(int) 3
188: TypeVector 6(int) 3 295: 6(int) Constant 8
296: 6(int) Constant 8 296: 6(int) Constant 1
297: 6(int) Constant 1 297: 187(ivec3) ConstantComposite 295 295 296
298: 188(ivec3) ConstantComposite 296 296 297
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
8(invocation): 7(ptr) Variable Function 8(invocation): 7(ptr) Variable Function
@ -121,256 +119,256 @@ Warning, version 450 is not yet complete; most version-specific features are pre
44: 17(int) Bitcast 43 44: 17(int) Bitcast 43
45: 36(bool) IEqual 35 44 45: 36(bool) IEqual 35 44
SelectionMerge 47 None SelectionMerge 47 None
BranchConditional 45 46 217 BranchConditional 45 46 216
46: Label 46: Label
56: 6(int) Load 8(invocation) 56: 6(int) Load 8(invocation)
60: 59(ptr) AccessChain 55(data) 57 57 58 60: 59(ptr) AccessChain 55(data) 57 57 58
61: 48(float) Load 60 61: 48(float) Load 60
62: 6(int) Load 8(invocation) 62: 6(int) Load 8(invocation)
64: 48(float) GroupBroadcast 63 61 62 63: 48(float) SubgroupReadInvocationKHR 61 62
65: 59(ptr) AccessChain 55(data) 56 57 58 64: 59(ptr) AccessChain 55(data) 56 57 58
Store 65 64 Store 64 63
66: 6(int) Load 8(invocation) 65: 6(int) Load 8(invocation)
70: 69(ptr) AccessChain 55(data) 67 57 69: 68(ptr) AccessChain 55(data) 66 57
71: 49(fvec4) Load 70 70: 49(fvec4) Load 69
72: 68(fvec2) VectorShuffle 71 71 0 1 71: 67(fvec2) VectorShuffle 70 70 0 1
73: 6(int) Load 8(invocation) 72: 6(int) Load 8(invocation)
74: 48(float) CompositeExtract 72 0 73: 48(float) CompositeExtract 71 0
75: 48(float) GroupBroadcast 63 74 73 74: 48(float) SubgroupReadInvocationKHR 73 72
76: 48(float) CompositeExtract 72 1 75: 48(float) CompositeExtract 71 1
77: 48(float) GroupBroadcast 63 76 73 76: 48(float) SubgroupReadInvocationKHR 75 72
78: 68(fvec2) CompositeConstruct 75 77 77: 67(fvec2) CompositeConstruct 74 76
79: 69(ptr) AccessChain 55(data) 66 57 78: 68(ptr) AccessChain 55(data) 65 57
80: 49(fvec4) Load 79 79: 49(fvec4) Load 78
81: 49(fvec4) VectorShuffle 80 78 4 5 2 3 80: 49(fvec4) VectorShuffle 79 77 4 5 2 3
Store 79 81 Store 78 80
82: 6(int) Load 8(invocation) 81: 6(int) Load 8(invocation)
85: 69(ptr) AccessChain 55(data) 83 57 84: 68(ptr) AccessChain 55(data) 82 57
86: 49(fvec4) Load 85 85: 49(fvec4) Load 84
87: 84(fvec3) VectorShuffle 86 86 0 1 2 86: 83(fvec3) VectorShuffle 85 85 0 1 2
88: 6(int) Load 8(invocation) 87: 6(int) Load 8(invocation)
89: 48(float) CompositeExtract 87 0 88: 48(float) CompositeExtract 86 0
90: 48(float) GroupBroadcast 63 89 88 89: 48(float) SubgroupReadInvocationKHR 88 87
91: 48(float) CompositeExtract 87 1 90: 48(float) CompositeExtract 86 1
92: 48(float) GroupBroadcast 63 91 88 91: 48(float) SubgroupReadInvocationKHR 90 87
93: 48(float) CompositeExtract 87 2 92: 48(float) CompositeExtract 86 2
94: 48(float) GroupBroadcast 63 93 88 93: 48(float) SubgroupReadInvocationKHR 92 87
95: 84(fvec3) CompositeConstruct 90 92 94 94: 83(fvec3) CompositeConstruct 89 91 93
96: 69(ptr) AccessChain 55(data) 82 57 95: 68(ptr) AccessChain 55(data) 81 57
97: 49(fvec4) Load 96 96: 49(fvec4) Load 95
98: 49(fvec4) VectorShuffle 97 95 4 5 6 3 97: 49(fvec4) VectorShuffle 96 94 4 5 6 3
Store 96 98 Store 95 97
99: 6(int) Load 8(invocation) 98: 6(int) Load 8(invocation)
101: 69(ptr) AccessChain 55(data) 100 57 100: 68(ptr) AccessChain 55(data) 99 57
102: 49(fvec4) Load 101 101: 49(fvec4) Load 100
103: 6(int) Load 8(invocation) 102: 6(int) Load 8(invocation)
104: 48(float) CompositeExtract 102 0 103: 48(float) CompositeExtract 101 0
105: 48(float) GroupBroadcast 63 104 103 104: 48(float) SubgroupReadInvocationKHR 103 102
106: 48(float) CompositeExtract 102 1 105: 48(float) CompositeExtract 101 1
107: 48(float) GroupBroadcast 63 106 103 106: 48(float) SubgroupReadInvocationKHR 105 102
108: 48(float) CompositeExtract 102 2 107: 48(float) CompositeExtract 101 2
109: 48(float) GroupBroadcast 63 108 103 108: 48(float) SubgroupReadInvocationKHR 107 102
110: 48(float) CompositeExtract 102 3 109: 48(float) CompositeExtract 101 3
111: 48(float) GroupBroadcast 63 110 103 110: 48(float) SubgroupReadInvocationKHR 109 102
112: 49(fvec4) CompositeConstruct 105 107 109 111 111: 49(fvec4) CompositeConstruct 104 106 108 110
113: 69(ptr) AccessChain 55(data) 99 57 112: 68(ptr) AccessChain 55(data) 98 57
Store 113 112 Store 112 111
114: 6(int) Load 8(invocation) 113: 6(int) Load 8(invocation)
116: 115(ptr) AccessChain 55(data) 57 67 58 115: 114(ptr) AccessChain 55(data) 57 66 58
117: 50(int) Load 116 116: 50(int) Load 115
118: 6(int) Load 8(invocation) 117: 6(int) Load 8(invocation)
119: 50(int) GroupBroadcast 63 117 118 118: 50(int) SubgroupReadInvocationKHR 116 117
120: 115(ptr) AccessChain 55(data) 114 67 58 119: 114(ptr) AccessChain 55(data) 113 66 58
Store 120 119 Store 119 118
121: 6(int) Load 8(invocation) 120: 6(int) Load 8(invocation)
124: 123(ptr) AccessChain 55(data) 67 67 123: 122(ptr) AccessChain 55(data) 66 66
125: 51(ivec4) Load 124 124: 51(ivec4) Load 123
126: 122(ivec2) VectorShuffle 125 125 0 1 125: 121(ivec2) VectorShuffle 124 124 0 1
127: 6(int) Load 8(invocation) 126: 6(int) Load 8(invocation)
128: 50(int) CompositeExtract 126 0 127: 50(int) CompositeExtract 125 0
129: 50(int) GroupBroadcast 63 128 127 128: 50(int) SubgroupReadInvocationKHR 127 126
130: 50(int) CompositeExtract 126 1 129: 50(int) CompositeExtract 125 1
131: 50(int) GroupBroadcast 63 130 127 130: 50(int) SubgroupReadInvocationKHR 129 126
132: 122(ivec2) CompositeConstruct 129 131 131: 121(ivec2) CompositeConstruct 128 130
133: 123(ptr) AccessChain 55(data) 121 67 132: 122(ptr) AccessChain 55(data) 120 66
134: 51(ivec4) Load 133 133: 51(ivec4) Load 132
135: 51(ivec4) VectorShuffle 134 132 4 5 2 3 134: 51(ivec4) VectorShuffle 133 131 4 5 2 3
Store 133 135 Store 132 134
136: 6(int) Load 8(invocation) 135: 6(int) Load 8(invocation)
138: 123(ptr) AccessChain 55(data) 83 67 137: 122(ptr) AccessChain 55(data) 82 66
139: 51(ivec4) Load 138 138: 51(ivec4) Load 137
140: 137(ivec3) VectorShuffle 139 139 0 1 2 139: 136(ivec3) VectorShuffle 138 138 0 1 2
141: 6(int) Load 8(invocation) 140: 6(int) Load 8(invocation)
142: 50(int) CompositeExtract 140 0 141: 50(int) CompositeExtract 139 0
143: 50(int) GroupBroadcast 63 142 141 142: 50(int) SubgroupReadInvocationKHR 141 140
144: 50(int) CompositeExtract 140 1 143: 50(int) CompositeExtract 139 1
145: 50(int) GroupBroadcast 63 144 141 144: 50(int) SubgroupReadInvocationKHR 143 140
146: 50(int) CompositeExtract 140 2 145: 50(int) CompositeExtract 139 2
147: 50(int) GroupBroadcast 63 146 141 146: 50(int) SubgroupReadInvocationKHR 145 140
148: 137(ivec3) CompositeConstruct 143 145 147 147: 136(ivec3) CompositeConstruct 142 144 146
149: 123(ptr) AccessChain 55(data) 136 67 148: 122(ptr) AccessChain 55(data) 135 66
150: 51(ivec4) Load 149 149: 51(ivec4) Load 148
151: 51(ivec4) VectorShuffle 150 148 4 5 6 3 150: 51(ivec4) VectorShuffle 149 147 4 5 6 3
Store 149 151 Store 148 150
152: 6(int) Load 8(invocation) 151: 6(int) Load 8(invocation)
153: 123(ptr) AccessChain 55(data) 100 67 152: 122(ptr) AccessChain 55(data) 99 66
154: 51(ivec4) Load 153 153: 51(ivec4) Load 152
155: 6(int) Load 8(invocation) 154: 6(int) Load 8(invocation)
156: 50(int) CompositeExtract 154 0 155: 50(int) CompositeExtract 153 0
157: 50(int) GroupBroadcast 63 156 155 156: 50(int) SubgroupReadInvocationKHR 155 154
158: 50(int) CompositeExtract 154 1 157: 50(int) CompositeExtract 153 1
159: 50(int) GroupBroadcast 63 158 155 158: 50(int) SubgroupReadInvocationKHR 157 154
160: 50(int) CompositeExtract 154 2 159: 50(int) CompositeExtract 153 2
161: 50(int) GroupBroadcast 63 160 155 160: 50(int) SubgroupReadInvocationKHR 159 154
162: 50(int) CompositeExtract 154 3 161: 50(int) CompositeExtract 153 3
163: 50(int) GroupBroadcast 63 162 155 162: 50(int) SubgroupReadInvocationKHR 161 154
164: 51(ivec4) CompositeConstruct 157 159 161 163 163: 51(ivec4) CompositeConstruct 156 158 160 162
165: 123(ptr) AccessChain 55(data) 152 67 164: 122(ptr) AccessChain 55(data) 151 66
Store 165 164 Store 164 163
166: 6(int) Load 8(invocation) 165: 6(int) Load 8(invocation)
168: 167(ptr) AccessChain 55(data) 57 83 58 167: 166(ptr) AccessChain 55(data) 57 82 58
169: 6(int) Load 168 168: 6(int) Load 167
170: 6(int) Load 8(invocation) 169: 6(int) Load 8(invocation)
171: 6(int) GroupBroadcast 63 169 170 170: 6(int) SubgroupReadInvocationKHR 168 169
172: 167(ptr) AccessChain 55(data) 166 83 58 171: 166(ptr) AccessChain 55(data) 165 82 58
Store 172 171 Store 171 170
173: 6(int) Load 8(invocation) 172: 6(int) Load 8(invocation)
175: 174(ptr) AccessChain 55(data) 67 83 174: 173(ptr) AccessChain 55(data) 66 82
176: 38(ivec4) Load 175 175: 38(ivec4) Load 174
177: 42(ivec2) VectorShuffle 176 176 0 1 176: 42(ivec2) VectorShuffle 175 175 0 1
178: 6(int) Load 8(invocation) 177: 6(int) Load 8(invocation)
179: 6(int) CompositeExtract 177 0 178: 6(int) CompositeExtract 176 0
180: 6(int) GroupBroadcast 63 179 178 179: 6(int) SubgroupReadInvocationKHR 178 177
181: 6(int) CompositeExtract 177 1 180: 6(int) CompositeExtract 176 1
182: 6(int) GroupBroadcast 63 181 178 181: 6(int) SubgroupReadInvocationKHR 180 177
183: 42(ivec2) CompositeConstruct 180 182 182: 42(ivec2) CompositeConstruct 179 181
184: 174(ptr) AccessChain 55(data) 173 83 183: 173(ptr) AccessChain 55(data) 172 82
185: 38(ivec4) Load 184 184: 38(ivec4) Load 183
186: 38(ivec4) VectorShuffle 185 183 4 5 2 3 185: 38(ivec4) VectorShuffle 184 182 4 5 2 3
Store 184 186 Store 183 185
187: 6(int) Load 8(invocation) 186: 6(int) Load 8(invocation)
189: 174(ptr) AccessChain 55(data) 83 83 188: 173(ptr) AccessChain 55(data) 82 82
190: 38(ivec4) Load 189 189: 38(ivec4) Load 188
191: 188(ivec3) VectorShuffle 190 190 0 1 2 190: 187(ivec3) VectorShuffle 189 189 0 1 2
192: 6(int) Load 8(invocation) 191: 6(int) Load 8(invocation)
193: 6(int) CompositeExtract 191 0 192: 6(int) CompositeExtract 190 0
194: 6(int) GroupBroadcast 63 193 192 193: 6(int) SubgroupReadInvocationKHR 192 191
195: 6(int) CompositeExtract 191 1 194: 6(int) CompositeExtract 190 1
196: 6(int) GroupBroadcast 63 195 192 195: 6(int) SubgroupReadInvocationKHR 194 191
197: 6(int) CompositeExtract 191 2 196: 6(int) CompositeExtract 190 2
198: 6(int) GroupBroadcast 63 197 192 197: 6(int) SubgroupReadInvocationKHR 196 191
199: 188(ivec3) CompositeConstruct 194 196 198 198: 187(ivec3) CompositeConstruct 193 195 197
200: 174(ptr) AccessChain 55(data) 187 83 199: 173(ptr) AccessChain 55(data) 186 82
201: 38(ivec4) Load 200 200: 38(ivec4) Load 199
202: 38(ivec4) VectorShuffle 201 199 4 5 6 3 201: 38(ivec4) VectorShuffle 200 198 4 5 6 3
Store 200 202 Store 199 201
203: 6(int) Load 8(invocation) 202: 6(int) Load 8(invocation)
204: 174(ptr) AccessChain 55(data) 100 83 203: 173(ptr) AccessChain 55(data) 99 82
205: 38(ivec4) Load 204 204: 38(ivec4) Load 203
206: 6(int) Load 8(invocation) 205: 6(int) Load 8(invocation)
207: 6(int) CompositeExtract 205 0 206: 6(int) CompositeExtract 204 0
208: 6(int) GroupBroadcast 63 207 206 207: 6(int) SubgroupReadInvocationKHR 206 205
209: 6(int) CompositeExtract 205 1 208: 6(int) CompositeExtract 204 1
210: 6(int) GroupBroadcast 63 209 206 209: 6(int) SubgroupReadInvocationKHR 208 205
211: 6(int) CompositeExtract 205 2 210: 6(int) CompositeExtract 204 2
212: 6(int) GroupBroadcast 63 211 206 211: 6(int) SubgroupReadInvocationKHR 210 205
213: 6(int) CompositeExtract 205 3 212: 6(int) CompositeExtract 204 3
214: 6(int) GroupBroadcast 63 213 206 213: 6(int) SubgroupReadInvocationKHR 212 205
215: 38(ivec4) CompositeConstruct 208 210 212 214 214: 38(ivec4) CompositeConstruct 207 209 211 213
216: 174(ptr) AccessChain 55(data) 203 83 215: 173(ptr) AccessChain 55(data) 202 82
Store 216 215 Store 215 214
Branch 47 Branch 47
217: Label 216: Label
218: 6(int) Load 8(invocation) 217: 6(int) Load 8(invocation)
219: 59(ptr) AccessChain 55(data) 57 57 58 218: 59(ptr) AccessChain 55(data) 57 57 58
220: 48(float) Load 219 219: 48(float) Load 218
221: 48(float) SubgroupFirstInvocationKHR 220 220: 48(float) SubgroupFirstInvocationKHR 219
222: 59(ptr) AccessChain 55(data) 218 57 58 221: 59(ptr) AccessChain 55(data) 217 57 58
Store 222 221 Store 221 220
223: 6(int) Load 8(invocation) 222: 6(int) Load 8(invocation)
224: 69(ptr) AccessChain 55(data) 67 57 223: 68(ptr) AccessChain 55(data) 66 57
225: 49(fvec4) Load 224 224: 49(fvec4) Load 223
226: 68(fvec2) VectorShuffle 225 225 0 1 225: 67(fvec2) VectorShuffle 224 224 0 1
227: 68(fvec2) SubgroupFirstInvocationKHR 226 226: 67(fvec2) SubgroupFirstInvocationKHR 225
228: 69(ptr) AccessChain 55(data) 223 57 227: 68(ptr) AccessChain 55(data) 222 57
229: 49(fvec4) Load 228 228: 49(fvec4) Load 227
230: 49(fvec4) VectorShuffle 229 227 4 5 2 3 229: 49(fvec4) VectorShuffle 228 226 4 5 2 3
Store 228 230 Store 227 229
231: 6(int) Load 8(invocation) 230: 6(int) Load 8(invocation)
232: 69(ptr) AccessChain 55(data) 83 57 231: 68(ptr) AccessChain 55(data) 82 57
233: 49(fvec4) Load 232 232: 49(fvec4) Load 231
234: 84(fvec3) VectorShuffle 233 233 0 1 2 233: 83(fvec3) VectorShuffle 232 232 0 1 2
235: 84(fvec3) SubgroupFirstInvocationKHR 234 234: 83(fvec3) SubgroupFirstInvocationKHR 233
236: 69(ptr) AccessChain 55(data) 231 57 235: 68(ptr) AccessChain 55(data) 230 57
237: 49(fvec4) Load 236 236: 49(fvec4) Load 235
238: 49(fvec4) VectorShuffle 237 235 4 5 6 3 237: 49(fvec4) VectorShuffle 236 234 4 5 6 3
Store 236 238 Store 235 237
239: 6(int) Load 8(invocation) 238: 6(int) Load 8(invocation)
240: 69(ptr) AccessChain 55(data) 100 57 239: 68(ptr) AccessChain 55(data) 99 57
241: 49(fvec4) Load 240 240: 49(fvec4) Load 239
242: 49(fvec4) SubgroupFirstInvocationKHR 241 241: 49(fvec4) SubgroupFirstInvocationKHR 240
243: 69(ptr) AccessChain 55(data) 239 57 242: 68(ptr) AccessChain 55(data) 238 57
Store 243 242 Store 242 241
244: 6(int) Load 8(invocation) 243: 6(int) Load 8(invocation)
245: 115(ptr) AccessChain 55(data) 57 67 58 244: 114(ptr) AccessChain 55(data) 57 66 58
246: 50(int) Load 245 245: 50(int) Load 244
247: 50(int) SubgroupFirstInvocationKHR 246 246: 50(int) SubgroupFirstInvocationKHR 245
248: 115(ptr) AccessChain 55(data) 244 67 58 247: 114(ptr) AccessChain 55(data) 243 66 58
Store 248 247 Store 247 246
249: 6(int) Load 8(invocation) 248: 6(int) Load 8(invocation)
250: 123(ptr) AccessChain 55(data) 67 67 249: 122(ptr) AccessChain 55(data) 66 66
251: 51(ivec4) Load 250 250: 51(ivec4) Load 249
252: 122(ivec2) VectorShuffle 251 251 0 1 251: 121(ivec2) VectorShuffle 250 250 0 1
253: 122(ivec2) SubgroupFirstInvocationKHR 252 252: 121(ivec2) SubgroupFirstInvocationKHR 251
254: 123(ptr) AccessChain 55(data) 249 67 253: 122(ptr) AccessChain 55(data) 248 66
255: 51(ivec4) Load 254 254: 51(ivec4) Load 253
256: 51(ivec4) VectorShuffle 255 253 4 5 2 3 255: 51(ivec4) VectorShuffle 254 252 4 5 2 3
Store 254 256 Store 253 255
257: 6(int) Load 8(invocation) 256: 6(int) Load 8(invocation)
258: 123(ptr) AccessChain 55(data) 83 67 257: 122(ptr) AccessChain 55(data) 82 66
259: 51(ivec4) Load 258 258: 51(ivec4) Load 257
260: 137(ivec3) VectorShuffle 259 259 0 1 2 259: 136(ivec3) VectorShuffle 258 258 0 1 2
261: 137(ivec3) SubgroupFirstInvocationKHR 260 260: 136(ivec3) SubgroupFirstInvocationKHR 259
262: 123(ptr) AccessChain 55(data) 257 67 261: 122(ptr) AccessChain 55(data) 256 66
263: 51(ivec4) Load 262 262: 51(ivec4) Load 261
264: 51(ivec4) VectorShuffle 263 261 4 5 6 3 263: 51(ivec4) VectorShuffle 262 260 4 5 6 3
Store 262 264 Store 261 263
265: 6(int) Load 8(invocation) 264: 6(int) Load 8(invocation)
266: 123(ptr) AccessChain 55(data) 100 67 265: 122(ptr) AccessChain 55(data) 99 66
267: 51(ivec4) Load 266 266: 51(ivec4) Load 265
268: 51(ivec4) SubgroupFirstInvocationKHR 267 267: 51(ivec4) SubgroupFirstInvocationKHR 266
269: 123(ptr) AccessChain 55(data) 265 67 268: 122(ptr) AccessChain 55(data) 264 66
Store 269 268 Store 268 267
270: 6(int) Load 8(invocation) 269: 6(int) Load 8(invocation)
271: 167(ptr) AccessChain 55(data) 57 83 58 270: 166(ptr) AccessChain 55(data) 57 82 58
272: 6(int) Load 271 271: 6(int) Load 270
273: 6(int) SubgroupFirstInvocationKHR 272 272: 6(int) SubgroupFirstInvocationKHR 271
274: 167(ptr) AccessChain 55(data) 270 83 58 273: 166(ptr) AccessChain 55(data) 269 82 58
Store 274 273 Store 273 272
275: 6(int) Load 8(invocation) 274: 6(int) Load 8(invocation)
276: 174(ptr) AccessChain 55(data) 67 83 275: 173(ptr) AccessChain 55(data) 66 82
277: 38(ivec4) Load 276 276: 38(ivec4) Load 275
278: 42(ivec2) VectorShuffle 277 277 0 1 277: 42(ivec2) VectorShuffle 276 276 0 1
279: 42(ivec2) SubgroupFirstInvocationKHR 278 278: 42(ivec2) SubgroupFirstInvocationKHR 277
280: 174(ptr) AccessChain 55(data) 275 83 279: 173(ptr) AccessChain 55(data) 274 82
281: 38(ivec4) Load 280 280: 38(ivec4) Load 279
282: 38(ivec4) VectorShuffle 281 279 4 5 2 3 281: 38(ivec4) VectorShuffle 280 278 4 5 2 3
Store 280 282 Store 279 281
283: 6(int) Load 8(invocation) 282: 6(int) Load 8(invocation)
284: 174(ptr) AccessChain 55(data) 83 83 283: 173(ptr) AccessChain 55(data) 82 82
285: 38(ivec4) Load 284 284: 38(ivec4) Load 283
286: 188(ivec3) VectorShuffle 285 285 0 1 2 285: 187(ivec3) VectorShuffle 284 284 0 1 2
287: 188(ivec3) SubgroupFirstInvocationKHR 286 286: 187(ivec3) SubgroupFirstInvocationKHR 285
288: 174(ptr) AccessChain 55(data) 283 83 287: 173(ptr) AccessChain 55(data) 282 82
289: 38(ivec4) Load 288 288: 38(ivec4) Load 287
290: 38(ivec4) VectorShuffle 289 287 4 5 6 3 289: 38(ivec4) VectorShuffle 288 286 4 5 6 3
Store 288 290 Store 287 289
291: 6(int) Load 8(invocation) 290: 6(int) Load 8(invocation)
292: 174(ptr) AccessChain 55(data) 100 83 291: 173(ptr) AccessChain 55(data) 99 82
293: 38(ivec4) Load 292 292: 38(ivec4) Load 291
294: 38(ivec4) SubgroupFirstInvocationKHR 293 293: 38(ivec4) SubgroupFirstInvocationKHR 292
295: 174(ptr) AccessChain 55(data) 291 83 294: 173(ptr) AccessChain 55(data) 290 82
Store 295 294 Store 294 293
Branch 47 Branch 47
47: Label 47: Label
Return Return