Skip to content

Instantly share code, notes, and snippets.

@borisbat
Created August 7, 2026 13:02
Show Gist options
  • Select an option

  • Save borisbat/83e9e55b5cdc2ea558a97a63ec38207c to your computer and use it in GitHub Desktop.

Select an option

Save borisbat/83e9e55b5cdc2ea558a97a63ec38207c to your computer and use it in GitHub Desktop.
MoltenVK argbuf compute store-loss repro: SPIR-V kernels (7 fail / 2 pass)

MoltenVK argument-buffers compute store-loss repro — SPIR-V kernels

Nine compute kernels from the dasLLAMA test suite (daslang-generated SPIR-V, disassembled with spirv-dis; spirv-as rebuilds the binaries). All nine pass spirv-val (default and --target-env vulkan1.2). On Apple M1 Max, macOS 26.5.2, MoltenVK 1.4.2 (brew), with Metal argument buffers enabled (MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS=1, the Apple Silicon default) the seven kernels marked FAIL dispatch without any error but none of their device stores land; with MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS=0 all nine produce correct results. Fences signal and buffer copies in the same submission run in both cases.

kernel argbufs=1 bindings (set 0) SSBO vars push-constant members Workgroup vars
q8_batch_cls FAIL 0-5 6 3 4
kq_batch_k4_cls FAIL 0-5 6 3 5
kq_batch_q40_cls FAIL 0-5 6 3 5
kq_batch_k5_cls FAIL 0-5 6 3 5
kq_batch_k6_cls FAIL 0-5 6 3 5
rope_kv_b_cls FAIL 0-4 5 11 0
qkn_rope_cls FAIL 0-6 7 10 3
rope_kv_cls PASS 0-5 6 8 0
q8_gemv_cls PASS 0-5 6 4 0

rope_kv_cls (PASS) and rope_kv_b_cls (FAIL) are near-identical siblings — same local_size, overlapping bindings — useful as an A/B pair. No single SPIR-V-level axis we checked (binding count, push-constant size, workgroup use) separates the two sets.

All descriptors are plain STORAGE_BUFFER in one set; push constants via vkCmdPushConstants; dispatch via vkCmdDispatch(x, 1, 1); pipelines are plain compute pipelines created with vkCreateComputePipelines. Layouts: one VkDescriptorSetLayout listing exactly the bindings above, all VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, stage COMPUTE.

; SPIR-V
; Version: 1.3
; Generator: Khronos; 0
; Bound: 659
; Schema: 0
OpCapability Shader
OpCapability DotProduct
OpCapability DotProductInput4x8BitPacked
OpExtension "SPV_KHR_integer_dot_product"
%356 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %58 "main" %gl_LocalInvocationID %gl_WorkGroupID
OpExecutionMode %58 LocalSize 256 1 1
OpDecorate %_runtimearr_uint ArrayStride 4
OpDecorate %_struct_3 Block
OpMemberDecorate %_struct_3 0 Offset 0
OpDecorate %5 DescriptorSet 0
OpDecorate %5 Binding 0
OpDecorate %6 DescriptorSet 0
OpDecorate %6 Binding 1
OpDecorate %7 DescriptorSet 0
OpDecorate %7 Binding 2
OpDecorate %8 DescriptorSet 0
OpDecorate %8 Binding 3
OpDecorate %_runtimearr_float ArrayStride 4
OpDecorate %_struct_11 Block
OpMemberDecorate %_struct_11 0 Offset 0
OpDecorate %13 DescriptorSet 0
OpDecorate %13 Binding 4
OpDecorate %14 DescriptorSet 0
OpDecorate %14 Binding 5
OpDecorate %_struct_15 Block
OpMemberDecorate %_struct_15 0 Offset 0
OpMemberDecorate %_struct_15 1 Offset 4
OpMemberDecorate %_struct_15 2 Offset 8
OpDecorate %gl_LocalInvocationID BuiltIn LocalInvocationId
OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId
%uint = OpTypeInt 32 0
%_runtimearr_uint = OpTypeRuntimeArray %uint
%_struct_3 = OpTypeStruct %_runtimearr_uint
%_ptr_StorageBuffer__struct_3 = OpTypePointer StorageBuffer %_struct_3
%5 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%6 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%7 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%8 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%float = OpTypeFloat 32
%_runtimearr_float = OpTypeRuntimeArray %float
%_struct_11 = OpTypeStruct %_runtimearr_float
%_ptr_StorageBuffer__struct_11 = OpTypePointer StorageBuffer %_struct_11
%13 = OpVariable %_ptr_StorageBuffer__struct_11 StorageBuffer
%14 = OpVariable %_ptr_StorageBuffer__struct_11 StorageBuffer
%_struct_15 = OpTypeStruct %uint %uint %uint
%_ptr_PushConstant__struct_15 = OpTypePointer PushConstant %_struct_15
%17 = OpVariable %_ptr_PushConstant__struct_15 PushConstant
%v4uint = OpTypeVector %uint 4
%uint_544 = OpConstant %uint 544
%_arr_v4uint_uint_544 = OpTypeArray %v4uint %uint_544
%_ptr_Workgroup__arr_v4uint_uint_544 = OpTypePointer Workgroup %_arr_v4uint_uint_544
%22 = OpVariable %_ptr_Workgroup__arr_v4uint_uint_544 Workgroup
%23 = OpVariable %_ptr_Workgroup__arr_v4uint_uint_544 Workgroup
%uint_256 = OpConstant %uint 256
%_arr_float_uint_256 = OpTypeArray %float %uint_256
%_ptr_Workgroup__arr_float_uint_256 = OpTypePointer Workgroup %_arr_float_uint_256
%27 = OpVariable %_ptr_Workgroup__arr_float_uint_256 Workgroup
%28 = OpVariable %_ptr_Workgroup__arr_float_uint_256 Workgroup
%29 = OpVariable %_ptr_Workgroup__arr_float_uint_256 Workgroup
%void = OpTypeVoid
%32 = OpTypeFunction %void
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%gl_LocalInvocationID = OpVariable %_ptr_Input_v3uint Input
%37 = OpTypeFunction %v4uint
%gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input
%40 = OpTypeFunction %void %uint %uint %uint %uint %uint %uint %uint
%42 = OpTypeFunction %void %uint %uint %uint %uint %uint %uint
%45 = OpTypeFunction %void %uint %uint %uint %uint %uint
%v4float = OpTypeVector %float 4
%49 = OpTypeFunction %v4float %uint %uint %uint %float
%int = OpTypeInt 32 1
%v4int = OpTypeVector %int 4
%_ptr_Function_v4int = OpTypePointer Function %v4int
%55 = OpTypeFunction %int %uint %uint %uint %_ptr_Function_v4int
%57 = OpTypeFunction %void %uint %uint %uint %uint %uint %v4float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_uint = OpTypePointer Function %uint
%_ptr_Function_int = OpTypePointer Function %int
%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint
%uint_1 = OpConstant %uint 1
%uint_31 = OpConstant %uint 31
%uint_32 = OpConstant %uint 32
%uint_0 = OpConstant %uint 0
%_ptr_Input_uint = OpTypePointer Input %uint
%uint_8 = OpConstant %uint 8
%float_0 = OpConstant %float 0
%98 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%bool = OpTypeBool
%uint_2 = OpConstant %uint 2
%uint_264 = OpConstant %uint 264
%_ptr_Workgroup_float = OpTypePointer Workgroup %float
%int_0 = OpConstant %int 0
%int_8 = OpConstant %int 8
%int_1 = OpConstant %int 1
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
%uint_4 = OpConstant %uint 4
%uint_3 = OpConstant %uint 3
%_ptr_Function_v4uint = OpTypePointer Function %v4uint
%int_2 = OpConstant %int 2
%193 = OpConstantComposite %v4uint %uint_0 %uint_0 %uint_0 %uint_0
%uint_64 = OpConstant %uint 64
%uint_17 = OpConstant %uint 17
%_ptr_Workgroup_v4uint = OpTypePointer Workgroup %v4uint
%uint_252645135 = OpConstant %uint 252645135
%_ptr_Function_float = OpTypePointer Function %float
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
%uint_5 = OpConstant %uint 5
%v2float = OpTypeVector %float 2
%uint_255 = OpConstant %uint 255
%409 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%uint_16 = OpConstant %uint 16
%uint_24 = OpConstant %uint 24
%uint_16843009 = OpConstant %uint 16843009
%58 = OpFunction %void None %32
%59 = OpLabel
%60 = OpFunctionCall %void %31
OpReturn
OpFunctionEnd
%31 = OpFunction %void None %32
%61 = OpLabel
%63 = OpVariable %_ptr_Function_v4float Function
%65 = OpVariable %_ptr_Function_uint Function
%67 = OpVariable %_ptr_Function_int Function
%68 = OpFunctionCall %v4uint %36
%69 = OpCompositeExtract %uint %68 0
%70 = OpCompositeExtract %uint %68 1
%71 = OpCompositeExtract %uint %68 2
%72 = OpCompositeExtract %uint %68 3
%74 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%76 = OpLoad %uint %74
%78 = OpIAdd %uint %76 %uint_31
%80 = OpUDiv %uint %78 %uint_32
%81 = OpUDiv %uint %72 %80
%82 = OpUMod %uint %72 %80
%83 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_0
%85 = OpLoad %uint %83
%86 = OpUDiv %uint %85 %uint_256
%88 = OpAccessChain %_ptr_Input_uint %gl_LocalInvocationID %uint_0
%89 = OpLoad %uint %88
%91 = OpUMod %uint %89 %uint_8
%92 = OpUDiv %uint %89 %uint_8
%93 = OpIMul %uint %81 %uint_32
%94 = OpIAdd %uint %93 %92
%95 = OpIMul %uint %82 %uint_32
%96 = OpIAdd %uint %95 %92
OpStore %63 %98
OpStore %65 %uint_0
OpBranch %99
%99 = OpLabel
OpLoopMerge %103 %102 None
OpBranch %100
%100 = OpLabel
%104 = OpLoad %uint %65
%106 = OpULessThan %bool %104 %86
OpBranchConditional %106 %101 %103
%101 = OpLabel
%107 = OpLoad %uint %65
%108 = OpFunctionCall %void %39 %70 %94 %71 %86 %107 %91 %92
%109 = OpLoad %uint %65
%110 = OpFunctionCall %void %41 %69 %96 %86 %109 %91 %92
%111 = OpLoad %uint %65
%112 = OpFunctionCall %void %43 %70 %81 %71 %86 %111 %89
%113 = OpLoad %uint %65
%114 = OpFunctionCall %void %44 %69 %82 %86 %113 %89
OpControlBarrier %uint_2 %uint_2 %uint_264
%117 = OpAccessChain %_ptr_Workgroup_float %27 %92
%119 = OpLoad %float %117
OpStore %67 %int_0
OpBranch %122
%122 = OpLabel
OpLoopMerge %126 %125 None
OpBranch %123
%123 = OpLabel
%127 = OpLoad %int %67
%128 = OpSLessThan %bool %127 %int_8
OpBranchConditional %128 %124 %126
%124 = OpLabel
%129 = OpLoad %int %67
%130 = OpBitcast %uint %129
%131 = OpFunctionCall %v4float %48 %130 %92 %91 %119
%132 = OpLoad %v4float %63
%133 = OpFAdd %v4float %132 %131
OpStore %63 %133
OpBranch %125
%125 = OpLabel
%134 = OpLoad %int %67
%135 = OpIAdd %int %134 %int_1
OpStore %67 %135
OpBranch %122
%126 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
%137 = OpLoad %uint %65
%138 = OpIAdd %uint %137 %uint_1
OpStore %65 %138
OpBranch %102
%102 = OpLabel
OpBranch %99
%103 = OpLabel
%139 = OpLoad %v4float %63
%140 = OpFunctionCall %void %56 %94 %71 %70 %82 %91 %139
OpReturn
OpFunctionEnd
%36 = OpFunction %v4uint None %37
%141 = OpLabel
%142 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_2
%143 = OpLoad %uint %142
%144 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_0
%145 = OpLoad %uint %144
%146 = OpIAdd %uint %143 %145
%147 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %146
%149 = OpLoad %uint %147
%151 = OpIMul %uint %149 %uint_4
%152 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %151
%153 = OpLoad %uint %152
%154 = OpIAdd %uint %151 %uint_1
%155 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %154
%156 = OpLoad %uint %155
%157 = OpIAdd %uint %151 %uint_2
%158 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %157
%159 = OpLoad %uint %158
%160 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_0
%161 = OpLoad %uint %160
%163 = OpIAdd %uint %151 %uint_3
%164 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %163
%165 = OpLoad %uint %164
%166 = OpISub %uint %161 %165
%167 = OpCompositeConstruct %v4uint %153 %156 %159 %166
OpReturnValue %167
OpFunctionEnd
%39 = OpFunction %void None %40
%168 = OpFunctionParameter %uint
%169 = OpFunctionParameter %uint
%170 = OpFunctionParameter %uint
%171 = OpFunctionParameter %uint
%172 = OpFunctionParameter %uint
%173 = OpFunctionParameter %uint
%174 = OpFunctionParameter %uint
%175 = OpLabel
%176 = OpVariable %_ptr_Function_int Function
%178 = OpVariable %_ptr_Function_v4uint Function
OpStore %176 %int_0
OpBranch %180
%180 = OpLabel
OpLoopMerge %184 %183 None
OpBranch %181
%181 = OpLabel
%185 = OpLoad %int %176
%186 = OpSLessThan %bool %185 %int_2
OpBranchConditional %186 %182 %184
%182 = OpLabel
%187 = OpLoad %int %176
%188 = OpBitcast %uint %187
%189 = OpIMul %uint %188 %uint_8
%190 = OpIAdd %uint %173 %189
%191 = OpUDiv %uint %190 %uint_2
%192 = OpUMod %uint %190 %uint_2
OpStore %178 %193
%194 = OpULessThan %bool %169 %170
OpSelectionMerge %195 None
OpBranchConditional %194 %196 %195
%196 = OpLabel
%197 = OpIAdd %uint %168 %169
%198 = OpIMul %uint %197 %171
%199 = OpIAdd %uint %198 %172
%201 = OpIMul %uint %199 %uint_64
%202 = OpIMul %uint %191 %uint_8
%203 = OpIAdd %uint %201 %202
%204 = OpIMul %uint %192 %uint_4
%205 = OpIAdd %uint %203 %204
%206 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %205
%207 = OpLoad %uint %206
%208 = OpIAdd %uint %205 %uint_1
%209 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %208
%210 = OpLoad %uint %209
%211 = OpIAdd %uint %205 %uint_2
%212 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %211
%213 = OpLoad %uint %212
%214 = OpIAdd %uint %205 %uint_3
%215 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %214
%216 = OpLoad %uint %215
%217 = OpCompositeConstruct %v4uint %207 %210 %213 %216
OpStore %178 %217
OpBranch %195
%195 = OpLabel
%219 = OpIMul %uint %174 %uint_17
%220 = OpIAdd %uint %219 %190
%221 = OpAccessChain %_ptr_Workgroup_v4uint %22 %220
%223 = OpLoad %v4uint %178
OpStore %221 %223
OpBranch %183
%183 = OpLabel
%224 = OpLoad %int %176
%225 = OpIAdd %int %224 %int_1
OpStore %176 %225
OpBranch %180
%184 = OpLabel
OpReturn
OpFunctionEnd
%41 = OpFunction %void None %42
%226 = OpFunctionParameter %uint
%227 = OpFunctionParameter %uint
%228 = OpFunctionParameter %uint
%229 = OpFunctionParameter %uint
%230 = OpFunctionParameter %uint
%231 = OpFunctionParameter %uint
%232 = OpLabel
%233 = OpVariable %_ptr_Function_int Function
%234 = OpVariable %_ptr_Function_v4uint Function
OpStore %233 %int_0
OpBranch %235
%235 = OpLabel
OpLoopMerge %239 %238 None
OpBranch %236
%236 = OpLabel
%240 = OpLoad %int %233
%241 = OpSLessThan %bool %240 %int_2
OpBranchConditional %241 %237 %239
%237 = OpLabel
%242 = OpLoad %int %233
%243 = OpBitcast %uint %242
%244 = OpIMul %uint %243 %uint_8
%245 = OpIAdd %uint %230 %244
%246 = OpUDiv %uint %245 %uint_2
%247 = OpUMod %uint %245 %uint_2
OpStore %234 %193
%248 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%249 = OpLoad %uint %248
%250 = OpULessThan %bool %227 %249
OpSelectionMerge %251 None
OpBranchConditional %250 %252 %251
%252 = OpLabel
%253 = OpIMul %uint %227 %228
%254 = OpIAdd %uint %226 %253
%255 = OpIAdd %uint %254 %229
%256 = OpIMul %uint %255 %uint_32
%257 = OpIMul %uint %246 %uint_4
%258 = OpIAdd %uint %256 %257
%259 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %258
%260 = OpLoad %uint %259
%261 = OpIAdd %uint %258 %uint_1
%262 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %261
%263 = OpLoad %uint %262
%264 = OpIAdd %uint %258 %uint_2
%265 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %264
%266 = OpLoad %uint %265
%267 = OpIAdd %uint %258 %uint_3
%268 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %267
%269 = OpLoad %uint %268
%270 = OpIEqual %bool %247 %uint_0
OpSelectionMerge %271 None
OpBranchConditional %270 %272 %273
%272 = OpLabel
%275 = OpBitwiseAnd %uint %260 %uint_252645135
%276 = OpBitwiseAnd %uint %263 %uint_252645135
%277 = OpBitwiseAnd %uint %266 %uint_252645135
%278 = OpBitwiseAnd %uint %269 %uint_252645135
%279 = OpCompositeConstruct %v4uint %275 %276 %277 %278
OpStore %234 %279
OpBranch %271
%273 = OpLabel
%280 = OpShiftRightLogical %uint %260 %uint_4
%281 = OpBitwiseAnd %uint %280 %uint_252645135
%282 = OpShiftRightLogical %uint %263 %uint_4
%283 = OpBitwiseAnd %uint %282 %uint_252645135
%284 = OpShiftRightLogical %uint %266 %uint_4
%285 = OpBitwiseAnd %uint %284 %uint_252645135
%286 = OpShiftRightLogical %uint %269 %uint_4
%287 = OpBitwiseAnd %uint %286 %uint_252645135
%288 = OpCompositeConstruct %v4uint %281 %283 %285 %287
OpStore %234 %288
OpBranch %271
%271 = OpLabel
OpBranch %251
%251 = OpLabel
%289 = OpIMul %uint %231 %uint_17
%290 = OpIAdd %uint %289 %245
%291 = OpAccessChain %_ptr_Workgroup_v4uint %23 %290
%292 = OpLoad %v4uint %234
OpStore %291 %292
OpBranch %238
%238 = OpLabel
%293 = OpLoad %int %233
%294 = OpIAdd %int %293 %int_1
OpStore %233 %294
OpBranch %235
%239 = OpLabel
OpReturn
OpFunctionEnd
%43 = OpFunction %void None %42
%295 = OpFunctionParameter %uint
%296 = OpFunctionParameter %uint
%297 = OpFunctionParameter %uint
%298 = OpFunctionParameter %uint
%299 = OpFunctionParameter %uint
%300 = OpFunctionParameter %uint
%301 = OpLabel
%303 = OpVariable %_ptr_Function_float Function
%304 = OpULessThan %bool %300 %uint_32
OpSelectionMerge %305 None
OpBranchConditional %304 %306 %305
%306 = OpLabel
OpStore %303 %float_0
%307 = OpIMul %uint %296 %uint_32
%308 = OpIAdd %uint %307 %300
%309 = OpULessThan %bool %308 %297
OpSelectionMerge %310 None
OpBranchConditional %309 %311 %310
%311 = OpLabel
%312 = OpIMul %uint %296 %uint_32
%313 = OpIAdd %uint %295 %312
%314 = OpIAdd %uint %313 %300
%315 = OpIMul %uint %314 %298
%316 = OpIAdd %uint %315 %299
%317 = OpAccessChain %_ptr_StorageBuffer_float %13 %uint_0 %316
%319 = OpLoad %float %317
OpStore %303 %319
OpBranch %310
%310 = OpLabel
%320 = OpAccessChain %_ptr_Workgroup_float %27 %300
%321 = OpLoad %float %303
OpStore %320 %321
OpBranch %305
%305 = OpLabel
OpReturn
OpFunctionEnd
%44 = OpFunction %void None %45
%322 = OpFunctionParameter %uint
%323 = OpFunctionParameter %uint
%324 = OpFunctionParameter %uint
%325 = OpFunctionParameter %uint
%326 = OpFunctionParameter %uint
%327 = OpLabel
%328 = OpUMod %uint %326 %uint_32
%329 = OpUDiv %uint %326 %uint_32
%330 = OpFunctionCall %void %46 %322 %323 %324 %325 %328 %329
OpReturn
OpFunctionEnd
%46 = OpFunction %void None %42
%331 = OpFunctionParameter %uint
%332 = OpFunctionParameter %uint
%333 = OpFunctionParameter %uint
%334 = OpFunctionParameter %uint
%335 = OpFunctionParameter %uint
%336 = OpFunctionParameter %uint
%337 = OpLabel
%338 = OpVariable %_ptr_Function_float Function
%339 = OpVariable %_ptr_Function_float Function
OpStore %338 %float_0
OpStore %339 %float_0
%340 = OpIMul %uint %332 %uint_32
%341 = OpIAdd %uint %340 %335
%342 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%343 = OpLoad %uint %342
%344 = OpULessThan %bool %341 %343
OpSelectionMerge %345 None
OpBranchConditional %344 %346 %345
%346 = OpLabel
%347 = OpIMul %uint %332 %uint_32
%348 = OpIAdd %uint %347 %335
%349 = OpIMul %uint %348 %333
%350 = OpIAdd %uint %331 %349
%351 = OpIAdd %uint %350 %334
%353 = OpIMul %uint %351 %uint_5
%354 = OpAccessChain %_ptr_StorageBuffer_uint %6 %uint_0 %353
%355 = OpLoad %uint %354
%358 = OpExtInst %v2float %356 UnpackHalf2x16 %355
%359 = OpIMul %uint %351 %uint_5
%360 = OpIAdd %uint %359 %uint_1
%361 = OpUDiv %uint %336 %uint_4
%362 = OpIAdd %uint %360 %361
%363 = OpAccessChain %_ptr_StorageBuffer_uint %6 %uint_0 %362
%364 = OpLoad %uint %363
%365 = OpUMod %uint %336 %uint_4
%366 = OpIMul %uint %365 %uint_8
%367 = OpShiftRightLogical %uint %364 %366
%369 = OpBitwiseAnd %uint %367 %uint_255
%370 = OpBitcast %int %369
%371 = OpIMul %uint %351 %uint_5
%372 = OpIAdd %uint %371 %uint_3
%373 = OpUDiv %uint %336 %uint_4
%374 = OpIAdd %uint %372 %373
%375 = OpAccessChain %_ptr_StorageBuffer_uint %6 %uint_0 %374
%376 = OpLoad %uint %375
%377 = OpUMod %uint %336 %uint_4
%378 = OpIMul %uint %377 %uint_8
%379 = OpShiftRightLogical %uint %376 %378
%380 = OpBitwiseAnd %uint %379 %uint_255
%381 = OpBitcast %int %380
%382 = OpCompositeExtract %float %358 0
%383 = OpConvertSToF %float %370
%384 = OpFMul %float %382 %383
OpStore %338 %384
%385 = OpCompositeExtract %float %358 1
%386 = OpConvertSToF %float %381
%387 = OpFMul %float %385 %386
OpStore %339 %387
OpBranch %345
%345 = OpLabel
%388 = OpIMul %uint %336 %uint_32
%389 = OpIAdd %uint %388 %335
%390 = OpAccessChain %_ptr_Workgroup_float %28 %389
%391 = OpLoad %float %338
OpStore %390 %391
%392 = OpIMul %uint %336 %uint_32
%393 = OpIAdd %uint %392 %335
%394 = OpAccessChain %_ptr_Workgroup_float %29 %393
%395 = OpLoad %float %339
OpStore %394 %395
OpReturn
OpFunctionEnd
%48 = OpFunction %v4float None %49
%396 = OpFunctionParameter %uint
%397 = OpFunctionParameter %uint
%398 = OpFunctionParameter %uint
%399 = OpFunctionParameter %float
%400 = OpLabel
%401 = OpFunctionCall %v4float %50 %396 %397 %398 %399
OpReturnValue %401
OpFunctionEnd
%50 = OpFunction %v4float None %49
%402 = OpFunctionParameter %uint
%403 = OpFunctionParameter %uint
%404 = OpFunctionParameter %uint
%405 = OpFunctionParameter %float
%406 = OpLabel
%407 = OpVariable %_ptr_Function_v4int Function
%408 = OpVariable %_ptr_Function_v4int Function
OpStore %407 %409
%411 = OpLoad %v4int %407
OpStore %408 %411
%410 = OpFunctionCall %int %54 %402 %403 %404 %408
%412 = OpLoad %v4int %408
OpStore %407 %412
%413 = OpIMul %uint %402 %uint_32
%414 = OpIAdd %uint %413 %404
%415 = OpAccessChain %_ptr_Workgroup_float %28 %414
%416 = OpLoad %float %415
%417 = OpIMul %uint %402 %uint_32
%418 = OpIAdd %uint %417 %404
%419 = OpIAdd %uint %418 %uint_8
%420 = OpAccessChain %_ptr_Workgroup_float %28 %419
%421 = OpLoad %float %420
%422 = OpIMul %uint %402 %uint_32
%423 = OpIAdd %uint %422 %404
%425 = OpIAdd %uint %423 %uint_16
%426 = OpAccessChain %_ptr_Workgroup_float %28 %425
%427 = OpLoad %float %426
%428 = OpIMul %uint %402 %uint_32
%429 = OpIAdd %uint %428 %404
%431 = OpIAdd %uint %429 %uint_24
%432 = OpAccessChain %_ptr_Workgroup_float %28 %431
%433 = OpLoad %float %432
%434 = OpCompositeConstruct %v4float %416 %421 %427 %433
%435 = OpIMul %uint %402 %uint_32
%436 = OpIAdd %uint %435 %404
%437 = OpAccessChain %_ptr_Workgroup_float %29 %436
%438 = OpLoad %float %437
%439 = OpIMul %uint %402 %uint_32
%440 = OpIAdd %uint %439 %404
%441 = OpIAdd %uint %440 %uint_8
%442 = OpAccessChain %_ptr_Workgroup_float %29 %441
%443 = OpLoad %float %442
%444 = OpIMul %uint %402 %uint_32
%445 = OpIAdd %uint %444 %404
%446 = OpIAdd %uint %445 %uint_16
%447 = OpAccessChain %_ptr_Workgroup_float %29 %446
%448 = OpLoad %float %447
%449 = OpIMul %uint %402 %uint_32
%450 = OpIAdd %uint %449 %404
%451 = OpIAdd %uint %450 %uint_24
%452 = OpAccessChain %_ptr_Workgroup_float %29 %451
%453 = OpLoad %float %452
%454 = OpCompositeConstruct %v4float %438 %443 %448 %453
%455 = OpLoad %v4int %407
%456 = OpConvertSToF %v4float %455
%457 = OpFMul %v4float %434 %456
%458 = OpConvertSToF %float %410
%459 = OpVectorTimesScalar %v4float %454 %458
%460 = OpFSub %v4float %457 %459
%461 = OpVectorTimesScalar %v4float %460 %405
OpReturnValue %461
OpFunctionEnd
%54 = OpFunction %int None %55
%462 = OpFunctionParameter %uint
%463 = OpFunctionParameter %uint
%464 = OpFunctionParameter %uint
%465 = OpFunctionParameter %_ptr_Function_v4int
%466 = OpLabel
%467 = OpVariable %_ptr_Function_int Function
%468 = OpVariable %_ptr_Function_int Function
OpStore %467 %int_0
OpStore %468 %int_0
OpBranch %469
%469 = OpLabel
OpLoopMerge %473 %472 None
OpBranch %470
%470 = OpLabel
%474 = OpLoad %int %468
%475 = OpSLessThan %bool %474 %int_2
OpBranchConditional %475 %471 %473
%471 = OpLabel
%476 = OpIMul %uint %462 %uint_2
%477 = OpLoad %int %468
%478 = OpBitcast %uint %477
%479 = OpIAdd %uint %476 %478
%480 = OpIMul %uint %463 %uint_17
%481 = OpIAdd %uint %480 %479
%482 = OpAccessChain %_ptr_Workgroup_v4uint %22 %481
%483 = OpLoad %v4uint %482
%484 = OpIMul %uint %464 %uint_17
%485 = OpIAdd %uint %484 %479
%486 = OpAccessChain %_ptr_Workgroup_v4uint %23 %485
%487 = OpLoad %v4uint %486
%488 = OpIAdd %uint %464 %uint_8
%489 = OpIMul %uint %488 %uint_17
%490 = OpIAdd %uint %489 %479
%491 = OpAccessChain %_ptr_Workgroup_v4uint %23 %490
%492 = OpLoad %v4uint %491
%493 = OpIAdd %uint %464 %uint_16
%494 = OpIMul %uint %493 %uint_17
%495 = OpIAdd %uint %494 %479
%496 = OpAccessChain %_ptr_Workgroup_v4uint %23 %495
%497 = OpLoad %v4uint %496
%498 = OpIAdd %uint %464 %uint_24
%499 = OpIMul %uint %498 %uint_17
%500 = OpIAdd %uint %499 %479
%501 = OpAccessChain %_ptr_Workgroup_v4uint %23 %500
%502 = OpLoad %v4uint %501
%503 = OpCompositeExtract %uint %483 0
%505 = OpSDot %int %503 %uint_16843009 PackedVectorFormat4x8Bit
%506 = OpCompositeExtract %uint %483 1
%507 = OpSDot %int %506 %uint_16843009 PackedVectorFormat4x8Bit
%508 = OpIAdd %int %505 %507
%509 = OpCompositeExtract %uint %483 2
%510 = OpSDot %int %509 %uint_16843009 PackedVectorFormat4x8Bit
%511 = OpIAdd %int %508 %510
%512 = OpCompositeExtract %uint %483 3
%513 = OpSDot %int %512 %uint_16843009 PackedVectorFormat4x8Bit
%514 = OpIAdd %int %511 %513
%515 = OpLoad %int %467
%516 = OpIAdd %int %515 %514
OpStore %467 %516
%517 = OpLoad %v4int %465
%518 = OpCompositeExtract %int %517 0
%519 = OpCompositeExtract %uint %487 0
%520 = OpCompositeExtract %uint %483 0
%521 = OpSDot %int %519 %520 PackedVectorFormat4x8Bit
%522 = OpCompositeExtract %uint %487 1
%523 = OpCompositeExtract %uint %483 1
%524 = OpSDot %int %522 %523 PackedVectorFormat4x8Bit
%525 = OpIAdd %int %521 %524
%526 = OpCompositeExtract %uint %487 2
%527 = OpCompositeExtract %uint %483 2
%528 = OpSDot %int %526 %527 PackedVectorFormat4x8Bit
%529 = OpIAdd %int %525 %528
%530 = OpCompositeExtract %uint %487 3
%531 = OpCompositeExtract %uint %483 3
%532 = OpSDot %int %530 %531 PackedVectorFormat4x8Bit
%533 = OpIAdd %int %529 %532
%534 = OpAccessChain %_ptr_Function_int %465 %uint_0
%535 = OpLoad %int %534
%536 = OpIAdd %int %535 %533
OpStore %534 %536
%537 = OpLoad %v4int %465
%538 = OpCompositeExtract %int %537 1
%539 = OpCompositeExtract %uint %492 0
%540 = OpCompositeExtract %uint %483 0
%541 = OpSDot %int %539 %540 PackedVectorFormat4x8Bit
%542 = OpCompositeExtract %uint %492 1
%543 = OpCompositeExtract %uint %483 1
%544 = OpSDot %int %542 %543 PackedVectorFormat4x8Bit
%545 = OpIAdd %int %541 %544
%546 = OpCompositeExtract %uint %492 2
%547 = OpCompositeExtract %uint %483 2
%548 = OpSDot %int %546 %547 PackedVectorFormat4x8Bit
%549 = OpIAdd %int %545 %548
%550 = OpCompositeExtract %uint %492 3
%551 = OpCompositeExtract %uint %483 3
%552 = OpSDot %int %550 %551 PackedVectorFormat4x8Bit
%553 = OpIAdd %int %549 %552
%554 = OpAccessChain %_ptr_Function_int %465 %uint_1
%555 = OpLoad %int %554
%556 = OpIAdd %int %555 %553
OpStore %554 %556
%557 = OpLoad %v4int %465
%558 = OpCompositeExtract %int %557 2
%559 = OpCompositeExtract %uint %497 0
%560 = OpCompositeExtract %uint %483 0
%561 = OpSDot %int %559 %560 PackedVectorFormat4x8Bit
%562 = OpCompositeExtract %uint %497 1
%563 = OpCompositeExtract %uint %483 1
%564 = OpSDot %int %562 %563 PackedVectorFormat4x8Bit
%565 = OpIAdd %int %561 %564
%566 = OpCompositeExtract %uint %497 2
%567 = OpCompositeExtract %uint %483 2
%568 = OpSDot %int %566 %567 PackedVectorFormat4x8Bit
%569 = OpIAdd %int %565 %568
%570 = OpCompositeExtract %uint %497 3
%571 = OpCompositeExtract %uint %483 3
%572 = OpSDot %int %570 %571 PackedVectorFormat4x8Bit
%573 = OpIAdd %int %569 %572
%574 = OpAccessChain %_ptr_Function_int %465 %uint_2
%575 = OpLoad %int %574
%576 = OpIAdd %int %575 %573
OpStore %574 %576
%577 = OpLoad %v4int %465
%578 = OpCompositeExtract %int %577 3
%579 = OpCompositeExtract %uint %502 0
%580 = OpCompositeExtract %uint %483 0
%581 = OpSDot %int %579 %580 PackedVectorFormat4x8Bit
%582 = OpCompositeExtract %uint %502 1
%583 = OpCompositeExtract %uint %483 1
%584 = OpSDot %int %582 %583 PackedVectorFormat4x8Bit
%585 = OpIAdd %int %581 %584
%586 = OpCompositeExtract %uint %502 2
%587 = OpCompositeExtract %uint %483 2
%588 = OpSDot %int %586 %587 PackedVectorFormat4x8Bit
%589 = OpIAdd %int %585 %588
%590 = OpCompositeExtract %uint %502 3
%591 = OpCompositeExtract %uint %483 3
%592 = OpSDot %int %590 %591 PackedVectorFormat4x8Bit
%593 = OpIAdd %int %589 %592
%594 = OpAccessChain %_ptr_Function_int %465 %uint_3
%595 = OpLoad %int %594
%596 = OpIAdd %int %595 %593
OpStore %594 %596
OpBranch %472
%472 = OpLabel
%597 = OpLoad %int %468
%598 = OpIAdd %int %597 %int_1
OpStore %468 %598
OpBranch %469
%473 = OpLabel
%599 = OpLoad %int %467
OpReturnValue %599
OpFunctionEnd
%56 = OpFunction %void None %57
%600 = OpFunctionParameter %uint
%601 = OpFunctionParameter %uint
%602 = OpFunctionParameter %uint
%603 = OpFunctionParameter %uint
%604 = OpFunctionParameter %uint
%605 = OpFunctionParameter %v4float
%606 = OpLabel
%607 = OpULessThan %bool %600 %601
OpSelectionMerge %608 None
OpBranchConditional %607 %609 %608
%609 = OpLabel
%610 = OpIAdd %uint %602 %600
%611 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%612 = OpLoad %uint %611
%613 = OpIMul %uint %610 %612
%614 = OpIMul %uint %603 %uint_32
%615 = OpIAdd %uint %613 %614
%616 = OpIAdd %uint %615 %604
%617 = OpIMul %uint %603 %uint_32
%618 = OpIAdd %uint %617 %604
%619 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%620 = OpLoad %uint %619
%621 = OpULessThan %bool %618 %620
OpSelectionMerge %622 None
OpBranchConditional %621 %623 %622
%623 = OpLabel
%624 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %616
%625 = OpCompositeExtract %float %605 0
OpStore %624 %625
OpBranch %622
%622 = OpLabel
%626 = OpIMul %uint %603 %uint_32
%627 = OpIAdd %uint %626 %604
%628 = OpIAdd %uint %627 %uint_8
%629 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%630 = OpLoad %uint %629
%631 = OpULessThan %bool %628 %630
OpSelectionMerge %632 None
OpBranchConditional %631 %633 %632
%633 = OpLabel
%634 = OpIAdd %uint %616 %uint_8
%635 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %634
%636 = OpCompositeExtract %float %605 1
OpStore %635 %636
OpBranch %632
%632 = OpLabel
%637 = OpIMul %uint %603 %uint_32
%638 = OpIAdd %uint %637 %604
%639 = OpIAdd %uint %638 %uint_16
%640 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%641 = OpLoad %uint %640
%642 = OpULessThan %bool %639 %641
OpSelectionMerge %643 None
OpBranchConditional %642 %644 %643
%644 = OpLabel
%645 = OpIAdd %uint %616 %uint_16
%646 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %645
%647 = OpCompositeExtract %float %605 2
OpStore %646 %647
OpBranch %643
%643 = OpLabel
%648 = OpIMul %uint %603 %uint_32
%649 = OpIAdd %uint %648 %604
%650 = OpIAdd %uint %649 %uint_24
%651 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%652 = OpLoad %uint %651
%653 = OpULessThan %bool %650 %652
OpSelectionMerge %654 None
OpBranchConditional %653 %655 %654
%655 = OpLabel
%656 = OpIAdd %uint %616 %uint_24
%657 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %656
%658 = OpCompositeExtract %float %605 3
OpStore %657 %658
OpBranch %654
%654 = OpLabel
OpBranch %608
%608 = OpLabel
OpReturn
OpFunctionEnd
; SPIR-V
; Version: 1.3
; Generator: Khronos; 0
; Bound: 715
; Schema: 0
OpCapability Shader
OpCapability DotProduct
OpCapability DotProductInput4x8BitPacked
OpExtension "SPV_KHR_integer_dot_product"
%415 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %60 "main" %gl_LocalInvocationID %gl_WorkGroupID
OpExecutionMode %60 LocalSize 256 1 1
OpDecorate %_runtimearr_uint ArrayStride 4
OpDecorate %_struct_3 Block
OpMemberDecorate %_struct_3 0 Offset 0
OpDecorate %5 DescriptorSet 0
OpDecorate %5 Binding 0
OpDecorate %6 DescriptorSet 0
OpDecorate %6 Binding 1
OpDecorate %7 DescriptorSet 0
OpDecorate %7 Binding 2
OpDecorate %8 DescriptorSet 0
OpDecorate %8 Binding 3
OpDecorate %_runtimearr_float ArrayStride 4
OpDecorate %_struct_11 Block
OpMemberDecorate %_struct_11 0 Offset 0
OpDecorate %13 DescriptorSet 0
OpDecorate %13 Binding 4
OpDecorate %14 DescriptorSet 0
OpDecorate %14 Binding 5
OpDecorate %_struct_15 Block
OpMemberDecorate %_struct_15 0 Offset 0
OpMemberDecorate %_struct_15 1 Offset 4
OpMemberDecorate %_struct_15 2 Offset 8
OpDecorate %gl_LocalInvocationID BuiltIn LocalInvocationId
OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId
%uint = OpTypeInt 32 0
%_runtimearr_uint = OpTypeRuntimeArray %uint
%_struct_3 = OpTypeStruct %_runtimearr_uint
%_ptr_StorageBuffer__struct_3 = OpTypePointer StorageBuffer %_struct_3
%5 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%6 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%7 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%8 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%float = OpTypeFloat 32
%_runtimearr_float = OpTypeRuntimeArray %float
%_struct_11 = OpTypeStruct %_runtimearr_float
%_ptr_StorageBuffer__struct_11 = OpTypePointer StorageBuffer %_struct_11
%13 = OpVariable %_ptr_StorageBuffer__struct_11 StorageBuffer
%14 = OpVariable %_ptr_StorageBuffer__struct_11 StorageBuffer
%_struct_15 = OpTypeStruct %uint %uint %uint
%_ptr_PushConstant__struct_15 = OpTypePointer PushConstant %_struct_15
%17 = OpVariable %_ptr_PushConstant__struct_15 PushConstant
%v4uint = OpTypeVector %uint 4
%uint_544 = OpConstant %uint 544
%_arr_v4uint_uint_544 = OpTypeArray %v4uint %uint_544
%_ptr_Workgroup__arr_v4uint_uint_544 = OpTypePointer Workgroup %_arr_v4uint_uint_544
%22 = OpVariable %_ptr_Workgroup__arr_v4uint_uint_544 Workgroup
%23 = OpVariable %_ptr_Workgroup__arr_v4uint_uint_544 Workgroup
%uint_256 = OpConstant %uint 256
%_arr_float_uint_256 = OpTypeArray %float %uint_256
%_ptr_Workgroup__arr_float_uint_256 = OpTypePointer Workgroup %_arr_float_uint_256
%27 = OpVariable %_ptr_Workgroup__arr_float_uint_256 Workgroup
%28 = OpVariable %_ptr_Workgroup__arr_float_uint_256 Workgroup
%29 = OpVariable %_ptr_Workgroup__arr_float_uint_256 Workgroup
%void = OpTypeVoid
%32 = OpTypeFunction %void
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%gl_LocalInvocationID = OpVariable %_ptr_Input_v3uint Input
%37 = OpTypeFunction %v4uint
%gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input
%40 = OpTypeFunction %void %uint %uint %uint %uint %uint %uint %uint
%42 = OpTypeFunction %void %uint %uint %uint %uint %uint %uint
%44 = OpTypeFunction %uint %uint
%47 = OpTypeFunction %void %uint %uint %uint %uint %uint
%v4float = OpTypeVector %float 4
%51 = OpTypeFunction %v4float %uint %uint %uint %float
%int = OpTypeInt 32 1
%v4int = OpTypeVector %int 4
%_ptr_Function_v4int = OpTypePointer Function %v4int
%57 = OpTypeFunction %int %uint %uint %uint %_ptr_Function_v4int
%59 = OpTypeFunction %void %uint %uint %uint %uint %uint %v4float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_uint = OpTypePointer Function %uint
%_ptr_Function_int = OpTypePointer Function %int
%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint
%uint_1 = OpConstant %uint 1
%uint_31 = OpConstant %uint 31
%uint_32 = OpConstant %uint 32
%uint_0 = OpConstant %uint 0
%_ptr_Input_uint = OpTypePointer Input %uint
%uint_8 = OpConstant %uint 8
%float_0 = OpConstant %float 0
%100 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%bool = OpTypeBool
%uint_2 = OpConstant %uint 2
%uint_264 = OpConstant %uint 264
%_ptr_Workgroup_float = OpTypePointer Workgroup %float
%int_0 = OpConstant %int 0
%int_8 = OpConstant %int 8
%int_1 = OpConstant %int 1
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
%uint_4 = OpConstant %uint 4
%uint_3 = OpConstant %uint 3
%_ptr_Function_v4uint = OpTypePointer Function %v4uint
%int_2 = OpConstant %int 2
%195 = OpConstantComposite %v4uint %uint_0 %uint_0 %uint_0 %uint_0
%uint_64 = OpConstant %uint 64
%uint_17 = OpConstant %uint 17
%_ptr_Workgroup_v4uint = OpTypePointer Workgroup %v4uint
%uint_40 = OpConstant %uint 40
%uint_255 = OpConstant %uint 255
%uint_16 = OpConstant %uint 16
%uint_24 = OpConstant %uint 24
%uint_252645135 = OpConstant %uint 252645135
%uint_15 = OpConstant %uint 15
%uint_11 = OpConstant %uint 11
%uint_18 = OpConstant %uint 18
%uint_25 = OpConstant %uint 25
%_ptr_Function_float = OpTypePointer Function %float
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
%uint_5 = OpConstant %uint 5
%v2float = OpTypeVector %float 2
%467 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%uint_16843009 = OpConstant %uint 16843009
%60 = OpFunction %void None %32
%61 = OpLabel
%62 = OpFunctionCall %void %31
OpReturn
OpFunctionEnd
%31 = OpFunction %void None %32
%63 = OpLabel
%65 = OpVariable %_ptr_Function_v4float Function
%67 = OpVariable %_ptr_Function_uint Function
%69 = OpVariable %_ptr_Function_int Function
%70 = OpFunctionCall %v4uint %36
%71 = OpCompositeExtract %uint %70 0
%72 = OpCompositeExtract %uint %70 1
%73 = OpCompositeExtract %uint %70 2
%74 = OpCompositeExtract %uint %70 3
%76 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%78 = OpLoad %uint %76
%80 = OpIAdd %uint %78 %uint_31
%82 = OpUDiv %uint %80 %uint_32
%83 = OpUDiv %uint %74 %82
%84 = OpUMod %uint %74 %82
%85 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_0
%87 = OpLoad %uint %85
%88 = OpUDiv %uint %87 %uint_256
%90 = OpAccessChain %_ptr_Input_uint %gl_LocalInvocationID %uint_0
%91 = OpLoad %uint %90
%93 = OpUMod %uint %91 %uint_8
%94 = OpUDiv %uint %91 %uint_8
%95 = OpIMul %uint %83 %uint_32
%96 = OpIAdd %uint %95 %94
%97 = OpIMul %uint %84 %uint_32
%98 = OpIAdd %uint %97 %94
OpStore %65 %100
OpStore %67 %uint_0
OpBranch %101
%101 = OpLabel
OpLoopMerge %105 %104 None
OpBranch %102
%102 = OpLabel
%106 = OpLoad %uint %67
%108 = OpULessThan %bool %106 %88
OpBranchConditional %108 %103 %105
%103 = OpLabel
%109 = OpLoad %uint %67
%110 = OpFunctionCall %void %39 %72 %96 %73 %88 %109 %93 %94
%111 = OpLoad %uint %67
%112 = OpFunctionCall %void %41 %71 %98 %88 %111 %93 %94
%113 = OpLoad %uint %67
%114 = OpFunctionCall %void %45 %72 %83 %73 %88 %113 %91
%115 = OpLoad %uint %67
%116 = OpFunctionCall %void %46 %71 %84 %88 %115 %91
OpControlBarrier %uint_2 %uint_2 %uint_264
%119 = OpAccessChain %_ptr_Workgroup_float %27 %94
%121 = OpLoad %float %119
OpStore %69 %int_0
OpBranch %124
%124 = OpLabel
OpLoopMerge %128 %127 None
OpBranch %125
%125 = OpLabel
%129 = OpLoad %int %69
%130 = OpSLessThan %bool %129 %int_8
OpBranchConditional %130 %126 %128
%126 = OpLabel
%131 = OpLoad %int %69
%132 = OpBitcast %uint %131
%133 = OpFunctionCall %v4float %50 %132 %94 %93 %121
%134 = OpLoad %v4float %65
%135 = OpFAdd %v4float %134 %133
OpStore %65 %135
OpBranch %127
%127 = OpLabel
%136 = OpLoad %int %69
%137 = OpIAdd %int %136 %int_1
OpStore %69 %137
OpBranch %124
%128 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
%139 = OpLoad %uint %67
%140 = OpIAdd %uint %139 %uint_1
OpStore %67 %140
OpBranch %104
%104 = OpLabel
OpBranch %101
%105 = OpLabel
%141 = OpLoad %v4float %65
%142 = OpFunctionCall %void %58 %96 %73 %72 %84 %93 %141
OpReturn
OpFunctionEnd
%36 = OpFunction %v4uint None %37
%143 = OpLabel
%144 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_2
%145 = OpLoad %uint %144
%146 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_0
%147 = OpLoad %uint %146
%148 = OpIAdd %uint %145 %147
%149 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %148
%151 = OpLoad %uint %149
%153 = OpIMul %uint %151 %uint_4
%154 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %153
%155 = OpLoad %uint %154
%156 = OpIAdd %uint %153 %uint_1
%157 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %156
%158 = OpLoad %uint %157
%159 = OpIAdd %uint %153 %uint_2
%160 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %159
%161 = OpLoad %uint %160
%162 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_0
%163 = OpLoad %uint %162
%165 = OpIAdd %uint %153 %uint_3
%166 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %165
%167 = OpLoad %uint %166
%168 = OpISub %uint %163 %167
%169 = OpCompositeConstruct %v4uint %155 %158 %161 %168
OpReturnValue %169
OpFunctionEnd
%39 = OpFunction %void None %40
%170 = OpFunctionParameter %uint
%171 = OpFunctionParameter %uint
%172 = OpFunctionParameter %uint
%173 = OpFunctionParameter %uint
%174 = OpFunctionParameter %uint
%175 = OpFunctionParameter %uint
%176 = OpFunctionParameter %uint
%177 = OpLabel
%178 = OpVariable %_ptr_Function_int Function
%180 = OpVariable %_ptr_Function_v4uint Function
OpStore %178 %int_0
OpBranch %182
%182 = OpLabel
OpLoopMerge %186 %185 None
OpBranch %183
%183 = OpLabel
%187 = OpLoad %int %178
%188 = OpSLessThan %bool %187 %int_2
OpBranchConditional %188 %184 %186
%184 = OpLabel
%189 = OpLoad %int %178
%190 = OpBitcast %uint %189
%191 = OpIMul %uint %190 %uint_8
%192 = OpIAdd %uint %175 %191
%193 = OpUDiv %uint %192 %uint_2
%194 = OpUMod %uint %192 %uint_2
OpStore %180 %195
%196 = OpULessThan %bool %171 %172
OpSelectionMerge %197 None
OpBranchConditional %196 %198 %197
%198 = OpLabel
%199 = OpIAdd %uint %170 %171
%200 = OpIMul %uint %199 %173
%201 = OpIAdd %uint %200 %174
%203 = OpIMul %uint %201 %uint_64
%204 = OpIMul %uint %193 %uint_8
%205 = OpIAdd %uint %203 %204
%206 = OpIMul %uint %194 %uint_4
%207 = OpIAdd %uint %205 %206
%208 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %207
%209 = OpLoad %uint %208
%210 = OpIAdd %uint %207 %uint_1
%211 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %210
%212 = OpLoad %uint %211
%213 = OpIAdd %uint %207 %uint_2
%214 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %213
%215 = OpLoad %uint %214
%216 = OpIAdd %uint %207 %uint_3
%217 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %216
%218 = OpLoad %uint %217
%219 = OpCompositeConstruct %v4uint %209 %212 %215 %218
OpStore %180 %219
OpBranch %197
%197 = OpLabel
%221 = OpIMul %uint %176 %uint_17
%222 = OpIAdd %uint %221 %192
%223 = OpAccessChain %_ptr_Workgroup_v4uint %22 %222
%225 = OpLoad %v4uint %180
OpStore %223 %225
OpBranch %185
%185 = OpLabel
%226 = OpLoad %int %178
%227 = OpIAdd %int %226 %int_1
OpStore %178 %227
OpBranch %182
%186 = OpLabel
OpReturn
OpFunctionEnd
%41 = OpFunction %void None %42
%228 = OpFunctionParameter %uint
%229 = OpFunctionParameter %uint
%230 = OpFunctionParameter %uint
%231 = OpFunctionParameter %uint
%232 = OpFunctionParameter %uint
%233 = OpFunctionParameter %uint
%234 = OpLabel
%235 = OpVariable %_ptr_Function_int Function
%236 = OpVariable %_ptr_Function_v4uint Function
OpStore %235 %int_0
OpBranch %237
%237 = OpLabel
OpLoopMerge %241 %240 None
OpBranch %238
%238 = OpLabel
%242 = OpLoad %int %235
%243 = OpSLessThan %bool %242 %int_2
OpBranchConditional %243 %239 %241
%239 = OpLabel
%244 = OpLoad %int %235
%245 = OpBitcast %uint %244
%246 = OpIMul %uint %245 %uint_8
%247 = OpIAdd %uint %232 %246
%248 = OpUDiv %uint %247 %uint_2
%249 = OpUMod %uint %247 %uint_2
OpStore %236 %195
%250 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%251 = OpLoad %uint %250
%252 = OpULessThan %bool %229 %251
OpSelectionMerge %253 None
OpBranchConditional %252 %254 %253
%254 = OpLabel
%255 = OpIMul %uint %229 %230
%256 = OpIAdd %uint %228 %255
%257 = OpIAdd %uint %256 %231
%259 = OpIMul %uint %257 %uint_40
%260 = OpIMul %uint %248 %uint_4
%261 = OpIAdd %uint %259 %260
%262 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %261
%263 = OpLoad %uint %262
%264 = OpIAdd %uint %261 %uint_1
%265 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %264
%266 = OpLoad %uint %265
%267 = OpIAdd %uint %261 %uint_2
%268 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %267
%269 = OpLoad %uint %268
%270 = OpIAdd %uint %261 %uint_3
%271 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %270
%272 = OpLoad %uint %271
%273 = OpIMul %uint %257 %uint_40
%274 = OpIAdd %uint %273 %uint_32
%275 = OpIAdd %uint %274 %248
%276 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %275
%277 = OpLoad %uint %276
%279 = OpBitwiseAnd %uint %277 %uint_255
%280 = OpShiftRightLogical %uint %277 %uint_8
%281 = OpBitwiseAnd %uint %280 %uint_255
%283 = OpShiftRightLogical %uint %277 %uint_16
%284 = OpBitwiseAnd %uint %283 %uint_255
%286 = OpShiftRightLogical %uint %277 %uint_24
%287 = OpBitwiseAnd %uint %286 %uint_255
%288 = OpIEqual %bool %249 %uint_0
OpSelectionMerge %289 None
OpBranchConditional %288 %290 %291
%290 = OpLabel
%293 = OpBitwiseAnd %uint %263 %uint_252645135
%295 = OpBitwiseAnd %uint %279 %uint_15
%296 = OpFunctionCall %uint %43 %295
%297 = OpBitwiseOr %uint %293 %296
%298 = OpBitwiseAnd %uint %266 %uint_252645135
%299 = OpBitwiseAnd %uint %281 %uint_15
%300 = OpFunctionCall %uint %43 %299
%301 = OpBitwiseOr %uint %298 %300
%302 = OpBitwiseAnd %uint %269 %uint_252645135
%303 = OpBitwiseAnd %uint %284 %uint_15
%304 = OpFunctionCall %uint %43 %303
%305 = OpBitwiseOr %uint %302 %304
%306 = OpBitwiseAnd %uint %272 %uint_252645135
%307 = OpBitwiseAnd %uint %287 %uint_15
%308 = OpFunctionCall %uint %43 %307
%309 = OpBitwiseOr %uint %306 %308
%310 = OpCompositeConstruct %v4uint %297 %301 %305 %309
OpStore %236 %310
OpBranch %289
%291 = OpLabel
%311 = OpShiftRightLogical %uint %263 %uint_4
%312 = OpBitwiseAnd %uint %311 %uint_252645135
%313 = OpShiftRightLogical %uint %279 %uint_4
%314 = OpFunctionCall %uint %43 %313
%315 = OpBitwiseOr %uint %312 %314
%316 = OpShiftRightLogical %uint %266 %uint_4
%317 = OpBitwiseAnd %uint %316 %uint_252645135
%318 = OpShiftRightLogical %uint %281 %uint_4
%319 = OpFunctionCall %uint %43 %318
%320 = OpBitwiseOr %uint %317 %319
%321 = OpShiftRightLogical %uint %269 %uint_4
%322 = OpBitwiseAnd %uint %321 %uint_252645135
%323 = OpShiftRightLogical %uint %284 %uint_4
%324 = OpFunctionCall %uint %43 %323
%325 = OpBitwiseOr %uint %322 %324
%326 = OpShiftRightLogical %uint %272 %uint_4
%327 = OpBitwiseAnd %uint %326 %uint_252645135
%328 = OpShiftRightLogical %uint %287 %uint_4
%329 = OpFunctionCall %uint %43 %328
%330 = OpBitwiseOr %uint %327 %329
%331 = OpCompositeConstruct %v4uint %315 %320 %325 %330
OpStore %236 %331
OpBranch %289
%289 = OpLabel
OpBranch %253
%253 = OpLabel
%332 = OpIMul %uint %233 %uint_17
%333 = OpIAdd %uint %332 %247
%334 = OpAccessChain %_ptr_Workgroup_v4uint %23 %333
%335 = OpLoad %v4uint %236
OpStore %334 %335
OpBranch %240
%240 = OpLabel
%336 = OpLoad %int %235
%337 = OpIAdd %int %336 %int_1
OpStore %235 %337
OpBranch %237
%241 = OpLabel
OpReturn
OpFunctionEnd
%43 = OpFunction %uint None %44
%338 = OpFunctionParameter %uint
%339 = OpLabel
%340 = OpBitwiseAnd %uint %338 %uint_1
%341 = OpShiftLeftLogical %uint %340 %uint_4
%342 = OpBitwiseAnd %uint %338 %uint_2
%344 = OpShiftLeftLogical %uint %342 %uint_11
%345 = OpBitwiseOr %uint %341 %344
%346 = OpBitwiseAnd %uint %338 %uint_4
%348 = OpShiftLeftLogical %uint %346 %uint_18
%349 = OpBitwiseOr %uint %345 %348
%350 = OpBitwiseAnd %uint %338 %uint_8
%352 = OpShiftLeftLogical %uint %350 %uint_25
%353 = OpBitwiseOr %uint %349 %352
OpReturnValue %353
OpFunctionEnd
%45 = OpFunction %void None %42
%354 = OpFunctionParameter %uint
%355 = OpFunctionParameter %uint
%356 = OpFunctionParameter %uint
%357 = OpFunctionParameter %uint
%358 = OpFunctionParameter %uint
%359 = OpFunctionParameter %uint
%360 = OpLabel
%362 = OpVariable %_ptr_Function_float Function
%363 = OpULessThan %bool %359 %uint_32
OpSelectionMerge %364 None
OpBranchConditional %363 %365 %364
%365 = OpLabel
OpStore %362 %float_0
%366 = OpIMul %uint %355 %uint_32
%367 = OpIAdd %uint %366 %359
%368 = OpULessThan %bool %367 %356
OpSelectionMerge %369 None
OpBranchConditional %368 %370 %369
%370 = OpLabel
%371 = OpIMul %uint %355 %uint_32
%372 = OpIAdd %uint %354 %371
%373 = OpIAdd %uint %372 %359
%374 = OpIMul %uint %373 %357
%375 = OpIAdd %uint %374 %358
%376 = OpAccessChain %_ptr_StorageBuffer_float %13 %uint_0 %375
%378 = OpLoad %float %376
OpStore %362 %378
OpBranch %369
%369 = OpLabel
%379 = OpAccessChain %_ptr_Workgroup_float %27 %359
%380 = OpLoad %float %362
OpStore %379 %380
OpBranch %364
%364 = OpLabel
OpReturn
OpFunctionEnd
%46 = OpFunction %void None %47
%381 = OpFunctionParameter %uint
%382 = OpFunctionParameter %uint
%383 = OpFunctionParameter %uint
%384 = OpFunctionParameter %uint
%385 = OpFunctionParameter %uint
%386 = OpLabel
%387 = OpUMod %uint %385 %uint_32
%388 = OpUDiv %uint %385 %uint_32
%389 = OpFunctionCall %void %48 %381 %382 %383 %384 %387 %388
OpReturn
OpFunctionEnd
%48 = OpFunction %void None %42
%390 = OpFunctionParameter %uint
%391 = OpFunctionParameter %uint
%392 = OpFunctionParameter %uint
%393 = OpFunctionParameter %uint
%394 = OpFunctionParameter %uint
%395 = OpFunctionParameter %uint
%396 = OpLabel
%397 = OpVariable %_ptr_Function_float Function
%398 = OpVariable %_ptr_Function_float Function
OpStore %397 %float_0
OpStore %398 %float_0
%399 = OpIMul %uint %391 %uint_32
%400 = OpIAdd %uint %399 %394
%401 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%402 = OpLoad %uint %401
%403 = OpULessThan %bool %400 %402
OpSelectionMerge %404 None
OpBranchConditional %403 %405 %404
%405 = OpLabel
%406 = OpIMul %uint %391 %uint_32
%407 = OpIAdd %uint %406 %394
%408 = OpIMul %uint %407 %392
%409 = OpIAdd %uint %390 %408
%410 = OpIAdd %uint %409 %393
%412 = OpIMul %uint %410 %uint_5
%413 = OpAccessChain %_ptr_StorageBuffer_uint %6 %uint_0 %412
%414 = OpLoad %uint %413
%417 = OpExtInst %v2float %415 UnpackHalf2x16 %414
%418 = OpIMul %uint %410 %uint_5
%419 = OpIAdd %uint %418 %uint_1
%420 = OpUDiv %uint %395 %uint_4
%421 = OpIAdd %uint %419 %420
%422 = OpAccessChain %_ptr_StorageBuffer_uint %6 %uint_0 %421
%423 = OpLoad %uint %422
%424 = OpUMod %uint %395 %uint_4
%425 = OpIMul %uint %424 %uint_8
%426 = OpShiftRightLogical %uint %423 %425
%427 = OpBitwiseAnd %uint %426 %uint_255
%428 = OpBitcast %int %427
%429 = OpIMul %uint %410 %uint_5
%430 = OpIAdd %uint %429 %uint_3
%431 = OpUDiv %uint %395 %uint_4
%432 = OpIAdd %uint %430 %431
%433 = OpAccessChain %_ptr_StorageBuffer_uint %6 %uint_0 %432
%434 = OpLoad %uint %433
%435 = OpUMod %uint %395 %uint_4
%436 = OpIMul %uint %435 %uint_8
%437 = OpShiftRightLogical %uint %434 %436
%438 = OpBitwiseAnd %uint %437 %uint_255
%439 = OpBitcast %int %438
%440 = OpCompositeExtract %float %417 0
%441 = OpConvertSToF %float %428
%442 = OpFMul %float %440 %441
OpStore %397 %442
%443 = OpCompositeExtract %float %417 1
%444 = OpConvertSToF %float %439
%445 = OpFMul %float %443 %444
OpStore %398 %445
OpBranch %404
%404 = OpLabel
%446 = OpIMul %uint %395 %uint_32
%447 = OpIAdd %uint %446 %394
%448 = OpAccessChain %_ptr_Workgroup_float %28 %447
%449 = OpLoad %float %397
OpStore %448 %449
%450 = OpIMul %uint %395 %uint_32
%451 = OpIAdd %uint %450 %394
%452 = OpAccessChain %_ptr_Workgroup_float %29 %451
%453 = OpLoad %float %398
OpStore %452 %453
OpReturn
OpFunctionEnd
%50 = OpFunction %v4float None %51
%454 = OpFunctionParameter %uint
%455 = OpFunctionParameter %uint
%456 = OpFunctionParameter %uint
%457 = OpFunctionParameter %float
%458 = OpLabel
%459 = OpFunctionCall %v4float %52 %454 %455 %456 %457
OpReturnValue %459
OpFunctionEnd
%52 = OpFunction %v4float None %51
%460 = OpFunctionParameter %uint
%461 = OpFunctionParameter %uint
%462 = OpFunctionParameter %uint
%463 = OpFunctionParameter %float
%464 = OpLabel
%465 = OpVariable %_ptr_Function_v4int Function
%466 = OpVariable %_ptr_Function_v4int Function
OpStore %465 %467
%469 = OpLoad %v4int %465
OpStore %466 %469
%468 = OpFunctionCall %int %56 %460 %461 %462 %466
%470 = OpLoad %v4int %466
OpStore %465 %470
%471 = OpIMul %uint %460 %uint_32
%472 = OpIAdd %uint %471 %462
%473 = OpAccessChain %_ptr_Workgroup_float %28 %472
%474 = OpLoad %float %473
%475 = OpIMul %uint %460 %uint_32
%476 = OpIAdd %uint %475 %462
%477 = OpIAdd %uint %476 %uint_8
%478 = OpAccessChain %_ptr_Workgroup_float %28 %477
%479 = OpLoad %float %478
%480 = OpIMul %uint %460 %uint_32
%481 = OpIAdd %uint %480 %462
%482 = OpIAdd %uint %481 %uint_16
%483 = OpAccessChain %_ptr_Workgroup_float %28 %482
%484 = OpLoad %float %483
%485 = OpIMul %uint %460 %uint_32
%486 = OpIAdd %uint %485 %462
%487 = OpIAdd %uint %486 %uint_24
%488 = OpAccessChain %_ptr_Workgroup_float %28 %487
%489 = OpLoad %float %488
%490 = OpCompositeConstruct %v4float %474 %479 %484 %489
%491 = OpIMul %uint %460 %uint_32
%492 = OpIAdd %uint %491 %462
%493 = OpAccessChain %_ptr_Workgroup_float %29 %492
%494 = OpLoad %float %493
%495 = OpIMul %uint %460 %uint_32
%496 = OpIAdd %uint %495 %462
%497 = OpIAdd %uint %496 %uint_8
%498 = OpAccessChain %_ptr_Workgroup_float %29 %497
%499 = OpLoad %float %498
%500 = OpIMul %uint %460 %uint_32
%501 = OpIAdd %uint %500 %462
%502 = OpIAdd %uint %501 %uint_16
%503 = OpAccessChain %_ptr_Workgroup_float %29 %502
%504 = OpLoad %float %503
%505 = OpIMul %uint %460 %uint_32
%506 = OpIAdd %uint %505 %462
%507 = OpIAdd %uint %506 %uint_24
%508 = OpAccessChain %_ptr_Workgroup_float %29 %507
%509 = OpLoad %float %508
%510 = OpCompositeConstruct %v4float %494 %499 %504 %509
%511 = OpLoad %v4int %465
%512 = OpConvertSToF %v4float %511
%513 = OpFMul %v4float %490 %512
%514 = OpConvertSToF %float %468
%515 = OpVectorTimesScalar %v4float %510 %514
%516 = OpFSub %v4float %513 %515
%517 = OpVectorTimesScalar %v4float %516 %463
OpReturnValue %517
OpFunctionEnd
%56 = OpFunction %int None %57
%518 = OpFunctionParameter %uint
%519 = OpFunctionParameter %uint
%520 = OpFunctionParameter %uint
%521 = OpFunctionParameter %_ptr_Function_v4int
%522 = OpLabel
%523 = OpVariable %_ptr_Function_int Function
%524 = OpVariable %_ptr_Function_int Function
OpStore %523 %int_0
OpStore %524 %int_0
OpBranch %525
%525 = OpLabel
OpLoopMerge %529 %528 None
OpBranch %526
%526 = OpLabel
%530 = OpLoad %int %524
%531 = OpSLessThan %bool %530 %int_2
OpBranchConditional %531 %527 %529
%527 = OpLabel
%532 = OpIMul %uint %518 %uint_2
%533 = OpLoad %int %524
%534 = OpBitcast %uint %533
%535 = OpIAdd %uint %532 %534
%536 = OpIMul %uint %519 %uint_17
%537 = OpIAdd %uint %536 %535
%538 = OpAccessChain %_ptr_Workgroup_v4uint %22 %537
%539 = OpLoad %v4uint %538
%540 = OpIMul %uint %520 %uint_17
%541 = OpIAdd %uint %540 %535
%542 = OpAccessChain %_ptr_Workgroup_v4uint %23 %541
%543 = OpLoad %v4uint %542
%544 = OpIAdd %uint %520 %uint_8
%545 = OpIMul %uint %544 %uint_17
%546 = OpIAdd %uint %545 %535
%547 = OpAccessChain %_ptr_Workgroup_v4uint %23 %546
%548 = OpLoad %v4uint %547
%549 = OpIAdd %uint %520 %uint_16
%550 = OpIMul %uint %549 %uint_17
%551 = OpIAdd %uint %550 %535
%552 = OpAccessChain %_ptr_Workgroup_v4uint %23 %551
%553 = OpLoad %v4uint %552
%554 = OpIAdd %uint %520 %uint_24
%555 = OpIMul %uint %554 %uint_17
%556 = OpIAdd %uint %555 %535
%557 = OpAccessChain %_ptr_Workgroup_v4uint %23 %556
%558 = OpLoad %v4uint %557
%559 = OpCompositeExtract %uint %539 0
%561 = OpSDot %int %559 %uint_16843009 PackedVectorFormat4x8Bit
%562 = OpCompositeExtract %uint %539 1
%563 = OpSDot %int %562 %uint_16843009 PackedVectorFormat4x8Bit
%564 = OpIAdd %int %561 %563
%565 = OpCompositeExtract %uint %539 2
%566 = OpSDot %int %565 %uint_16843009 PackedVectorFormat4x8Bit
%567 = OpIAdd %int %564 %566
%568 = OpCompositeExtract %uint %539 3
%569 = OpSDot %int %568 %uint_16843009 PackedVectorFormat4x8Bit
%570 = OpIAdd %int %567 %569
%571 = OpLoad %int %523
%572 = OpIAdd %int %571 %570
OpStore %523 %572
%573 = OpLoad %v4int %521
%574 = OpCompositeExtract %int %573 0
%575 = OpCompositeExtract %uint %543 0
%576 = OpCompositeExtract %uint %539 0
%577 = OpSDot %int %575 %576 PackedVectorFormat4x8Bit
%578 = OpCompositeExtract %uint %543 1
%579 = OpCompositeExtract %uint %539 1
%580 = OpSDot %int %578 %579 PackedVectorFormat4x8Bit
%581 = OpIAdd %int %577 %580
%582 = OpCompositeExtract %uint %543 2
%583 = OpCompositeExtract %uint %539 2
%584 = OpSDot %int %582 %583 PackedVectorFormat4x8Bit
%585 = OpIAdd %int %581 %584
%586 = OpCompositeExtract %uint %543 3
%587 = OpCompositeExtract %uint %539 3
%588 = OpSDot %int %586 %587 PackedVectorFormat4x8Bit
%589 = OpIAdd %int %585 %588
%590 = OpAccessChain %_ptr_Function_int %521 %uint_0
%591 = OpLoad %int %590
%592 = OpIAdd %int %591 %589
OpStore %590 %592
%593 = OpLoad %v4int %521
%594 = OpCompositeExtract %int %593 1
%595 = OpCompositeExtract %uint %548 0
%596 = OpCompositeExtract %uint %539 0
%597 = OpSDot %int %595 %596 PackedVectorFormat4x8Bit
%598 = OpCompositeExtract %uint %548 1
%599 = OpCompositeExtract %uint %539 1
%600 = OpSDot %int %598 %599 PackedVectorFormat4x8Bit
%601 = OpIAdd %int %597 %600
%602 = OpCompositeExtract %uint %548 2
%603 = OpCompositeExtract %uint %539 2
%604 = OpSDot %int %602 %603 PackedVectorFormat4x8Bit
%605 = OpIAdd %int %601 %604
%606 = OpCompositeExtract %uint %548 3
%607 = OpCompositeExtract %uint %539 3
%608 = OpSDot %int %606 %607 PackedVectorFormat4x8Bit
%609 = OpIAdd %int %605 %608
%610 = OpAccessChain %_ptr_Function_int %521 %uint_1
%611 = OpLoad %int %610
%612 = OpIAdd %int %611 %609
OpStore %610 %612
%613 = OpLoad %v4int %521
%614 = OpCompositeExtract %int %613 2
%615 = OpCompositeExtract %uint %553 0
%616 = OpCompositeExtract %uint %539 0
%617 = OpSDot %int %615 %616 PackedVectorFormat4x8Bit
%618 = OpCompositeExtract %uint %553 1
%619 = OpCompositeExtract %uint %539 1
%620 = OpSDot %int %618 %619 PackedVectorFormat4x8Bit
%621 = OpIAdd %int %617 %620
%622 = OpCompositeExtract %uint %553 2
%623 = OpCompositeExtract %uint %539 2
%624 = OpSDot %int %622 %623 PackedVectorFormat4x8Bit
%625 = OpIAdd %int %621 %624
%626 = OpCompositeExtract %uint %553 3
%627 = OpCompositeExtract %uint %539 3
%628 = OpSDot %int %626 %627 PackedVectorFormat4x8Bit
%629 = OpIAdd %int %625 %628
%630 = OpAccessChain %_ptr_Function_int %521 %uint_2
%631 = OpLoad %int %630
%632 = OpIAdd %int %631 %629
OpStore %630 %632
%633 = OpLoad %v4int %521
%634 = OpCompositeExtract %int %633 3
%635 = OpCompositeExtract %uint %558 0
%636 = OpCompositeExtract %uint %539 0
%637 = OpSDot %int %635 %636 PackedVectorFormat4x8Bit
%638 = OpCompositeExtract %uint %558 1
%639 = OpCompositeExtract %uint %539 1
%640 = OpSDot %int %638 %639 PackedVectorFormat4x8Bit
%641 = OpIAdd %int %637 %640
%642 = OpCompositeExtract %uint %558 2
%643 = OpCompositeExtract %uint %539 2
%644 = OpSDot %int %642 %643 PackedVectorFormat4x8Bit
%645 = OpIAdd %int %641 %644
%646 = OpCompositeExtract %uint %558 3
%647 = OpCompositeExtract %uint %539 3
%648 = OpSDot %int %646 %647 PackedVectorFormat4x8Bit
%649 = OpIAdd %int %645 %648
%650 = OpAccessChain %_ptr_Function_int %521 %uint_3
%651 = OpLoad %int %650
%652 = OpIAdd %int %651 %649
OpStore %650 %652
OpBranch %528
%528 = OpLabel
%653 = OpLoad %int %524
%654 = OpIAdd %int %653 %int_1
OpStore %524 %654
OpBranch %525
%529 = OpLabel
%655 = OpLoad %int %523
OpReturnValue %655
OpFunctionEnd
%58 = OpFunction %void None %59
%656 = OpFunctionParameter %uint
%657 = OpFunctionParameter %uint
%658 = OpFunctionParameter %uint
%659 = OpFunctionParameter %uint
%660 = OpFunctionParameter %uint
%661 = OpFunctionParameter %v4float
%662 = OpLabel
%663 = OpULessThan %bool %656 %657
OpSelectionMerge %664 None
OpBranchConditional %663 %665 %664
%665 = OpLabel
%666 = OpIAdd %uint %658 %656
%667 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%668 = OpLoad %uint %667
%669 = OpIMul %uint %666 %668
%670 = OpIMul %uint %659 %uint_32
%671 = OpIAdd %uint %669 %670
%672 = OpIAdd %uint %671 %660
%673 = OpIMul %uint %659 %uint_32
%674 = OpIAdd %uint %673 %660
%675 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%676 = OpLoad %uint %675
%677 = OpULessThan %bool %674 %676
OpSelectionMerge %678 None
OpBranchConditional %677 %679 %678
%679 = OpLabel
%680 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %672
%681 = OpCompositeExtract %float %661 0
OpStore %680 %681
OpBranch %678
%678 = OpLabel
%682 = OpIMul %uint %659 %uint_32
%683 = OpIAdd %uint %682 %660
%684 = OpIAdd %uint %683 %uint_8
%685 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%686 = OpLoad %uint %685
%687 = OpULessThan %bool %684 %686
OpSelectionMerge %688 None
OpBranchConditional %687 %689 %688
%689 = OpLabel
%690 = OpIAdd %uint %672 %uint_8
%691 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %690
%692 = OpCompositeExtract %float %661 1
OpStore %691 %692
OpBranch %688
%688 = OpLabel
%693 = OpIMul %uint %659 %uint_32
%694 = OpIAdd %uint %693 %660
%695 = OpIAdd %uint %694 %uint_16
%696 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%697 = OpLoad %uint %696
%698 = OpULessThan %bool %695 %697
OpSelectionMerge %699 None
OpBranchConditional %698 %700 %699
%700 = OpLabel
%701 = OpIAdd %uint %672 %uint_16
%702 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %701
%703 = OpCompositeExtract %float %661 2
OpStore %702 %703
OpBranch %699
%699 = OpLabel
%704 = OpIMul %uint %659 %uint_32
%705 = OpIAdd %uint %704 %660
%706 = OpIAdd %uint %705 %uint_24
%707 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%708 = OpLoad %uint %707
%709 = OpULessThan %bool %706 %708
OpSelectionMerge %710 None
OpBranchConditional %709 %711 %710
%711 = OpLabel
%712 = OpIAdd %uint %672 %uint_24
%713 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %712
%714 = OpCompositeExtract %float %661 3
OpStore %713 %714
OpBranch %710
%710 = OpLabel
OpBranch %664
%664 = OpLabel
OpReturn
OpFunctionEnd
; SPIR-V
; Version: 1.3
; Generator: Khronos; 0
; Bound: 772
; Schema: 0
OpCapability Shader
OpCapability Int8
OpCapability DotProduct
OpCapability DotProductInput4x8BitPacked
OpExtension "SPV_KHR_integer_dot_product"
%418 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %51 "main" %gl_LocalInvocationID %gl_WorkGroupID
OpExecutionMode %51 LocalSize 256 1 1
OpDecorate %_runtimearr_uint ArrayStride 4
OpDecorate %_struct_3 Block
OpMemberDecorate %_struct_3 0 Offset 0
OpDecorate %5 DescriptorSet 0
OpDecorate %5 Binding 0
OpDecorate %6 DescriptorSet 0
OpDecorate %6 Binding 1
OpDecorate %7 DescriptorSet 0
OpDecorate %7 Binding 2
OpDecorate %8 DescriptorSet 0
OpDecorate %8 Binding 3
OpDecorate %_runtimearr_float ArrayStride 4
OpDecorate %_struct_11 Block
OpMemberDecorate %_struct_11 0 Offset 0
OpDecorate %13 DescriptorSet 0
OpDecorate %13 Binding 4
OpDecorate %14 DescriptorSet 0
OpDecorate %14 Binding 5
OpDecorate %_struct_15 Block
OpMemberDecorate %_struct_15 0 Offset 0
OpMemberDecorate %_struct_15 1 Offset 4
OpMemberDecorate %_struct_15 2 Offset 8
OpDecorate %gl_LocalInvocationID BuiltIn LocalInvocationId
OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId
%uint = OpTypeInt 32 0
%_runtimearr_uint = OpTypeRuntimeArray %uint
%_struct_3 = OpTypeStruct %_runtimearr_uint
%_ptr_StorageBuffer__struct_3 = OpTypePointer StorageBuffer %_struct_3
%5 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%6 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%7 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%8 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%float = OpTypeFloat 32
%_runtimearr_float = OpTypeRuntimeArray %float
%_struct_11 = OpTypeStruct %_runtimearr_float
%_ptr_StorageBuffer__struct_11 = OpTypePointer StorageBuffer %_struct_11
%13 = OpVariable %_ptr_StorageBuffer__struct_11 StorageBuffer
%14 = OpVariable %_ptr_StorageBuffer__struct_11 StorageBuffer
%_struct_15 = OpTypeStruct %uint %uint %uint
%_ptr_PushConstant__struct_15 = OpTypePointer PushConstant %_struct_15
%17 = OpVariable %_ptr_PushConstant__struct_15 PushConstant
%v4uint = OpTypeVector %uint 4
%uint_544 = OpConstant %uint 544
%_arr_v4uint_uint_544 = OpTypeArray %v4uint %uint_544
%_ptr_Workgroup__arr_v4uint_uint_544 = OpTypePointer Workgroup %_arr_v4uint_uint_544
%22 = OpVariable %_ptr_Workgroup__arr_v4uint_uint_544 Workgroup
%23 = OpVariable %_ptr_Workgroup__arr_v4uint_uint_544 Workgroup
%uint_256 = OpConstant %uint 256
%_arr_float_uint_256 = OpTypeArray %float %uint_256
%_ptr_Workgroup__arr_float_uint_256 = OpTypePointer Workgroup %_arr_float_uint_256
%27 = OpVariable %_ptr_Workgroup__arr_float_uint_256 Workgroup
%28 = OpVariable %_ptr_Workgroup__arr_float_uint_256 Workgroup
%29 = OpVariable %_ptr_Workgroup__arr_float_uint_256 Workgroup
%void = OpTypeVoid
%32 = OpTypeFunction %void
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%gl_LocalInvocationID = OpVariable %_ptr_Input_v3uint Input
%37 = OpTypeFunction %v4uint
%gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input
%40 = OpTypeFunction %void %uint %uint %uint %uint %uint %uint %uint
%42 = OpTypeFunction %void %uint %uint %uint %uint %uint %uint
%45 = OpTypeFunction %void %uint %uint %uint %uint %uint
%v4float = OpTypeVector %float 4
%48 = OpTypeFunction %v4float %uint %uint %uint %float
%50 = OpTypeFunction %void %uint %uint %uint %uint %uint %v4float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_uint = OpTypePointer Function %uint
%int = OpTypeInt 32 1
%_ptr_Function_int = OpTypePointer Function %int
%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint
%uint_1 = OpConstant %uint 1
%uint_31 = OpConstant %uint 31
%uint_32 = OpConstant %uint 32
%uint_0 = OpConstant %uint 0
%_ptr_Input_uint = OpTypePointer Input %uint
%uint_8 = OpConstant %uint 8
%float_0 = OpConstant %float 0
%92 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%bool = OpTypeBool
%uint_2 = OpConstant %uint 2
%uint_264 = OpConstant %uint 264
%_ptr_Workgroup_float = OpTypePointer Workgroup %float
%int_0 = OpConstant %int 0
%int_8 = OpConstant %int 8
%int_1 = OpConstant %int 1
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
%uint_4 = OpConstant %uint 4
%uint_3 = OpConstant %uint 3
%_ptr_Function_v4uint = OpTypePointer Function %v4uint
%int_2 = OpConstant %int 2
%187 = OpConstantComposite %v4uint %uint_0 %uint_0 %uint_0 %uint_0
%uint_64 = OpConstant %uint 64
%uint_17 = OpConstant %uint 17
%_ptr_Workgroup_v4uint = OpTypePointer Workgroup %v4uint
%uint_48 = OpConstant %uint 48
%uint_252645135 = OpConstant %uint 252645135
%uint_50529027 = OpConstant %uint 50529027
%_ptr_Function_float = OpTypePointer Function %float
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
%uint_5 = OpConstant %uint 5
%char = OpTypeInt 8 1
%v4char = OpTypeVector %char 4
%v4int = OpTypeVector %int 4
%v2float = OpTypeVector %float 2
%uint_16843009 = OpConstant %uint 16843009
%uint_16 = OpConstant %uint 16
%uint_24 = OpConstant %uint 24
%int_32 = OpConstant %int 32
%51 = OpFunction %void None %32
%52 = OpLabel
%53 = OpFunctionCall %void %31
OpReturn
OpFunctionEnd
%31 = OpFunction %void None %32
%54 = OpLabel
%56 = OpVariable %_ptr_Function_v4float Function
%58 = OpVariable %_ptr_Function_uint Function
%61 = OpVariable %_ptr_Function_int Function
%62 = OpFunctionCall %v4uint %36
%63 = OpCompositeExtract %uint %62 0
%64 = OpCompositeExtract %uint %62 1
%65 = OpCompositeExtract %uint %62 2
%66 = OpCompositeExtract %uint %62 3
%68 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%70 = OpLoad %uint %68
%72 = OpIAdd %uint %70 %uint_31
%74 = OpUDiv %uint %72 %uint_32
%75 = OpUDiv %uint %66 %74
%76 = OpUMod %uint %66 %74
%77 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_0
%79 = OpLoad %uint %77
%80 = OpUDiv %uint %79 %uint_256
%82 = OpAccessChain %_ptr_Input_uint %gl_LocalInvocationID %uint_0
%83 = OpLoad %uint %82
%85 = OpUMod %uint %83 %uint_8
%86 = OpUDiv %uint %83 %uint_8
%87 = OpIMul %uint %75 %uint_32
%88 = OpIAdd %uint %87 %86
%89 = OpIMul %uint %76 %uint_32
%90 = OpIAdd %uint %89 %86
OpStore %56 %92
OpStore %58 %uint_0
OpBranch %93
%93 = OpLabel
OpLoopMerge %97 %96 None
OpBranch %94
%94 = OpLabel
%98 = OpLoad %uint %58
%100 = OpULessThan %bool %98 %80
OpBranchConditional %100 %95 %97
%95 = OpLabel
%101 = OpLoad %uint %58
%102 = OpFunctionCall %void %39 %64 %88 %65 %80 %101 %85 %86
%103 = OpLoad %uint %58
%104 = OpFunctionCall %void %41 %63 %90 %80 %103 %85 %86
%105 = OpLoad %uint %58
%106 = OpFunctionCall %void %43 %64 %75 %65 %80 %105 %83
%107 = OpLoad %uint %58
%108 = OpFunctionCall %void %44 %63 %76 %80 %107 %83
OpControlBarrier %uint_2 %uint_2 %uint_264
%111 = OpAccessChain %_ptr_Workgroup_float %27 %86
%113 = OpLoad %float %111
OpStore %61 %int_0
OpBranch %116
%116 = OpLabel
OpLoopMerge %120 %119 None
OpBranch %117
%117 = OpLabel
%121 = OpLoad %int %61
%122 = OpSLessThan %bool %121 %int_8
OpBranchConditional %122 %118 %120
%118 = OpLabel
%123 = OpLoad %int %61
%124 = OpBitcast %uint %123
%125 = OpFunctionCall %v4float %47 %124 %86 %85 %113
%126 = OpLoad %v4float %56
%127 = OpFAdd %v4float %126 %125
OpStore %56 %127
OpBranch %119
%119 = OpLabel
%128 = OpLoad %int %61
%129 = OpIAdd %int %128 %int_1
OpStore %61 %129
OpBranch %116
%120 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
%131 = OpLoad %uint %58
%132 = OpIAdd %uint %131 %uint_1
OpStore %58 %132
OpBranch %96
%96 = OpLabel
OpBranch %93
%97 = OpLabel
%133 = OpLoad %v4float %56
%134 = OpFunctionCall %void %49 %88 %65 %64 %76 %85 %133
OpReturn
OpFunctionEnd
%36 = OpFunction %v4uint None %37
%135 = OpLabel
%136 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_2
%137 = OpLoad %uint %136
%138 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_0
%139 = OpLoad %uint %138
%140 = OpIAdd %uint %137 %139
%141 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %140
%143 = OpLoad %uint %141
%145 = OpIMul %uint %143 %uint_4
%146 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %145
%147 = OpLoad %uint %146
%148 = OpIAdd %uint %145 %uint_1
%149 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %148
%150 = OpLoad %uint %149
%151 = OpIAdd %uint %145 %uint_2
%152 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %151
%153 = OpLoad %uint %152
%154 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_0
%155 = OpLoad %uint %154
%157 = OpIAdd %uint %145 %uint_3
%158 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %157
%159 = OpLoad %uint %158
%160 = OpISub %uint %155 %159
%161 = OpCompositeConstruct %v4uint %147 %150 %153 %160
OpReturnValue %161
OpFunctionEnd
%39 = OpFunction %void None %40
%162 = OpFunctionParameter %uint
%163 = OpFunctionParameter %uint
%164 = OpFunctionParameter %uint
%165 = OpFunctionParameter %uint
%166 = OpFunctionParameter %uint
%167 = OpFunctionParameter %uint
%168 = OpFunctionParameter %uint
%169 = OpLabel
%170 = OpVariable %_ptr_Function_int Function
%172 = OpVariable %_ptr_Function_v4uint Function
OpStore %170 %int_0
OpBranch %174
%174 = OpLabel
OpLoopMerge %178 %177 None
OpBranch %175
%175 = OpLabel
%179 = OpLoad %int %170
%180 = OpSLessThan %bool %179 %int_2
OpBranchConditional %180 %176 %178
%176 = OpLabel
%181 = OpLoad %int %170
%182 = OpBitcast %uint %181
%183 = OpIMul %uint %182 %uint_8
%184 = OpIAdd %uint %167 %183
%185 = OpUDiv %uint %184 %uint_2
%186 = OpUMod %uint %184 %uint_2
OpStore %172 %187
%188 = OpULessThan %bool %163 %164
OpSelectionMerge %189 None
OpBranchConditional %188 %190 %189
%190 = OpLabel
%191 = OpIAdd %uint %162 %163
%192 = OpIMul %uint %191 %165
%193 = OpIAdd %uint %192 %166
%195 = OpIMul %uint %193 %uint_64
%196 = OpIMul %uint %185 %uint_8
%197 = OpIAdd %uint %195 %196
%198 = OpIMul %uint %186 %uint_4
%199 = OpIAdd %uint %197 %198
%200 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %199
%201 = OpLoad %uint %200
%202 = OpIAdd %uint %199 %uint_1
%203 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %202
%204 = OpLoad %uint %203
%205 = OpIAdd %uint %199 %uint_2
%206 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %205
%207 = OpLoad %uint %206
%208 = OpIAdd %uint %199 %uint_3
%209 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %208
%210 = OpLoad %uint %209
%211 = OpCompositeConstruct %v4uint %201 %204 %207 %210
OpStore %172 %211
OpBranch %189
%189 = OpLabel
%213 = OpIMul %uint %168 %uint_17
%214 = OpIAdd %uint %213 %184
%215 = OpAccessChain %_ptr_Workgroup_v4uint %22 %214
%217 = OpLoad %v4uint %172
OpStore %215 %217
OpBranch %177
%177 = OpLabel
%218 = OpLoad %int %170
%219 = OpIAdd %int %218 %int_1
OpStore %170 %219
OpBranch %174
%178 = OpLabel
OpReturn
OpFunctionEnd
%41 = OpFunction %void None %42
%220 = OpFunctionParameter %uint
%221 = OpFunctionParameter %uint
%222 = OpFunctionParameter %uint
%223 = OpFunctionParameter %uint
%224 = OpFunctionParameter %uint
%225 = OpFunctionParameter %uint
%226 = OpLabel
%227 = OpVariable %_ptr_Function_int Function
%228 = OpVariable %_ptr_Function_v4uint Function
OpStore %227 %int_0
OpBranch %229
%229 = OpLabel
OpLoopMerge %233 %232 None
OpBranch %230
%230 = OpLabel
%234 = OpLoad %int %227
%235 = OpSLessThan %bool %234 %int_2
OpBranchConditional %235 %231 %233
%231 = OpLabel
%236 = OpLoad %int %227
%237 = OpBitcast %uint %236
%238 = OpIMul %uint %237 %uint_8
%239 = OpIAdd %uint %224 %238
%240 = OpUDiv %uint %239 %uint_2
%241 = OpUMod %uint %239 %uint_2
OpStore %228 %187
%242 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%243 = OpLoad %uint %242
%244 = OpULessThan %bool %221 %243
OpSelectionMerge %245 None
OpBranchConditional %244 %246 %245
%246 = OpLabel
%247 = OpIMul %uint %221 %222
%248 = OpIAdd %uint %220 %247
%249 = OpIAdd %uint %248 %223
%251 = OpIMul %uint %249 %uint_48
%252 = OpIMul %uint %240 %uint_4
%253 = OpIAdd %uint %251 %252
%254 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %253
%255 = OpLoad %uint %254
%256 = OpIAdd %uint %253 %uint_1
%257 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %256
%258 = OpLoad %uint %257
%259 = OpIAdd %uint %253 %uint_2
%260 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %259
%261 = OpLoad %uint %260
%262 = OpIAdd %uint %253 %uint_3
%263 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %262
%264 = OpLoad %uint %263
%265 = OpIMul %uint %249 %uint_48
%266 = OpIAdd %uint %265 %uint_32
%267 = OpUDiv %uint %240 %uint_4
%268 = OpIMul %uint %267 %uint_8
%269 = OpIAdd %uint %266 %268
%270 = OpIMul %uint %241 %uint_4
%271 = OpIAdd %uint %269 %270
%272 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %271
%273 = OpLoad %uint %272
%274 = OpIAdd %uint %271 %uint_1
%275 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %274
%276 = OpLoad %uint %275
%277 = OpIAdd %uint %271 %uint_2
%278 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %277
%279 = OpLoad %uint %278
%280 = OpIAdd %uint %271 %uint_3
%281 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %280
%282 = OpLoad %uint %281
%283 = OpUMod %uint %240 %uint_4
%284 = OpIMul %uint %283 %uint_2
%285 = OpIEqual %bool %241 %uint_0
OpSelectionMerge %286 None
OpBranchConditional %285 %287 %288
%287 = OpLabel
%290 = OpBitwiseAnd %uint %255 %uint_252645135
%291 = OpShiftRightLogical %uint %273 %284
%293 = OpBitwiseAnd %uint %291 %uint_50529027
%294 = OpShiftLeftLogical %uint %293 %uint_4
%295 = OpBitwiseOr %uint %290 %294
%296 = OpBitwiseAnd %uint %258 %uint_252645135
%297 = OpShiftRightLogical %uint %276 %284
%298 = OpBitwiseAnd %uint %297 %uint_50529027
%299 = OpShiftLeftLogical %uint %298 %uint_4
%300 = OpBitwiseOr %uint %296 %299
%301 = OpBitwiseAnd %uint %261 %uint_252645135
%302 = OpShiftRightLogical %uint %279 %284
%303 = OpBitwiseAnd %uint %302 %uint_50529027
%304 = OpShiftLeftLogical %uint %303 %uint_4
%305 = OpBitwiseOr %uint %301 %304
%306 = OpBitwiseAnd %uint %264 %uint_252645135
%307 = OpShiftRightLogical %uint %282 %284
%308 = OpBitwiseAnd %uint %307 %uint_50529027
%309 = OpShiftLeftLogical %uint %308 %uint_4
%310 = OpBitwiseOr %uint %306 %309
%311 = OpCompositeConstruct %v4uint %295 %300 %305 %310
OpStore %228 %311
OpBranch %286
%288 = OpLabel
%312 = OpShiftRightLogical %uint %255 %uint_4
%313 = OpBitwiseAnd %uint %312 %uint_252645135
%314 = OpShiftRightLogical %uint %273 %284
%315 = OpBitwiseAnd %uint %314 %uint_50529027
%316 = OpShiftLeftLogical %uint %315 %uint_4
%317 = OpBitwiseOr %uint %313 %316
%318 = OpShiftRightLogical %uint %258 %uint_4
%319 = OpBitwiseAnd %uint %318 %uint_252645135
%320 = OpShiftRightLogical %uint %276 %284
%321 = OpBitwiseAnd %uint %320 %uint_50529027
%322 = OpShiftLeftLogical %uint %321 %uint_4
%323 = OpBitwiseOr %uint %319 %322
%324 = OpShiftRightLogical %uint %261 %uint_4
%325 = OpBitwiseAnd %uint %324 %uint_252645135
%326 = OpShiftRightLogical %uint %279 %284
%327 = OpBitwiseAnd %uint %326 %uint_50529027
%328 = OpShiftLeftLogical %uint %327 %uint_4
%329 = OpBitwiseOr %uint %325 %328
%330 = OpShiftRightLogical %uint %264 %uint_4
%331 = OpBitwiseAnd %uint %330 %uint_252645135
%332 = OpShiftRightLogical %uint %282 %284
%333 = OpBitwiseAnd %uint %332 %uint_50529027
%334 = OpShiftLeftLogical %uint %333 %uint_4
%335 = OpBitwiseOr %uint %331 %334
%336 = OpCompositeConstruct %v4uint %317 %323 %329 %335
OpStore %228 %336
OpBranch %286
%286 = OpLabel
OpBranch %245
%245 = OpLabel
%337 = OpIMul %uint %225 %uint_17
%338 = OpIAdd %uint %337 %239
%339 = OpAccessChain %_ptr_Workgroup_v4uint %23 %338
%340 = OpLoad %v4uint %228
OpStore %339 %340
OpBranch %232
%232 = OpLabel
%341 = OpLoad %int %227
%342 = OpIAdd %int %341 %int_1
OpStore %227 %342
OpBranch %229
%233 = OpLabel
OpReturn
OpFunctionEnd
%43 = OpFunction %void None %42
%343 = OpFunctionParameter %uint
%344 = OpFunctionParameter %uint
%345 = OpFunctionParameter %uint
%346 = OpFunctionParameter %uint
%347 = OpFunctionParameter %uint
%348 = OpFunctionParameter %uint
%349 = OpLabel
%351 = OpVariable %_ptr_Function_float Function
%352 = OpULessThan %bool %348 %uint_32
OpSelectionMerge %353 None
OpBranchConditional %352 %354 %353
%354 = OpLabel
OpStore %351 %float_0
%355 = OpIMul %uint %344 %uint_32
%356 = OpIAdd %uint %355 %348
%357 = OpULessThan %bool %356 %345
OpSelectionMerge %358 None
OpBranchConditional %357 %359 %358
%359 = OpLabel
%360 = OpIMul %uint %344 %uint_32
%361 = OpIAdd %uint %343 %360
%362 = OpIAdd %uint %361 %348
%363 = OpIMul %uint %362 %346
%364 = OpIAdd %uint %363 %347
%365 = OpAccessChain %_ptr_StorageBuffer_float %13 %uint_0 %364
%367 = OpLoad %float %365
OpStore %351 %367
OpBranch %358
%358 = OpLabel
%368 = OpAccessChain %_ptr_Workgroup_float %27 %348
%369 = OpLoad %float %351
OpStore %368 %369
OpBranch %353
%353 = OpLabel
OpReturn
OpFunctionEnd
%44 = OpFunction %void None %45
%370 = OpFunctionParameter %uint
%371 = OpFunctionParameter %uint
%372 = OpFunctionParameter %uint
%373 = OpFunctionParameter %uint
%374 = OpFunctionParameter %uint
%375 = OpLabel
%376 = OpVariable %_ptr_Function_float Function
%377 = OpVariable %_ptr_Function_float Function
%378 = OpUMod %uint %374 %uint_32
%379 = OpUDiv %uint %374 %uint_32
OpStore %376 %float_0
OpStore %377 %float_0
%380 = OpIMul %uint %371 %uint_32
%381 = OpIAdd %uint %380 %378
%382 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%383 = OpLoad %uint %382
%384 = OpULessThan %bool %381 %383
OpSelectionMerge %385 None
OpBranchConditional %384 %386 %385
%386 = OpLabel
%387 = OpIMul %uint %371 %uint_32
%388 = OpIAdd %uint %387 %378
%389 = OpIMul %uint %388 %372
%390 = OpIAdd %uint %370 %389
%391 = OpIAdd %uint %390 %373
%393 = OpIMul %uint %391 %uint_5
%394 = OpUDiv %uint %379 %uint_2
%395 = OpIAdd %uint %393 %394
%396 = OpAccessChain %_ptr_StorageBuffer_uint %6 %uint_0 %395
%397 = OpLoad %uint %396
%398 = OpBitcast %int %397
%401 = OpBitcast %v4char %398
%403 = OpSConvert %v4int %401
%404 = OpUMod %uint %379 %uint_2
%405 = OpIEqual %bool %404 %uint_0
%406 = OpCompositeExtract %int %403 0
%407 = OpCompositeExtract %int %403 2
%408 = OpSelect %int %405 %406 %407
%409 = OpUMod %uint %379 %uint_2
%410 = OpIEqual %bool %409 %uint_0
%411 = OpCompositeExtract %int %403 1
%412 = OpCompositeExtract %int %403 3
%413 = OpSelect %int %410 %411 %412
%414 = OpIMul %uint %391 %uint_5
%415 = OpIAdd %uint %414 %uint_4
%416 = OpAccessChain %_ptr_StorageBuffer_uint %6 %uint_0 %415
%417 = OpLoad %uint %416
%420 = OpExtInst %v2float %418 UnpackHalf2x16 %417
%421 = OpCompositeExtract %float %420 0
%422 = OpConvertSToF %float %408
%423 = OpFMul %float %421 %422
OpStore %376 %423
%424 = OpConvertSToF %float %413
%425 = OpFMul %float %421 %424
OpStore %377 %425
OpBranch %385
%385 = OpLabel
%426 = OpIMul %uint %379 %uint_32
%427 = OpIAdd %uint %426 %378
%428 = OpAccessChain %_ptr_Workgroup_float %28 %427
%429 = OpLoad %float %376
OpStore %428 %429
%430 = OpIMul %uint %379 %uint_32
%431 = OpIAdd %uint %430 %378
%432 = OpAccessChain %_ptr_Workgroup_float %29 %431
%433 = OpLoad %float %377
OpStore %432 %433
OpReturn
OpFunctionEnd
%47 = OpFunction %v4float None %48
%434 = OpFunctionParameter %uint
%435 = OpFunctionParameter %uint
%436 = OpFunctionParameter %uint
%437 = OpFunctionParameter %float
%438 = OpLabel
%439 = OpIMul %uint %434 %uint_2
%440 = OpIMul %uint %434 %uint_2
%441 = OpIAdd %uint %440 %uint_1
%442 = OpIMul %uint %435 %uint_17
%443 = OpIAdd %uint %442 %439
%444 = OpAccessChain %_ptr_Workgroup_v4uint %22 %443
%445 = OpLoad %v4uint %444
%446 = OpIMul %uint %435 %uint_17
%447 = OpIAdd %uint %446 %441
%448 = OpAccessChain %_ptr_Workgroup_v4uint %22 %447
%449 = OpLoad %v4uint %448
%450 = OpCompositeExtract %uint %445 0
%452 = OpSDot %int %450 %uint_16843009 PackedVectorFormat4x8Bit
%453 = OpCompositeExtract %uint %445 1
%454 = OpSDot %int %453 %uint_16843009 PackedVectorFormat4x8Bit
%455 = OpIAdd %int %452 %454
%456 = OpCompositeExtract %uint %445 2
%457 = OpSDot %int %456 %uint_16843009 PackedVectorFormat4x8Bit
%458 = OpIAdd %int %455 %457
%459 = OpCompositeExtract %uint %445 3
%460 = OpSDot %int %459 %uint_16843009 PackedVectorFormat4x8Bit
%461 = OpIAdd %int %458 %460
%462 = OpCompositeExtract %uint %449 0
%463 = OpSDot %int %462 %uint_16843009 PackedVectorFormat4x8Bit
%464 = OpCompositeExtract %uint %449 1
%465 = OpSDot %int %464 %uint_16843009 PackedVectorFormat4x8Bit
%466 = OpIAdd %int %463 %465
%467 = OpCompositeExtract %uint %449 2
%468 = OpSDot %int %467 %uint_16843009 PackedVectorFormat4x8Bit
%469 = OpIAdd %int %466 %468
%470 = OpCompositeExtract %uint %449 3
%471 = OpSDot %int %470 %uint_16843009 PackedVectorFormat4x8Bit
%472 = OpIAdd %int %469 %471
%473 = OpIMul %uint %436 %uint_17
%474 = OpIAdd %uint %473 %439
%475 = OpAccessChain %_ptr_Workgroup_v4uint %23 %474
%476 = OpLoad %v4uint %475
%477 = OpIAdd %uint %436 %uint_8
%478 = OpIMul %uint %477 %uint_17
%479 = OpIAdd %uint %478 %439
%480 = OpAccessChain %_ptr_Workgroup_v4uint %23 %479
%481 = OpLoad %v4uint %480
%483 = OpIAdd %uint %436 %uint_16
%484 = OpIMul %uint %483 %uint_17
%485 = OpIAdd %uint %484 %439
%486 = OpAccessChain %_ptr_Workgroup_v4uint %23 %485
%487 = OpLoad %v4uint %486
%489 = OpIAdd %uint %436 %uint_24
%490 = OpIMul %uint %489 %uint_17
%491 = OpIAdd %uint %490 %439
%492 = OpAccessChain %_ptr_Workgroup_v4uint %23 %491
%493 = OpLoad %v4uint %492
%494 = OpIMul %uint %436 %uint_17
%495 = OpIAdd %uint %494 %441
%496 = OpAccessChain %_ptr_Workgroup_v4uint %23 %495
%497 = OpLoad %v4uint %496
%498 = OpIAdd %uint %436 %uint_8
%499 = OpIMul %uint %498 %uint_17
%500 = OpIAdd %uint %499 %441
%501 = OpAccessChain %_ptr_Workgroup_v4uint %23 %500
%502 = OpLoad %v4uint %501
%503 = OpIAdd %uint %436 %uint_16
%504 = OpIMul %uint %503 %uint_17
%505 = OpIAdd %uint %504 %441
%506 = OpAccessChain %_ptr_Workgroup_v4uint %23 %505
%507 = OpLoad %v4uint %506
%508 = OpIAdd %uint %436 %uint_24
%509 = OpIMul %uint %508 %uint_17
%510 = OpIAdd %uint %509 %441
%511 = OpAccessChain %_ptr_Workgroup_v4uint %23 %510
%512 = OpLoad %v4uint %511
%513 = OpCompositeExtract %uint %476 0
%514 = OpCompositeExtract %uint %445 0
%515 = OpSDot %int %513 %514 PackedVectorFormat4x8Bit
%516 = OpCompositeExtract %uint %476 1
%517 = OpCompositeExtract %uint %445 1
%518 = OpSDot %int %516 %517 PackedVectorFormat4x8Bit
%519 = OpIAdd %int %515 %518
%520 = OpCompositeExtract %uint %476 2
%521 = OpCompositeExtract %uint %445 2
%522 = OpSDot %int %520 %521 PackedVectorFormat4x8Bit
%523 = OpIAdd %int %519 %522
%524 = OpCompositeExtract %uint %476 3
%525 = OpCompositeExtract %uint %445 3
%526 = OpSDot %int %524 %525 PackedVectorFormat4x8Bit
%527 = OpIAdd %int %523 %526
%528 = OpCompositeExtract %uint %481 0
%529 = OpCompositeExtract %uint %445 0
%530 = OpSDot %int %528 %529 PackedVectorFormat4x8Bit
%531 = OpCompositeExtract %uint %481 1
%532 = OpCompositeExtract %uint %445 1
%533 = OpSDot %int %531 %532 PackedVectorFormat4x8Bit
%534 = OpIAdd %int %530 %533
%535 = OpCompositeExtract %uint %481 2
%536 = OpCompositeExtract %uint %445 2
%537 = OpSDot %int %535 %536 PackedVectorFormat4x8Bit
%538 = OpIAdd %int %534 %537
%539 = OpCompositeExtract %uint %481 3
%540 = OpCompositeExtract %uint %445 3
%541 = OpSDot %int %539 %540 PackedVectorFormat4x8Bit
%542 = OpIAdd %int %538 %541
%543 = OpCompositeExtract %uint %487 0
%544 = OpCompositeExtract %uint %445 0
%545 = OpSDot %int %543 %544 PackedVectorFormat4x8Bit
%546 = OpCompositeExtract %uint %487 1
%547 = OpCompositeExtract %uint %445 1
%548 = OpSDot %int %546 %547 PackedVectorFormat4x8Bit
%549 = OpIAdd %int %545 %548
%550 = OpCompositeExtract %uint %487 2
%551 = OpCompositeExtract %uint %445 2
%552 = OpSDot %int %550 %551 PackedVectorFormat4x8Bit
%553 = OpIAdd %int %549 %552
%554 = OpCompositeExtract %uint %487 3
%555 = OpCompositeExtract %uint %445 3
%556 = OpSDot %int %554 %555 PackedVectorFormat4x8Bit
%557 = OpIAdd %int %553 %556
%558 = OpCompositeExtract %uint %493 0
%559 = OpCompositeExtract %uint %445 0
%560 = OpSDot %int %558 %559 PackedVectorFormat4x8Bit
%561 = OpCompositeExtract %uint %493 1
%562 = OpCompositeExtract %uint %445 1
%563 = OpSDot %int %561 %562 PackedVectorFormat4x8Bit
%564 = OpIAdd %int %560 %563
%565 = OpCompositeExtract %uint %493 2
%566 = OpCompositeExtract %uint %445 2
%567 = OpSDot %int %565 %566 PackedVectorFormat4x8Bit
%568 = OpIAdd %int %564 %567
%569 = OpCompositeExtract %uint %493 3
%570 = OpCompositeExtract %uint %445 3
%571 = OpSDot %int %569 %570 PackedVectorFormat4x8Bit
%572 = OpIAdd %int %568 %571
%573 = OpCompositeExtract %uint %497 0
%574 = OpCompositeExtract %uint %449 0
%575 = OpSDot %int %573 %574 PackedVectorFormat4x8Bit
%576 = OpCompositeExtract %uint %497 1
%577 = OpCompositeExtract %uint %449 1
%578 = OpSDot %int %576 %577 PackedVectorFormat4x8Bit
%579 = OpIAdd %int %575 %578
%580 = OpCompositeExtract %uint %497 2
%581 = OpCompositeExtract %uint %449 2
%582 = OpSDot %int %580 %581 PackedVectorFormat4x8Bit
%583 = OpIAdd %int %579 %582
%584 = OpCompositeExtract %uint %497 3
%585 = OpCompositeExtract %uint %449 3
%586 = OpSDot %int %584 %585 PackedVectorFormat4x8Bit
%587 = OpIAdd %int %583 %586
%588 = OpCompositeExtract %uint %502 0
%589 = OpCompositeExtract %uint %449 0
%590 = OpSDot %int %588 %589 PackedVectorFormat4x8Bit
%591 = OpCompositeExtract %uint %502 1
%592 = OpCompositeExtract %uint %449 1
%593 = OpSDot %int %591 %592 PackedVectorFormat4x8Bit
%594 = OpIAdd %int %590 %593
%595 = OpCompositeExtract %uint %502 2
%596 = OpCompositeExtract %uint %449 2
%597 = OpSDot %int %595 %596 PackedVectorFormat4x8Bit
%598 = OpIAdd %int %594 %597
%599 = OpCompositeExtract %uint %502 3
%600 = OpCompositeExtract %uint %449 3
%601 = OpSDot %int %599 %600 PackedVectorFormat4x8Bit
%602 = OpIAdd %int %598 %601
%603 = OpCompositeExtract %uint %507 0
%604 = OpCompositeExtract %uint %449 0
%605 = OpSDot %int %603 %604 PackedVectorFormat4x8Bit
%606 = OpCompositeExtract %uint %507 1
%607 = OpCompositeExtract %uint %449 1
%608 = OpSDot %int %606 %607 PackedVectorFormat4x8Bit
%609 = OpIAdd %int %605 %608
%610 = OpCompositeExtract %uint %507 2
%611 = OpCompositeExtract %uint %449 2
%612 = OpSDot %int %610 %611 PackedVectorFormat4x8Bit
%613 = OpIAdd %int %609 %612
%614 = OpCompositeExtract %uint %507 3
%615 = OpCompositeExtract %uint %449 3
%616 = OpSDot %int %614 %615 PackedVectorFormat4x8Bit
%617 = OpIAdd %int %613 %616
%618 = OpCompositeExtract %uint %512 0
%619 = OpCompositeExtract %uint %449 0
%620 = OpSDot %int %618 %619 PackedVectorFormat4x8Bit
%621 = OpCompositeExtract %uint %512 1
%622 = OpCompositeExtract %uint %449 1
%623 = OpSDot %int %621 %622 PackedVectorFormat4x8Bit
%624 = OpIAdd %int %620 %623
%625 = OpCompositeExtract %uint %512 2
%626 = OpCompositeExtract %uint %449 2
%627 = OpSDot %int %625 %626 PackedVectorFormat4x8Bit
%628 = OpIAdd %int %624 %627
%629 = OpCompositeExtract %uint %512 3
%630 = OpCompositeExtract %uint %449 3
%631 = OpSDot %int %629 %630 PackedVectorFormat4x8Bit
%632 = OpIAdd %int %628 %631
%633 = OpIMul %uint %434 %uint_32
%634 = OpIAdd %uint %633 %436
%635 = OpAccessChain %_ptr_Workgroup_float %28 %634
%636 = OpLoad %float %635
%638 = OpIMul %int %461 %int_32
%639 = OpISub %int %527 %638
%640 = OpConvertSToF %float %639
%641 = OpFMul %float %636 %640
%642 = OpIMul %uint %434 %uint_32
%643 = OpIAdd %uint %642 %436
%644 = OpAccessChain %_ptr_Workgroup_float %29 %643
%645 = OpLoad %float %644
%646 = OpIMul %int %472 %int_32
%647 = OpISub %int %587 %646
%648 = OpConvertSToF %float %647
%649 = OpFMul %float %645 %648
%650 = OpFAdd %float %641 %649
%651 = OpFMul %float %437 %650
%652 = OpIMul %uint %434 %uint_32
%653 = OpIAdd %uint %652 %436
%654 = OpIAdd %uint %653 %uint_8
%655 = OpAccessChain %_ptr_Workgroup_float %28 %654
%656 = OpLoad %float %655
%657 = OpIMul %int %461 %int_32
%658 = OpISub %int %542 %657
%659 = OpConvertSToF %float %658
%660 = OpFMul %float %656 %659
%661 = OpIMul %uint %434 %uint_32
%662 = OpIAdd %uint %661 %436
%663 = OpIAdd %uint %662 %uint_8
%664 = OpAccessChain %_ptr_Workgroup_float %29 %663
%665 = OpLoad %float %664
%666 = OpIMul %int %472 %int_32
%667 = OpISub %int %602 %666
%668 = OpConvertSToF %float %667
%669 = OpFMul %float %665 %668
%670 = OpFAdd %float %660 %669
%671 = OpFMul %float %437 %670
%672 = OpIMul %uint %434 %uint_32
%673 = OpIAdd %uint %672 %436
%674 = OpIAdd %uint %673 %uint_16
%675 = OpAccessChain %_ptr_Workgroup_float %28 %674
%676 = OpLoad %float %675
%677 = OpIMul %int %461 %int_32
%678 = OpISub %int %557 %677
%679 = OpConvertSToF %float %678
%680 = OpFMul %float %676 %679
%681 = OpIMul %uint %434 %uint_32
%682 = OpIAdd %uint %681 %436
%683 = OpIAdd %uint %682 %uint_16
%684 = OpAccessChain %_ptr_Workgroup_float %29 %683
%685 = OpLoad %float %684
%686 = OpIMul %int %472 %int_32
%687 = OpISub %int %617 %686
%688 = OpConvertSToF %float %687
%689 = OpFMul %float %685 %688
%690 = OpFAdd %float %680 %689
%691 = OpFMul %float %437 %690
%692 = OpIMul %uint %434 %uint_32
%693 = OpIAdd %uint %692 %436
%694 = OpIAdd %uint %693 %uint_24
%695 = OpAccessChain %_ptr_Workgroup_float %28 %694
%696 = OpLoad %float %695
%697 = OpIMul %int %461 %int_32
%698 = OpISub %int %572 %697
%699 = OpConvertSToF %float %698
%700 = OpFMul %float %696 %699
%701 = OpIMul %uint %434 %uint_32
%702 = OpIAdd %uint %701 %436
%703 = OpIAdd %uint %702 %uint_24
%704 = OpAccessChain %_ptr_Workgroup_float %29 %703
%705 = OpLoad %float %704
%706 = OpIMul %int %472 %int_32
%707 = OpISub %int %632 %706
%708 = OpConvertSToF %float %707
%709 = OpFMul %float %705 %708
%710 = OpFAdd %float %700 %709
%711 = OpFMul %float %437 %710
%712 = OpCompositeConstruct %v4float %651 %671 %691 %711
OpReturnValue %712
OpFunctionEnd
%49 = OpFunction %void None %50
%713 = OpFunctionParameter %uint
%714 = OpFunctionParameter %uint
%715 = OpFunctionParameter %uint
%716 = OpFunctionParameter %uint
%717 = OpFunctionParameter %uint
%718 = OpFunctionParameter %v4float
%719 = OpLabel
%720 = OpULessThan %bool %713 %714
OpSelectionMerge %721 None
OpBranchConditional %720 %722 %721
%722 = OpLabel
%723 = OpIAdd %uint %715 %713
%724 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%725 = OpLoad %uint %724
%726 = OpIMul %uint %723 %725
%727 = OpIMul %uint %716 %uint_32
%728 = OpIAdd %uint %726 %727
%729 = OpIAdd %uint %728 %717
%730 = OpIMul %uint %716 %uint_32
%731 = OpIAdd %uint %730 %717
%732 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%733 = OpLoad %uint %732
%734 = OpULessThan %bool %731 %733
OpSelectionMerge %735 None
OpBranchConditional %734 %736 %735
%736 = OpLabel
%737 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %729
%738 = OpCompositeExtract %float %718 0
OpStore %737 %738
OpBranch %735
%735 = OpLabel
%739 = OpIMul %uint %716 %uint_32
%740 = OpIAdd %uint %739 %717
%741 = OpIAdd %uint %740 %uint_8
%742 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%743 = OpLoad %uint %742
%744 = OpULessThan %bool %741 %743
OpSelectionMerge %745 None
OpBranchConditional %744 %746 %745
%746 = OpLabel
%747 = OpIAdd %uint %729 %uint_8
%748 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %747
%749 = OpCompositeExtract %float %718 1
OpStore %748 %749
OpBranch %745
%745 = OpLabel
%750 = OpIMul %uint %716 %uint_32
%751 = OpIAdd %uint %750 %717
%752 = OpIAdd %uint %751 %uint_16
%753 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%754 = OpLoad %uint %753
%755 = OpULessThan %bool %752 %754
OpSelectionMerge %756 None
OpBranchConditional %755 %757 %756
%757 = OpLabel
%758 = OpIAdd %uint %729 %uint_16
%759 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %758
%760 = OpCompositeExtract %float %718 2
OpStore %759 %760
OpBranch %756
%756 = OpLabel
%761 = OpIMul %uint %716 %uint_32
%762 = OpIAdd %uint %761 %717
%763 = OpIAdd %uint %762 %uint_24
%764 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%765 = OpLoad %uint %764
%766 = OpULessThan %bool %763 %765
OpSelectionMerge %767 None
OpBranchConditional %766 %768 %767
%768 = OpLabel
%769 = OpIAdd %uint %729 %uint_24
%770 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %769
%771 = OpCompositeExtract %float %718 3
OpStore %770 %771
OpBranch %767
%767 = OpLabel
OpBranch %721
%721 = OpLabel
OpReturn
OpFunctionEnd
; SPIR-V
; Version: 1.3
; Generator: Khronos; 0
; Bound: 596
; Schema: 0
OpCapability Shader
OpCapability DotProduct
OpCapability DotProductInput4x8BitPacked
OpExtension "SPV_KHR_integer_dot_product"
%347 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %56 "main" %gl_LocalInvocationID %gl_WorkGroupID
OpExecutionMode %56 LocalSize 256 1 1
OpDecorate %_runtimearr_uint ArrayStride 4
OpDecorate %_struct_3 Block
OpMemberDecorate %_struct_3 0 Offset 0
OpDecorate %5 DescriptorSet 0
OpDecorate %5 Binding 0
OpDecorate %6 DescriptorSet 0
OpDecorate %6 Binding 1
OpDecorate %7 DescriptorSet 0
OpDecorate %7 Binding 2
OpDecorate %8 DescriptorSet 0
OpDecorate %8 Binding 3
OpDecorate %_runtimearr_float ArrayStride 4
OpDecorate %_struct_11 Block
OpMemberDecorate %_struct_11 0 Offset 0
OpDecorate %13 DescriptorSet 0
OpDecorate %13 Binding 4
OpDecorate %14 DescriptorSet 0
OpDecorate %14 Binding 5
OpDecorate %_struct_15 Block
OpMemberDecorate %_struct_15 0 Offset 0
OpMemberDecorate %_struct_15 1 Offset 4
OpMemberDecorate %_struct_15 2 Offset 8
OpDecorate %gl_LocalInvocationID BuiltIn LocalInvocationId
OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId
%uint = OpTypeInt 32 0
%_runtimearr_uint = OpTypeRuntimeArray %uint
%_struct_3 = OpTypeStruct %_runtimearr_uint
%_ptr_StorageBuffer__struct_3 = OpTypePointer StorageBuffer %_struct_3
%5 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%6 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%7 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%8 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%float = OpTypeFloat 32
%_runtimearr_float = OpTypeRuntimeArray %float
%_struct_11 = OpTypeStruct %_runtimearr_float
%_ptr_StorageBuffer__struct_11 = OpTypePointer StorageBuffer %_struct_11
%13 = OpVariable %_ptr_StorageBuffer__struct_11 StorageBuffer
%14 = OpVariable %_ptr_StorageBuffer__struct_11 StorageBuffer
%_struct_15 = OpTypeStruct %uint %uint %uint
%_ptr_PushConstant__struct_15 = OpTypePointer PushConstant %_struct_15
%17 = OpVariable %_ptr_PushConstant__struct_15 PushConstant
%v4uint = OpTypeVector %uint 4
%uint_544 = OpConstant %uint 544
%_arr_v4uint_uint_544 = OpTypeArray %v4uint %uint_544
%_ptr_Workgroup__arr_v4uint_uint_544 = OpTypePointer Workgroup %_arr_v4uint_uint_544
%22 = OpVariable %_ptr_Workgroup__arr_v4uint_uint_544 Workgroup
%23 = OpVariable %_ptr_Workgroup__arr_v4uint_uint_544 Workgroup
%uint_256 = OpConstant %uint 256
%_arr_float_uint_256 = OpTypeArray %float %uint_256
%_ptr_Workgroup__arr_float_uint_256 = OpTypePointer Workgroup %_arr_float_uint_256
%27 = OpVariable %_ptr_Workgroup__arr_float_uint_256 Workgroup
%28 = OpVariable %_ptr_Workgroup__arr_float_uint_256 Workgroup
%29 = OpVariable %_ptr_Workgroup__arr_float_uint_256 Workgroup
%void = OpTypeVoid
%32 = OpTypeFunction %void
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%gl_LocalInvocationID = OpVariable %_ptr_Input_v3uint Input
%37 = OpTypeFunction %v4uint
%gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input
%40 = OpTypeFunction %void %uint %uint %uint %uint %uint %uint %uint
%42 = OpTypeFunction %void %uint %uint %uint %uint %uint %uint
%45 = OpTypeFunction %void %uint %uint %uint %uint %uint
%v4float = OpTypeVector %float 4
%48 = OpTypeFunction %v4float %uint %uint %uint %float
%int = OpTypeInt 32 1
%v4int = OpTypeVector %int 4
%_ptr_Function_v4int = OpTypePointer Function %v4int
%53 = OpTypeFunction %int %uint %uint %uint %_ptr_Function_v4int
%55 = OpTypeFunction %void %uint %uint %uint %uint %uint %v4float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_uint = OpTypePointer Function %uint
%_ptr_Function_int = OpTypePointer Function %int
%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint
%uint_1 = OpConstant %uint 1
%uint_31 = OpConstant %uint 31
%uint_32 = OpConstant %uint 32
%uint_0 = OpConstant %uint 0
%_ptr_Input_uint = OpTypePointer Input %uint
%uint_8 = OpConstant %uint 8
%float_0 = OpConstant %float 0
%96 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
%bool = OpTypeBool
%uint_2 = OpConstant %uint 2
%uint_264 = OpConstant %uint 264
%_ptr_Workgroup_float = OpTypePointer Workgroup %float
%int_0 = OpConstant %int 0
%int_8 = OpConstant %int 8
%int_1 = OpConstant %int 1
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
%uint_4 = OpConstant %uint 4
%uint_3 = OpConstant %uint 3
%_ptr_Function_v4uint = OpTypePointer Function %v4uint
%int_2 = OpConstant %int 2
%191 = OpConstantComposite %v4uint %uint_0 %uint_0 %uint_0 %uint_0
%uint_64 = OpConstant %uint 64
%uint_17 = OpConstant %uint 17
%_ptr_Workgroup_v4uint = OpTypePointer Workgroup %v4uint
%uint_252645135 = OpConstant %uint 252645135
%_ptr_Function_float = OpTypePointer Function %float
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
%uint_5 = OpConstant %uint 5
%v2float = OpTypeVector %float 2
%366 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
%uint_16 = OpConstant %uint 16
%uint_24 = OpConstant %uint 24
%uint_16843009 = OpConstant %uint 16843009
%56 = OpFunction %void None %32
%57 = OpLabel
%58 = OpFunctionCall %void %31
OpReturn
OpFunctionEnd
%31 = OpFunction %void None %32
%59 = OpLabel
%61 = OpVariable %_ptr_Function_v4float Function
%63 = OpVariable %_ptr_Function_uint Function
%65 = OpVariable %_ptr_Function_int Function
%66 = OpFunctionCall %v4uint %36
%67 = OpCompositeExtract %uint %66 0
%68 = OpCompositeExtract %uint %66 1
%69 = OpCompositeExtract %uint %66 2
%70 = OpCompositeExtract %uint %66 3
%72 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%74 = OpLoad %uint %72
%76 = OpIAdd %uint %74 %uint_31
%78 = OpUDiv %uint %76 %uint_32
%79 = OpUDiv %uint %70 %78
%80 = OpUMod %uint %70 %78
%81 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_0
%83 = OpLoad %uint %81
%84 = OpUDiv %uint %83 %uint_256
%86 = OpAccessChain %_ptr_Input_uint %gl_LocalInvocationID %uint_0
%87 = OpLoad %uint %86
%89 = OpUMod %uint %87 %uint_8
%90 = OpUDiv %uint %87 %uint_8
%91 = OpIMul %uint %79 %uint_32
%92 = OpIAdd %uint %91 %90
%93 = OpIMul %uint %80 %uint_32
%94 = OpIAdd %uint %93 %90
OpStore %61 %96
OpStore %63 %uint_0
OpBranch %97
%97 = OpLabel
OpLoopMerge %101 %100 None
OpBranch %98
%98 = OpLabel
%102 = OpLoad %uint %63
%104 = OpULessThan %bool %102 %84
OpBranchConditional %104 %99 %101
%99 = OpLabel
%105 = OpLoad %uint %63
%106 = OpFunctionCall %void %39 %68 %92 %69 %84 %105 %89 %90
%107 = OpLoad %uint %63
%108 = OpFunctionCall %void %41 %67 %94 %84 %107 %89 %90
%109 = OpLoad %uint %63
%110 = OpFunctionCall %void %43 %68 %79 %69 %84 %109 %87
%111 = OpLoad %uint %63
%112 = OpFunctionCall %void %44 %67 %80 %84 %111 %87
OpControlBarrier %uint_2 %uint_2 %uint_264
%115 = OpAccessChain %_ptr_Workgroup_float %27 %90
%117 = OpLoad %float %115
OpStore %65 %int_0
OpBranch %120
%120 = OpLabel
OpLoopMerge %124 %123 None
OpBranch %121
%121 = OpLabel
%125 = OpLoad %int %65
%126 = OpSLessThan %bool %125 %int_8
OpBranchConditional %126 %122 %124
%122 = OpLabel
%127 = OpLoad %int %65
%128 = OpBitcast %uint %127
%129 = OpFunctionCall %v4float %47 %128 %90 %89 %117
%130 = OpLoad %v4float %61
%131 = OpFAdd %v4float %130 %129
OpStore %61 %131
OpBranch %123
%123 = OpLabel
%132 = OpLoad %int %65
%133 = OpIAdd %int %132 %int_1
OpStore %65 %133
OpBranch %120
%124 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
%135 = OpLoad %uint %63
%136 = OpIAdd %uint %135 %uint_1
OpStore %63 %136
OpBranch %100
%100 = OpLabel
OpBranch %97
%101 = OpLabel
%137 = OpLoad %v4float %61
%138 = OpFunctionCall %void %54 %92 %69 %68 %80 %89 %137
OpReturn
OpFunctionEnd
%36 = OpFunction %v4uint None %37
%139 = OpLabel
%140 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_2
%141 = OpLoad %uint %140
%142 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_0
%143 = OpLoad %uint %142
%144 = OpIAdd %uint %141 %143
%145 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %144
%147 = OpLoad %uint %145
%149 = OpIMul %uint %147 %uint_4
%150 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %149
%151 = OpLoad %uint %150
%152 = OpIAdd %uint %149 %uint_1
%153 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %152
%154 = OpLoad %uint %153
%155 = OpIAdd %uint %149 %uint_2
%156 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %155
%157 = OpLoad %uint %156
%158 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_0
%159 = OpLoad %uint %158
%161 = OpIAdd %uint %149 %uint_3
%162 = OpAccessChain %_ptr_StorageBuffer_uint %7 %uint_0 %161
%163 = OpLoad %uint %162
%164 = OpISub %uint %159 %163
%165 = OpCompositeConstruct %v4uint %151 %154 %157 %164
OpReturnValue %165
OpFunctionEnd
%39 = OpFunction %void None %40
%166 = OpFunctionParameter %uint
%167 = OpFunctionParameter %uint
%168 = OpFunctionParameter %uint
%169 = OpFunctionParameter %uint
%170 = OpFunctionParameter %uint
%171 = OpFunctionParameter %uint
%172 = OpFunctionParameter %uint
%173 = OpLabel
%174 = OpVariable %_ptr_Function_int Function
%176 = OpVariable %_ptr_Function_v4uint Function
OpStore %174 %int_0
OpBranch %178
%178 = OpLabel
OpLoopMerge %182 %181 None
OpBranch %179
%179 = OpLabel
%183 = OpLoad %int %174
%184 = OpSLessThan %bool %183 %int_2
OpBranchConditional %184 %180 %182
%180 = OpLabel
%185 = OpLoad %int %174
%186 = OpBitcast %uint %185
%187 = OpIMul %uint %186 %uint_8
%188 = OpIAdd %uint %171 %187
%189 = OpUDiv %uint %188 %uint_2
%190 = OpUMod %uint %188 %uint_2
OpStore %176 %191
%192 = OpULessThan %bool %167 %168
OpSelectionMerge %193 None
OpBranchConditional %192 %194 %193
%194 = OpLabel
%195 = OpIAdd %uint %166 %167
%196 = OpIMul %uint %195 %169
%197 = OpIAdd %uint %196 %170
%199 = OpIMul %uint %197 %uint_64
%200 = OpIMul %uint %189 %uint_8
%201 = OpIAdd %uint %199 %200
%202 = OpIMul %uint %190 %uint_4
%203 = OpIAdd %uint %201 %202
%204 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %203
%205 = OpLoad %uint %204
%206 = OpIAdd %uint %203 %uint_1
%207 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %206
%208 = OpLoad %uint %207
%209 = OpIAdd %uint %203 %uint_2
%210 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %209
%211 = OpLoad %uint %210
%212 = OpIAdd %uint %203 %uint_3
%213 = OpAccessChain %_ptr_StorageBuffer_uint %8 %uint_0 %212
%214 = OpLoad %uint %213
%215 = OpCompositeConstruct %v4uint %205 %208 %211 %214
OpStore %176 %215
OpBranch %193
%193 = OpLabel
%217 = OpIMul %uint %172 %uint_17
%218 = OpIAdd %uint %217 %188
%219 = OpAccessChain %_ptr_Workgroup_v4uint %22 %218
%221 = OpLoad %v4uint %176
OpStore %219 %221
OpBranch %181
%181 = OpLabel
%222 = OpLoad %int %174
%223 = OpIAdd %int %222 %int_1
OpStore %174 %223
OpBranch %178
%182 = OpLabel
OpReturn
OpFunctionEnd
%41 = OpFunction %void None %42
%224 = OpFunctionParameter %uint
%225 = OpFunctionParameter %uint
%226 = OpFunctionParameter %uint
%227 = OpFunctionParameter %uint
%228 = OpFunctionParameter %uint
%229 = OpFunctionParameter %uint
%230 = OpLabel
%231 = OpVariable %_ptr_Function_int Function
%232 = OpVariable %_ptr_Function_v4uint Function
OpStore %231 %int_0
OpBranch %233
%233 = OpLabel
OpLoopMerge %237 %236 None
OpBranch %234
%234 = OpLabel
%238 = OpLoad %int %231
%239 = OpSLessThan %bool %238 %int_2
OpBranchConditional %239 %235 %237
%235 = OpLabel
%240 = OpLoad %int %231
%241 = OpBitcast %uint %240
%242 = OpIMul %uint %241 %uint_8
%243 = OpIAdd %uint %228 %242
%244 = OpUDiv %uint %243 %uint_2
%245 = OpUMod %uint %243 %uint_2
OpStore %232 %191
%246 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%247 = OpLoad %uint %246
%248 = OpULessThan %bool %225 %247
OpSelectionMerge %249 None
OpBranchConditional %248 %250 %249
%250 = OpLabel
%251 = OpIMul %uint %225 %226
%252 = OpIAdd %uint %224 %251
%253 = OpIAdd %uint %252 %227
%254 = OpIMul %uint %253 %uint_32
%255 = OpIMul %uint %244 %uint_4
%256 = OpIAdd %uint %254 %255
%257 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %256
%258 = OpLoad %uint %257
%259 = OpIAdd %uint %256 %uint_1
%260 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %259
%261 = OpLoad %uint %260
%262 = OpIAdd %uint %256 %uint_2
%263 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %262
%264 = OpLoad %uint %263
%265 = OpIAdd %uint %256 %uint_3
%266 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %265
%267 = OpLoad %uint %266
%268 = OpIEqual %bool %245 %uint_0
OpSelectionMerge %269 None
OpBranchConditional %268 %270 %271
%270 = OpLabel
%273 = OpBitwiseAnd %uint %258 %uint_252645135
%274 = OpBitwiseAnd %uint %261 %uint_252645135
%275 = OpBitwiseAnd %uint %264 %uint_252645135
%276 = OpBitwiseAnd %uint %267 %uint_252645135
%277 = OpCompositeConstruct %v4uint %273 %274 %275 %276
OpStore %232 %277
OpBranch %269
%271 = OpLabel
%278 = OpShiftRightLogical %uint %258 %uint_4
%279 = OpBitwiseAnd %uint %278 %uint_252645135
%280 = OpShiftRightLogical %uint %261 %uint_4
%281 = OpBitwiseAnd %uint %280 %uint_252645135
%282 = OpShiftRightLogical %uint %264 %uint_4
%283 = OpBitwiseAnd %uint %282 %uint_252645135
%284 = OpShiftRightLogical %uint %267 %uint_4
%285 = OpBitwiseAnd %uint %284 %uint_252645135
%286 = OpCompositeConstruct %v4uint %279 %281 %283 %285
OpStore %232 %286
OpBranch %269
%269 = OpLabel
OpBranch %249
%249 = OpLabel
%287 = OpIMul %uint %229 %uint_17
%288 = OpIAdd %uint %287 %243
%289 = OpAccessChain %_ptr_Workgroup_v4uint %23 %288
%290 = OpLoad %v4uint %232
OpStore %289 %290
OpBranch %236
%236 = OpLabel
%291 = OpLoad %int %231
%292 = OpIAdd %int %291 %int_1
OpStore %231 %292
OpBranch %233
%237 = OpLabel
OpReturn
OpFunctionEnd
%43 = OpFunction %void None %42
%293 = OpFunctionParameter %uint
%294 = OpFunctionParameter %uint
%295 = OpFunctionParameter %uint
%296 = OpFunctionParameter %uint
%297 = OpFunctionParameter %uint
%298 = OpFunctionParameter %uint
%299 = OpLabel
%301 = OpVariable %_ptr_Function_float Function
%302 = OpULessThan %bool %298 %uint_32
OpSelectionMerge %303 None
OpBranchConditional %302 %304 %303
%304 = OpLabel
OpStore %301 %float_0
%305 = OpIMul %uint %294 %uint_32
%306 = OpIAdd %uint %305 %298
%307 = OpULessThan %bool %306 %295
OpSelectionMerge %308 None
OpBranchConditional %307 %309 %308
%309 = OpLabel
%310 = OpIMul %uint %294 %uint_32
%311 = OpIAdd %uint %293 %310
%312 = OpIAdd %uint %311 %298
%313 = OpIMul %uint %312 %296
%314 = OpIAdd %uint %313 %297
%315 = OpAccessChain %_ptr_StorageBuffer_float %13 %uint_0 %314
%317 = OpLoad %float %315
OpStore %301 %317
OpBranch %308
%308 = OpLabel
%318 = OpAccessChain %_ptr_Workgroup_float %27 %298
%319 = OpLoad %float %301
OpStore %318 %319
OpBranch %303
%303 = OpLabel
OpReturn
OpFunctionEnd
%44 = OpFunction %void None %45
%320 = OpFunctionParameter %uint
%321 = OpFunctionParameter %uint
%322 = OpFunctionParameter %uint
%323 = OpFunctionParameter %uint
%324 = OpFunctionParameter %uint
%325 = OpLabel
%326 = OpVariable %_ptr_Function_float Function
%327 = OpUMod %uint %324 %uint_32
%328 = OpUDiv %uint %324 %uint_32
OpStore %326 %float_0
%329 = OpIMul %uint %321 %uint_32
%330 = OpIAdd %uint %329 %327
%331 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%332 = OpLoad %uint %331
%333 = OpULessThan %bool %330 %332
OpSelectionMerge %334 None
OpBranchConditional %333 %335 %334
%335 = OpLabel
%336 = OpIMul %uint %321 %uint_32
%337 = OpIAdd %uint %336 %327
%338 = OpIMul %uint %337 %322
%339 = OpIAdd %uint %320 %338
%340 = OpIAdd %uint %339 %323
%342 = OpIMul %uint %340 %uint_5
%343 = OpUDiv %uint %328 %uint_2
%344 = OpIAdd %uint %342 %343
%345 = OpAccessChain %_ptr_StorageBuffer_uint %6 %uint_0 %344
%346 = OpLoad %uint %345
%349 = OpExtInst %v2float %347 UnpackHalf2x16 %346
%350 = OpUMod %uint %328 %uint_2
%351 = OpIEqual %bool %350 %uint_0
%352 = OpCompositeExtract %float %349 0
%353 = OpCompositeExtract %float %349 1
%354 = OpSelect %float %351 %352 %353
OpStore %326 %354
OpBranch %334
%334 = OpLabel
%355 = OpIMul %uint %328 %uint_32
%356 = OpIAdd %uint %355 %327
%357 = OpAccessChain %_ptr_Workgroup_float %28 %356
%358 = OpLoad %float %326
OpStore %357 %358
OpReturn
OpFunctionEnd
%47 = OpFunction %v4float None %48
%359 = OpFunctionParameter %uint
%360 = OpFunctionParameter %uint
%361 = OpFunctionParameter %uint
%362 = OpFunctionParameter %float
%363 = OpLabel
%364 = OpVariable %_ptr_Function_v4int Function
%365 = OpVariable %_ptr_Function_v4int Function
OpStore %364 %366
%368 = OpLoad %v4int %364
OpStore %365 %368
%367 = OpFunctionCall %int %52 %359 %360 %361 %365
%369 = OpLoad %v4int %365
OpStore %364 %369
%370 = OpIMul %uint %359 %uint_32
%371 = OpIAdd %uint %370 %361
%372 = OpAccessChain %_ptr_Workgroup_float %28 %371
%373 = OpLoad %float %372
%374 = OpIMul %uint %359 %uint_32
%375 = OpIAdd %uint %374 %361
%376 = OpIAdd %uint %375 %uint_8
%377 = OpAccessChain %_ptr_Workgroup_float %28 %376
%378 = OpLoad %float %377
%379 = OpIMul %uint %359 %uint_32
%380 = OpIAdd %uint %379 %361
%382 = OpIAdd %uint %380 %uint_16
%383 = OpAccessChain %_ptr_Workgroup_float %28 %382
%384 = OpLoad %float %383
%385 = OpIMul %uint %359 %uint_32
%386 = OpIAdd %uint %385 %361
%388 = OpIAdd %uint %386 %uint_24
%389 = OpAccessChain %_ptr_Workgroup_float %28 %388
%390 = OpLoad %float %389
%391 = OpCompositeConstruct %v4float %373 %378 %384 %390
%392 = OpVectorTimesScalar %v4float %391 %362
%393 = OpLoad %v4int %364
%394 = OpIMul %int %367 %int_8
%395 = OpCompositeConstruct %v4int %394 %394 %394 %394
%396 = OpISub %v4int %393 %395
%397 = OpConvertSToF %v4float %396
%398 = OpFMul %v4float %392 %397
OpReturnValue %398
OpFunctionEnd
%52 = OpFunction %int None %53
%399 = OpFunctionParameter %uint
%400 = OpFunctionParameter %uint
%401 = OpFunctionParameter %uint
%402 = OpFunctionParameter %_ptr_Function_v4int
%403 = OpLabel
%404 = OpVariable %_ptr_Function_int Function
%405 = OpVariable %_ptr_Function_int Function
OpStore %404 %int_0
OpStore %405 %int_0
OpBranch %406
%406 = OpLabel
OpLoopMerge %410 %409 None
OpBranch %407
%407 = OpLabel
%411 = OpLoad %int %405
%412 = OpSLessThan %bool %411 %int_2
OpBranchConditional %412 %408 %410
%408 = OpLabel
%413 = OpIMul %uint %399 %uint_2
%414 = OpLoad %int %405
%415 = OpBitcast %uint %414
%416 = OpIAdd %uint %413 %415
%417 = OpIMul %uint %400 %uint_17
%418 = OpIAdd %uint %417 %416
%419 = OpAccessChain %_ptr_Workgroup_v4uint %22 %418
%420 = OpLoad %v4uint %419
%421 = OpIMul %uint %401 %uint_17
%422 = OpIAdd %uint %421 %416
%423 = OpAccessChain %_ptr_Workgroup_v4uint %23 %422
%424 = OpLoad %v4uint %423
%425 = OpIAdd %uint %401 %uint_8
%426 = OpIMul %uint %425 %uint_17
%427 = OpIAdd %uint %426 %416
%428 = OpAccessChain %_ptr_Workgroup_v4uint %23 %427
%429 = OpLoad %v4uint %428
%430 = OpIAdd %uint %401 %uint_16
%431 = OpIMul %uint %430 %uint_17
%432 = OpIAdd %uint %431 %416
%433 = OpAccessChain %_ptr_Workgroup_v4uint %23 %432
%434 = OpLoad %v4uint %433
%435 = OpIAdd %uint %401 %uint_24
%436 = OpIMul %uint %435 %uint_17
%437 = OpIAdd %uint %436 %416
%438 = OpAccessChain %_ptr_Workgroup_v4uint %23 %437
%439 = OpLoad %v4uint %438
%440 = OpCompositeExtract %uint %420 0
%442 = OpSDot %int %440 %uint_16843009 PackedVectorFormat4x8Bit
%443 = OpCompositeExtract %uint %420 1
%444 = OpSDot %int %443 %uint_16843009 PackedVectorFormat4x8Bit
%445 = OpIAdd %int %442 %444
%446 = OpCompositeExtract %uint %420 2
%447 = OpSDot %int %446 %uint_16843009 PackedVectorFormat4x8Bit
%448 = OpIAdd %int %445 %447
%449 = OpCompositeExtract %uint %420 3
%450 = OpSDot %int %449 %uint_16843009 PackedVectorFormat4x8Bit
%451 = OpIAdd %int %448 %450
%452 = OpLoad %int %404
%453 = OpIAdd %int %452 %451
OpStore %404 %453
%454 = OpLoad %v4int %402
%455 = OpCompositeExtract %int %454 0
%456 = OpCompositeExtract %uint %424 0
%457 = OpCompositeExtract %uint %420 0
%458 = OpSDot %int %456 %457 PackedVectorFormat4x8Bit
%459 = OpCompositeExtract %uint %424 1
%460 = OpCompositeExtract %uint %420 1
%461 = OpSDot %int %459 %460 PackedVectorFormat4x8Bit
%462 = OpIAdd %int %458 %461
%463 = OpCompositeExtract %uint %424 2
%464 = OpCompositeExtract %uint %420 2
%465 = OpSDot %int %463 %464 PackedVectorFormat4x8Bit
%466 = OpIAdd %int %462 %465
%467 = OpCompositeExtract %uint %424 3
%468 = OpCompositeExtract %uint %420 3
%469 = OpSDot %int %467 %468 PackedVectorFormat4x8Bit
%470 = OpIAdd %int %466 %469
%471 = OpAccessChain %_ptr_Function_int %402 %uint_0
%472 = OpLoad %int %471
%473 = OpIAdd %int %472 %470
OpStore %471 %473
%474 = OpLoad %v4int %402
%475 = OpCompositeExtract %int %474 1
%476 = OpCompositeExtract %uint %429 0
%477 = OpCompositeExtract %uint %420 0
%478 = OpSDot %int %476 %477 PackedVectorFormat4x8Bit
%479 = OpCompositeExtract %uint %429 1
%480 = OpCompositeExtract %uint %420 1
%481 = OpSDot %int %479 %480 PackedVectorFormat4x8Bit
%482 = OpIAdd %int %478 %481
%483 = OpCompositeExtract %uint %429 2
%484 = OpCompositeExtract %uint %420 2
%485 = OpSDot %int %483 %484 PackedVectorFormat4x8Bit
%486 = OpIAdd %int %482 %485
%487 = OpCompositeExtract %uint %429 3
%488 = OpCompositeExtract %uint %420 3
%489 = OpSDot %int %487 %488 PackedVectorFormat4x8Bit
%490 = OpIAdd %int %486 %489
%491 = OpAccessChain %_ptr_Function_int %402 %uint_1
%492 = OpLoad %int %491
%493 = OpIAdd %int %492 %490
OpStore %491 %493
%494 = OpLoad %v4int %402
%495 = OpCompositeExtract %int %494 2
%496 = OpCompositeExtract %uint %434 0
%497 = OpCompositeExtract %uint %420 0
%498 = OpSDot %int %496 %497 PackedVectorFormat4x8Bit
%499 = OpCompositeExtract %uint %434 1
%500 = OpCompositeExtract %uint %420 1
%501 = OpSDot %int %499 %500 PackedVectorFormat4x8Bit
%502 = OpIAdd %int %498 %501
%503 = OpCompositeExtract %uint %434 2
%504 = OpCompositeExtract %uint %420 2
%505 = OpSDot %int %503 %504 PackedVectorFormat4x8Bit
%506 = OpIAdd %int %502 %505
%507 = OpCompositeExtract %uint %434 3
%508 = OpCompositeExtract %uint %420 3
%509 = OpSDot %int %507 %508 PackedVectorFormat4x8Bit
%510 = OpIAdd %int %506 %509
%511 = OpAccessChain %_ptr_Function_int %402 %uint_2
%512 = OpLoad %int %511
%513 = OpIAdd %int %512 %510
OpStore %511 %513
%514 = OpLoad %v4int %402
%515 = OpCompositeExtract %int %514 3
%516 = OpCompositeExtract %uint %439 0
%517 = OpCompositeExtract %uint %420 0
%518 = OpSDot %int %516 %517 PackedVectorFormat4x8Bit
%519 = OpCompositeExtract %uint %439 1
%520 = OpCompositeExtract %uint %420 1
%521 = OpSDot %int %519 %520 PackedVectorFormat4x8Bit
%522 = OpIAdd %int %518 %521
%523 = OpCompositeExtract %uint %439 2
%524 = OpCompositeExtract %uint %420 2
%525 = OpSDot %int %523 %524 PackedVectorFormat4x8Bit
%526 = OpIAdd %int %522 %525
%527 = OpCompositeExtract %uint %439 3
%528 = OpCompositeExtract %uint %420 3
%529 = OpSDot %int %527 %528 PackedVectorFormat4x8Bit
%530 = OpIAdd %int %526 %529
%531 = OpAccessChain %_ptr_Function_int %402 %uint_3
%532 = OpLoad %int %531
%533 = OpIAdd %int %532 %530
OpStore %531 %533
OpBranch %409
%409 = OpLabel
%534 = OpLoad %int %405
%535 = OpIAdd %int %534 %int_1
OpStore %405 %535
OpBranch %406
%410 = OpLabel
%536 = OpLoad %int %404
OpReturnValue %536
OpFunctionEnd
%54 = OpFunction %void None %55
%537 = OpFunctionParameter %uint
%538 = OpFunctionParameter %uint
%539 = OpFunctionParameter %uint
%540 = OpFunctionParameter %uint
%541 = OpFunctionParameter %uint
%542 = OpFunctionParameter %v4float
%543 = OpLabel
%544 = OpULessThan %bool %537 %538
OpSelectionMerge %545 None
OpBranchConditional %544 %546 %545
%546 = OpLabel
%547 = OpIAdd %uint %539 %537
%548 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%549 = OpLoad %uint %548
%550 = OpIMul %uint %547 %549
%551 = OpIMul %uint %540 %uint_32
%552 = OpIAdd %uint %550 %551
%553 = OpIAdd %uint %552 %541
%554 = OpIMul %uint %540 %uint_32
%555 = OpIAdd %uint %554 %541
%556 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%557 = OpLoad %uint %556
%558 = OpULessThan %bool %555 %557
OpSelectionMerge %559 None
OpBranchConditional %558 %560 %559
%560 = OpLabel
%561 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %553
%562 = OpCompositeExtract %float %542 0
OpStore %561 %562
OpBranch %559
%559 = OpLabel
%563 = OpIMul %uint %540 %uint_32
%564 = OpIAdd %uint %563 %541
%565 = OpIAdd %uint %564 %uint_8
%566 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%567 = OpLoad %uint %566
%568 = OpULessThan %bool %565 %567
OpSelectionMerge %569 None
OpBranchConditional %568 %570 %569
%570 = OpLabel
%571 = OpIAdd %uint %553 %uint_8
%572 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %571
%573 = OpCompositeExtract %float %542 1
OpStore %572 %573
OpBranch %569
%569 = OpLabel
%574 = OpIMul %uint %540 %uint_32
%575 = OpIAdd %uint %574 %541
%576 = OpIAdd %uint %575 %uint_16
%577 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%578 = OpLoad %uint %577
%579 = OpULessThan %bool %576 %578
OpSelectionMerge %580 None
OpBranchConditional %579 %581 %580
%581 = OpLabel
%582 = OpIAdd %uint %553 %uint_16
%583 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %582
%584 = OpCompositeExtract %float %542 2
OpStore %583 %584
OpBranch %580
%580 = OpLabel
%585 = OpIMul %uint %540 %uint_32
%586 = OpIAdd %uint %585 %541
%587 = OpIAdd %uint %586 %uint_24
%588 = OpAccessChain %_ptr_PushConstant_uint %17 %uint_1
%589 = OpLoad %uint %588
%590 = OpULessThan %bool %587 %589
OpSelectionMerge %591 None
OpBranchConditional %590 %592 %591
%592 = OpLabel
%593 = OpIAdd %uint %553 %uint_24
%594 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %593
%595 = OpCompositeExtract %float %542 3
OpStore %594 %595
OpBranch %591
%591 = OpLabel
OpBranch %545
%545 = OpLabel
OpReturn
OpFunctionEnd
; SPIR-V
; Version: 1.3
; Generator: Khronos; 0
; Bound: 483
; Schema: 0
OpCapability Shader
OpCapability StorageBuffer16BitAccess
OpCapability Float16
OpCapability DotProduct
OpCapability DotProductInput4x8BitPacked
OpExtension "SPV_KHR_integer_dot_product"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %41 "main" %gl_LocalInvocationID %gl_WorkGroupID
OpExecutionMode %41 LocalSize 256 1 1
OpDecorate %_runtimearr_uint ArrayStride 4
OpDecorate %_struct_3 Block
OpMemberDecorate %_struct_3 0 Offset 0
OpDecorate %5 DescriptorSet 0
OpDecorate %5 Binding 0
OpDecorate %_runtimearr_half ArrayStride 2
OpDecorate %_struct_8 Block
OpMemberDecorate %_struct_8 0 Offset 0
OpDecorate %10 DescriptorSet 0
OpDecorate %10 Binding 1
OpDecorate %11 DescriptorSet 0
OpDecorate %11 Binding 2
OpDecorate %12 DescriptorSet 0
OpDecorate %12 Binding 3
OpDecorate %_runtimearr_float ArrayStride 4
OpDecorate %_struct_15 Block
OpMemberDecorate %_struct_15 0 Offset 0
OpDecorate %17 DescriptorSet 0
OpDecorate %17 Binding 4
OpDecorate %18 DescriptorSet 0
OpDecorate %18 Binding 5
OpDecorate %_struct_19 Block
OpMemberDecorate %_struct_19 0 Offset 0
OpMemberDecorate %_struct_19 1 Offset 4
OpMemberDecorate %_struct_19 2 Offset 8
OpDecorate %gl_LocalInvocationID BuiltIn LocalInvocationId
OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId
%uint = OpTypeInt 32 0
%_runtimearr_uint = OpTypeRuntimeArray %uint
%_struct_3 = OpTypeStruct %_runtimearr_uint
%_ptr_StorageBuffer__struct_3 = OpTypePointer StorageBuffer %_struct_3
%5 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%half = OpTypeFloat 16
%_runtimearr_half = OpTypeRuntimeArray %half
%_struct_8 = OpTypeStruct %_runtimearr_half
%_ptr_StorageBuffer__struct_8 = OpTypePointer StorageBuffer %_struct_8
%10 = OpVariable %_ptr_StorageBuffer__struct_8 StorageBuffer
%11 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%12 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%float = OpTypeFloat 32
%_runtimearr_float = OpTypeRuntimeArray %float
%_struct_15 = OpTypeStruct %_runtimearr_float
%_ptr_StorageBuffer__struct_15 = OpTypePointer StorageBuffer %_struct_15
%17 = OpVariable %_ptr_StorageBuffer__struct_15 StorageBuffer
%18 = OpVariable %_ptr_StorageBuffer__struct_15 StorageBuffer
%_struct_19 = OpTypeStruct %uint %uint %uint
%_ptr_PushConstant__struct_19 = OpTypePointer PushConstant %_struct_19
%21 = OpVariable %_ptr_PushConstant__struct_19 PushConstant
%v4uint = OpTypeVector %uint 4
%uint_544 = OpConstant %uint 544
%_arr_v4uint_uint_544 = OpTypeArray %v4uint %uint_544
%_ptr_Workgroup__arr_v4uint_uint_544 = OpTypePointer Workgroup %_arr_v4uint_uint_544
%26 = OpVariable %_ptr_Workgroup__arr_v4uint_uint_544 Workgroup
%27 = OpVariable %_ptr_Workgroup__arr_v4uint_uint_544 Workgroup
%uint_256 = OpConstant %uint 256
%_arr_float_uint_256 = OpTypeArray %float %uint_256
%_ptr_Workgroup__arr_float_uint_256 = OpTypePointer Workgroup %_arr_float_uint_256
%31 = OpVariable %_ptr_Workgroup__arr_float_uint_256 Workgroup
%32 = OpVariable %_ptr_Workgroup__arr_float_uint_256 Workgroup
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%gl_LocalInvocationID = OpVariable %_ptr_Input_v3uint Input
%37 = OpTypeFunction %v4uint
%gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input
%void = OpTypeVoid
%40 = OpTypeFunction %void
%_ptr_Function_float = OpTypePointer Function %float
%_ptr_Function_uint = OpTypePointer Function %uint
%int = OpTypeInt 32 1
%_ptr_Function_int = OpTypePointer Function %int
%_ptr_Function_v4uint = OpTypePointer Function %v4uint
%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint
%uint_1 = OpConstant %uint 1
%uint_31 = OpConstant %uint 31
%uint_32 = OpConstant %uint 32
%uint_0 = OpConstant %uint 0
%uint_7 = OpConstant %uint 7
%uint_8 = OpConstant %uint 8
%_ptr_Input_uint = OpTypePointer Input %uint
%float_0 = OpConstant %float 0
%bool = OpTypeBool
%int_0 = OpConstant %int 0
%int_2 = OpConstant %int 2
%uint_2 = OpConstant %uint 2
%uint_4 = OpConstant %uint 4
%127 = OpConstantComposite %v4uint %uint_0 %uint_0 %uint_0 %uint_0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
%uint_3 = OpConstant %uint 3
%uint_17 = OpConstant %uint 17
%_ptr_Workgroup_v4uint = OpTypePointer Workgroup %v4uint
%int_1 = OpConstant %int 1
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
%_ptr_Workgroup_float = OpTypePointer Workgroup %float
%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
%uint_264 = OpConstant %uint 264
%int_8 = OpConstant %int 8
%uint_16 = OpConstant %uint 16
%uint_24 = OpConstant %uint 24
%41 = OpFunction %void None %40
%42 = OpLabel
%44 = OpVariable %_ptr_Function_float Function
%45 = OpVariable %_ptr_Function_float Function
%46 = OpVariable %_ptr_Function_float Function
%47 = OpVariable %_ptr_Function_float Function
%49 = OpVariable %_ptr_Function_uint Function
%52 = OpVariable %_ptr_Function_int Function
%54 = OpVariable %_ptr_Function_v4uint Function
%55 = OpVariable %_ptr_Function_v4uint Function
%56 = OpVariable %_ptr_Function_float Function
%57 = OpVariable %_ptr_Function_float Function
%58 = OpVariable %_ptr_Function_int Function
%59 = OpVariable %_ptr_Function_int Function
%60 = OpVariable %_ptr_Function_int Function
%61 = OpVariable %_ptr_Function_int Function
%62 = OpVariable %_ptr_Function_int Function
%63 = OpVariable %_ptr_Function_int Function
%64 = OpFunctionCall %v4uint %36
%65 = OpCompositeExtract %uint %64 0
%66 = OpCompositeExtract %uint %64 1
%67 = OpCompositeExtract %uint %64 2
%68 = OpCompositeExtract %uint %64 3
%70 = OpAccessChain %_ptr_PushConstant_uint %21 %uint_1
%72 = OpLoad %uint %70
%74 = OpIAdd %uint %72 %uint_31
%76 = OpUDiv %uint %74 %uint_32
%77 = OpUDiv %uint %68 %76
%78 = OpUMod %uint %68 %76
%79 = OpAccessChain %_ptr_PushConstant_uint %21 %uint_0
%81 = OpLoad %uint %79
%82 = OpUDiv %uint %81 %uint_32
%84 = OpIAdd %uint %82 %uint_7
%86 = OpUDiv %uint %84 %uint_8
%88 = OpAccessChain %_ptr_Input_uint %gl_LocalInvocationID %uint_0
%89 = OpLoad %uint %88
%90 = OpUMod %uint %89 %uint_8
%91 = OpUDiv %uint %89 %uint_8
%92 = OpIMul %uint %77 %uint_32
%93 = OpIAdd %uint %92 %91
%94 = OpIMul %uint %78 %uint_32
%95 = OpIAdd %uint %94 %91
%96 = OpUMod %uint %89 %uint_32
%97 = OpUDiv %uint %89 %uint_32
OpStore %44 %float_0
OpStore %45 %float_0
OpStore %46 %float_0
OpStore %47 %float_0
OpStore %49 %uint_0
OpBranch %99
%99 = OpLabel
OpLoopMerge %103 %102 None
OpBranch %100
%100 = OpLabel
%104 = OpLoad %uint %49
%106 = OpULessThan %bool %104 %86
OpBranchConditional %106 %101 %103
%101 = OpLabel
%107 = OpLoad %uint %49
%108 = OpIMul %uint %107 %uint_8
OpStore %52 %int_0
OpBranch %111
%111 = OpLabel
OpLoopMerge %115 %114 None
OpBranch %112
%112 = OpLabel
%116 = OpLoad %int %52
%117 = OpSLessThan %bool %116 %int_2
OpBranchConditional %117 %113 %115
%113 = OpLabel
%118 = OpLoad %int %52
%119 = OpBitcast %uint %118
%120 = OpIMul %uint %119 %uint_8
%121 = OpIAdd %uint %90 %120
%123 = OpUDiv %uint %121 %uint_2
%124 = OpUMod %uint %121 %uint_2
%126 = OpIMul %uint %124 %uint_4
OpStore %54 %127
%128 = OpULessThan %bool %93 %67
%129 = OpIAdd %uint %108 %123
%130 = OpULessThan %bool %129 %82
%131 = OpLogicalAnd %bool %128 %130
OpSelectionMerge %132 None
OpBranchConditional %131 %133 %132
%133 = OpLabel
%134 = OpIAdd %uint %66 %93
%135 = OpIMul %uint %134 %82
%136 = OpIAdd %uint %135 %108
%137 = OpIAdd %uint %136 %123
%138 = OpIMul %uint %137 %uint_8
%139 = OpIAdd %uint %138 %126
%140 = OpAccessChain %_ptr_StorageBuffer_uint %12 %uint_0 %139
%142 = OpLoad %uint %140
%143 = OpIAdd %uint %139 %uint_1
%144 = OpAccessChain %_ptr_StorageBuffer_uint %12 %uint_0 %143
%145 = OpLoad %uint %144
%146 = OpIAdd %uint %139 %uint_2
%147 = OpAccessChain %_ptr_StorageBuffer_uint %12 %uint_0 %146
%148 = OpLoad %uint %147
%150 = OpIAdd %uint %139 %uint_3
%151 = OpAccessChain %_ptr_StorageBuffer_uint %12 %uint_0 %150
%152 = OpLoad %uint %151
%153 = OpCompositeConstruct %v4uint %142 %145 %148 %152
OpStore %54 %153
OpBranch %132
%132 = OpLabel
%155 = OpIMul %uint %91 %uint_17
%156 = OpIAdd %uint %155 %121
%157 = OpAccessChain %_ptr_Workgroup_v4uint %26 %156
%159 = OpLoad %v4uint %54
OpStore %157 %159
OpStore %55 %127
%160 = OpAccessChain %_ptr_PushConstant_uint %21 %uint_1
%161 = OpLoad %uint %160
%162 = OpULessThan %bool %95 %161
%163 = OpIAdd %uint %108 %123
%164 = OpULessThan %bool %163 %82
%165 = OpLogicalAnd %bool %162 %164
OpSelectionMerge %166 None
OpBranchConditional %165 %167 %166
%167 = OpLabel
%168 = OpIMul %uint %95 %82
%169 = OpIAdd %uint %65 %168
%170 = OpIAdd %uint %169 %108
%171 = OpIAdd %uint %170 %123
%172 = OpIMul %uint %171 %uint_8
%173 = OpIAdd %uint %172 %126
%174 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %173
%175 = OpLoad %uint %174
%176 = OpIAdd %uint %173 %uint_1
%177 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %176
%178 = OpLoad %uint %177
%179 = OpIAdd %uint %173 %uint_2
%180 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %179
%181 = OpLoad %uint %180
%182 = OpIAdd %uint %173 %uint_3
%183 = OpAccessChain %_ptr_StorageBuffer_uint %5 %uint_0 %182
%184 = OpLoad %uint %183
%185 = OpCompositeConstruct %v4uint %175 %178 %181 %184
OpStore %55 %185
OpBranch %166
%166 = OpLabel
%186 = OpIMul %uint %91 %uint_17
%187 = OpIAdd %uint %186 %121
%188 = OpAccessChain %_ptr_Workgroup_v4uint %27 %187
%189 = OpLoad %v4uint %55
OpStore %188 %189
OpBranch %114
%114 = OpLabel
%190 = OpLoad %int %52
%191 = OpIAdd %int %190 %int_1
OpStore %52 %191
OpBranch %111
%115 = OpLabel
OpStore %56 %float_0
%193 = OpIMul %uint %77 %uint_32
%194 = OpIAdd %uint %193 %96
%195 = OpULessThan %bool %194 %67
%196 = OpIAdd %uint %108 %97
%197 = OpULessThan %bool %196 %82
%198 = OpLogicalAnd %bool %195 %197
OpSelectionMerge %199 None
OpBranchConditional %198 %200 %199
%200 = OpLabel
%201 = OpIMul %uint %77 %uint_32
%202 = OpIAdd %uint %66 %201
%203 = OpIAdd %uint %202 %96
%204 = OpIMul %uint %203 %82
%205 = OpIAdd %uint %204 %108
%206 = OpIAdd %uint %205 %97
%207 = OpAccessChain %_ptr_StorageBuffer_float %17 %uint_0 %206
%209 = OpLoad %float %207
OpStore %56 %209
OpBranch %199
%199 = OpLabel
%210 = OpIMul %uint %97 %uint_32
%211 = OpIAdd %uint %210 %96
%212 = OpAccessChain %_ptr_Workgroup_float %31 %211
%214 = OpLoad %float %56
OpStore %212 %214
OpStore %57 %float_0
%215 = OpIMul %uint %78 %uint_32
%216 = OpIAdd %uint %215 %96
%217 = OpAccessChain %_ptr_PushConstant_uint %21 %uint_1
%218 = OpLoad %uint %217
%219 = OpULessThan %bool %216 %218
%220 = OpIAdd %uint %108 %97
%221 = OpULessThan %bool %220 %82
%222 = OpLogicalAnd %bool %219 %221
OpSelectionMerge %223 None
OpBranchConditional %222 %224 %223
%224 = OpLabel
%225 = OpIMul %uint %78 %uint_32
%226 = OpIAdd %uint %225 %96
%227 = OpIMul %uint %226 %82
%228 = OpIAdd %uint %65 %227
%229 = OpIAdd %uint %228 %108
%230 = OpIAdd %uint %229 %97
%231 = OpAccessChain %_ptr_StorageBuffer_half %10 %uint_0 %230
%233 = OpLoad %half %231
%234 = OpFConvert %float %233
OpStore %57 %234
OpBranch %223
%223 = OpLabel
%235 = OpIMul %uint %97 %uint_32
%236 = OpIAdd %uint %235 %96
%237 = OpAccessChain %_ptr_Workgroup_float %32 %236
%238 = OpLoad %float %57
OpStore %237 %238
OpControlBarrier %uint_2 %uint_2 %uint_264
OpStore %58 %int_0
OpBranch %241
%241 = OpLabel
OpLoopMerge %245 %244 None
OpBranch %242
%242 = OpLabel
%246 = OpLoad %int %58
%247 = OpSLessThan %bool %246 %int_8
OpBranchConditional %247 %243 %245
%243 = OpLabel
%248 = OpLoad %int %58
%249 = OpBitcast %uint %248
OpStore %59 %int_0
OpStore %60 %int_0
OpStore %61 %int_0
OpStore %62 %int_0
OpStore %63 %int_0
OpBranch %250
%250 = OpLabel
OpLoopMerge %254 %253 None
OpBranch %251
%251 = OpLabel
%255 = OpLoad %int %63
%256 = OpSLessThan %bool %255 %int_2
OpBranchConditional %256 %252 %254
%252 = OpLabel
%257 = OpIMul %uint %249 %uint_2
%258 = OpLoad %int %63
%259 = OpBitcast %uint %258
%260 = OpIAdd %uint %257 %259
%261 = OpIMul %uint %91 %uint_17
%262 = OpIAdd %uint %261 %260
%263 = OpAccessChain %_ptr_Workgroup_v4uint %26 %262
%264 = OpLoad %v4uint %263
%265 = OpIMul %uint %90 %uint_17
%266 = OpIAdd %uint %265 %260
%267 = OpAccessChain %_ptr_Workgroup_v4uint %27 %266
%268 = OpLoad %v4uint %267
%269 = OpIAdd %uint %90 %uint_8
%270 = OpIMul %uint %269 %uint_17
%271 = OpIAdd %uint %270 %260
%272 = OpAccessChain %_ptr_Workgroup_v4uint %27 %271
%273 = OpLoad %v4uint %272
%275 = OpIAdd %uint %90 %uint_16
%276 = OpIMul %uint %275 %uint_17
%277 = OpIAdd %uint %276 %260
%278 = OpAccessChain %_ptr_Workgroup_v4uint %27 %277
%279 = OpLoad %v4uint %278
%281 = OpIAdd %uint %90 %uint_24
%282 = OpIMul %uint %281 %uint_17
%283 = OpIAdd %uint %282 %260
%284 = OpAccessChain %_ptr_Workgroup_v4uint %27 %283
%285 = OpLoad %v4uint %284
%286 = OpCompositeExtract %uint %268 0
%287 = OpCompositeExtract %uint %264 0
%288 = OpSDot %int %286 %287 PackedVectorFormat4x8Bit
%289 = OpCompositeExtract %uint %268 1
%290 = OpCompositeExtract %uint %264 1
%291 = OpSDot %int %289 %290 PackedVectorFormat4x8Bit
%292 = OpIAdd %int %288 %291
%293 = OpCompositeExtract %uint %268 2
%294 = OpCompositeExtract %uint %264 2
%295 = OpSDot %int %293 %294 PackedVectorFormat4x8Bit
%296 = OpIAdd %int %292 %295
%297 = OpCompositeExtract %uint %268 3
%298 = OpCompositeExtract %uint %264 3
%299 = OpSDot %int %297 %298 PackedVectorFormat4x8Bit
%300 = OpIAdd %int %296 %299
%301 = OpLoad %int %59
%302 = OpIAdd %int %301 %300
OpStore %59 %302
%303 = OpCompositeExtract %uint %273 0
%304 = OpCompositeExtract %uint %264 0
%305 = OpSDot %int %303 %304 PackedVectorFormat4x8Bit
%306 = OpCompositeExtract %uint %273 1
%307 = OpCompositeExtract %uint %264 1
%308 = OpSDot %int %306 %307 PackedVectorFormat4x8Bit
%309 = OpIAdd %int %305 %308
%310 = OpCompositeExtract %uint %273 2
%311 = OpCompositeExtract %uint %264 2
%312 = OpSDot %int %310 %311 PackedVectorFormat4x8Bit
%313 = OpIAdd %int %309 %312
%314 = OpCompositeExtract %uint %273 3
%315 = OpCompositeExtract %uint %264 3
%316 = OpSDot %int %314 %315 PackedVectorFormat4x8Bit
%317 = OpIAdd %int %313 %316
%318 = OpLoad %int %60
%319 = OpIAdd %int %318 %317
OpStore %60 %319
%320 = OpCompositeExtract %uint %279 0
%321 = OpCompositeExtract %uint %264 0
%322 = OpSDot %int %320 %321 PackedVectorFormat4x8Bit
%323 = OpCompositeExtract %uint %279 1
%324 = OpCompositeExtract %uint %264 1
%325 = OpSDot %int %323 %324 PackedVectorFormat4x8Bit
%326 = OpIAdd %int %322 %325
%327 = OpCompositeExtract %uint %279 2
%328 = OpCompositeExtract %uint %264 2
%329 = OpSDot %int %327 %328 PackedVectorFormat4x8Bit
%330 = OpIAdd %int %326 %329
%331 = OpCompositeExtract %uint %279 3
%332 = OpCompositeExtract %uint %264 3
%333 = OpSDot %int %331 %332 PackedVectorFormat4x8Bit
%334 = OpIAdd %int %330 %333
%335 = OpLoad %int %61
%336 = OpIAdd %int %335 %334
OpStore %61 %336
%337 = OpCompositeExtract %uint %285 0
%338 = OpCompositeExtract %uint %264 0
%339 = OpSDot %int %337 %338 PackedVectorFormat4x8Bit
%340 = OpCompositeExtract %uint %285 1
%341 = OpCompositeExtract %uint %264 1
%342 = OpSDot %int %340 %341 PackedVectorFormat4x8Bit
%343 = OpIAdd %int %339 %342
%344 = OpCompositeExtract %uint %285 2
%345 = OpCompositeExtract %uint %264 2
%346 = OpSDot %int %344 %345 PackedVectorFormat4x8Bit
%347 = OpIAdd %int %343 %346
%348 = OpCompositeExtract %uint %285 3
%349 = OpCompositeExtract %uint %264 3
%350 = OpSDot %int %348 %349 PackedVectorFormat4x8Bit
%351 = OpIAdd %int %347 %350
%352 = OpLoad %int %62
%353 = OpIAdd %int %352 %351
OpStore %62 %353
OpBranch %253
%253 = OpLabel
%354 = OpLoad %int %63
%355 = OpIAdd %int %354 %int_1
OpStore %63 %355
OpBranch %250
%254 = OpLabel
%356 = OpIMul %uint %249 %uint_32
%357 = OpIAdd %uint %356 %91
%358 = OpAccessChain %_ptr_Workgroup_float %31 %357
%359 = OpLoad %float %358
%360 = OpLoad %int %59
%361 = OpConvertSToF %float %360
%362 = OpIMul %uint %249 %uint_32
%363 = OpIAdd %uint %362 %90
%364 = OpAccessChain %_ptr_Workgroup_float %32 %363
%365 = OpLoad %float %364
%366 = OpFMul %float %361 %365
%367 = OpFMul %float %366 %359
%368 = OpLoad %float %44
%369 = OpFAdd %float %368 %367
OpStore %44 %369
%370 = OpLoad %int %60
%371 = OpConvertSToF %float %370
%372 = OpIMul %uint %249 %uint_32
%373 = OpIAdd %uint %372 %90
%374 = OpIAdd %uint %373 %uint_8
%375 = OpAccessChain %_ptr_Workgroup_float %32 %374
%376 = OpLoad %float %375
%377 = OpFMul %float %371 %376
%378 = OpFMul %float %377 %359
%379 = OpLoad %float %45
%380 = OpFAdd %float %379 %378
OpStore %45 %380
%381 = OpLoad %int %61
%382 = OpConvertSToF %float %381
%383 = OpIMul %uint %249 %uint_32
%384 = OpIAdd %uint %383 %90
%385 = OpIAdd %uint %384 %uint_16
%386 = OpAccessChain %_ptr_Workgroup_float %32 %385
%387 = OpLoad %float %386
%388 = OpFMul %float %382 %387
%389 = OpFMul %float %388 %359
%390 = OpLoad %float %46
%391 = OpFAdd %float %390 %389
OpStore %46 %391
%392 = OpLoad %int %62
%393 = OpConvertSToF %float %392
%394 = OpIMul %uint %249 %uint_32
%395 = OpIAdd %uint %394 %90
%396 = OpIAdd %uint %395 %uint_24
%397 = OpAccessChain %_ptr_Workgroup_float %32 %396
%398 = OpLoad %float %397
%399 = OpFMul %float %393 %398
%400 = OpFMul %float %399 %359
%401 = OpLoad %float %47
%402 = OpFAdd %float %401 %400
OpStore %47 %402
OpBranch %244
%244 = OpLabel
%403 = OpLoad %int %58
%404 = OpIAdd %int %403 %int_1
OpStore %58 %404
OpBranch %241
%245 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
%405 = OpLoad %uint %49
%406 = OpIAdd %uint %405 %uint_1
OpStore %49 %406
OpBranch %102
%102 = OpLabel
OpBranch %99
%103 = OpLabel
%407 = OpULessThan %bool %93 %67
OpSelectionMerge %408 None
OpBranchConditional %407 %409 %408
%409 = OpLabel
%410 = OpIAdd %uint %66 %93
%411 = OpAccessChain %_ptr_PushConstant_uint %21 %uint_1
%412 = OpLoad %uint %411
%413 = OpIMul %uint %410 %412
%414 = OpIMul %uint %78 %uint_32
%415 = OpIAdd %uint %413 %414
%416 = OpIAdd %uint %415 %90
%417 = OpIMul %uint %78 %uint_32
%418 = OpIAdd %uint %417 %90
%419 = OpAccessChain %_ptr_PushConstant_uint %21 %uint_1
%420 = OpLoad %uint %419
%421 = OpULessThan %bool %418 %420
OpSelectionMerge %422 None
OpBranchConditional %421 %423 %422
%423 = OpLabel
%424 = OpAccessChain %_ptr_StorageBuffer_float %18 %uint_0 %416
%425 = OpLoad %float %44
OpStore %424 %425
OpBranch %422
%422 = OpLabel
%426 = OpIMul %uint %78 %uint_32
%427 = OpIAdd %uint %426 %90
%428 = OpIAdd %uint %427 %uint_8
%429 = OpAccessChain %_ptr_PushConstant_uint %21 %uint_1
%430 = OpLoad %uint %429
%431 = OpULessThan %bool %428 %430
OpSelectionMerge %432 None
OpBranchConditional %431 %433 %432
%433 = OpLabel
%434 = OpIAdd %uint %416 %uint_8
%435 = OpAccessChain %_ptr_StorageBuffer_float %18 %uint_0 %434
%436 = OpLoad %float %45
OpStore %435 %436
OpBranch %432
%432 = OpLabel
%437 = OpIMul %uint %78 %uint_32
%438 = OpIAdd %uint %437 %90
%439 = OpIAdd %uint %438 %uint_16
%440 = OpAccessChain %_ptr_PushConstant_uint %21 %uint_1
%441 = OpLoad %uint %440
%442 = OpULessThan %bool %439 %441
OpSelectionMerge %443 None
OpBranchConditional %442 %444 %443
%444 = OpLabel
%445 = OpIAdd %uint %416 %uint_16
%446 = OpAccessChain %_ptr_StorageBuffer_float %18 %uint_0 %445
%447 = OpLoad %float %46
OpStore %446 %447
OpBranch %443
%443 = OpLabel
%448 = OpIMul %uint %78 %uint_32
%449 = OpIAdd %uint %448 %90
%450 = OpIAdd %uint %449 %uint_24
%451 = OpAccessChain %_ptr_PushConstant_uint %21 %uint_1
%452 = OpLoad %uint %451
%453 = OpULessThan %bool %450 %452
OpSelectionMerge %454 None
OpBranchConditional %453 %455 %454
%455 = OpLabel
%456 = OpIAdd %uint %416 %uint_24
%457 = OpAccessChain %_ptr_StorageBuffer_float %18 %uint_0 %456
%458 = OpLoad %float %47
OpStore %457 %458
OpBranch %454
%454 = OpLabel
OpBranch %408
%408 = OpLabel
OpReturn
OpFunctionEnd
%36 = OpFunction %v4uint None %37
%459 = OpLabel
%460 = OpAccessChain %_ptr_PushConstant_uint %21 %uint_2
%461 = OpLoad %uint %460
%462 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_0
%463 = OpLoad %uint %462
%464 = OpIAdd %uint %461 %463
%465 = OpAccessChain %_ptr_StorageBuffer_uint %11 %uint_0 %464
%466 = OpLoad %uint %465
%467 = OpIMul %uint %466 %uint_4
%468 = OpAccessChain %_ptr_StorageBuffer_uint %11 %uint_0 %467
%469 = OpLoad %uint %468
%470 = OpIAdd %uint %467 %uint_1
%471 = OpAccessChain %_ptr_StorageBuffer_uint %11 %uint_0 %470
%472 = OpLoad %uint %471
%473 = OpIAdd %uint %467 %uint_2
%474 = OpAccessChain %_ptr_StorageBuffer_uint %11 %uint_0 %473
%475 = OpLoad %uint %474
%476 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_0
%477 = OpLoad %uint %476
%478 = OpIAdd %uint %467 %uint_3
%479 = OpAccessChain %_ptr_StorageBuffer_uint %11 %uint_0 %478
%480 = OpLoad %uint %479
%481 = OpISub %uint %477 %480
%482 = OpCompositeConstruct %v4uint %469 %472 %475 %481
OpReturnValue %482
OpFunctionEnd
; SPIR-V
; Version: 1.3
; Generator: Khronos; 0
; Bound: 177
; Schema: 0
OpCapability Shader
OpCapability StorageBuffer16BitAccess
OpCapability Float16
OpCapability GroupNonUniform
OpCapability DotProduct
OpCapability DotProductInput4x8BitPacked
OpCapability GroupNonUniformShuffle
OpCapability GroupNonUniformArithmetic
OpExtension "SPV_KHR_integer_dot_product"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %36 "main" %NumSubgroups %SubgroupId %SubgroupLocalInvocationId %SubgroupSize %gl_WorkGroupID
OpExecutionMode %36 LocalSize 64 1 1
OpDecorate %_runtimearr_v4uint ArrayStride 16
OpDecorate %_struct_4 Block
OpMemberDecorate %_struct_4 0 Offset 0
OpDecorate %6 DescriptorSet 0
OpDecorate %6 Binding 0
OpDecorate %_runtimearr_half ArrayStride 2
OpDecorate %_struct_9 Block
OpMemberDecorate %_struct_9 0 Offset 0
OpDecorate %11 DescriptorSet 0
OpDecorate %11 Binding 1
OpDecorate %_runtimearr_uint ArrayStride 4
OpDecorate %_struct_13 Block
OpMemberDecorate %_struct_13 0 Offset 0
OpDecorate %15 DescriptorSet 0
OpDecorate %15 Binding 2
OpDecorate %16 DescriptorSet 0
OpDecorate %16 Binding 3
OpDecorate %_runtimearr_float ArrayStride 4
OpDecorate %_struct_19 Block
OpMemberDecorate %_struct_19 0 Offset 0
OpDecorate %21 DescriptorSet 0
OpDecorate %21 Binding 4
OpDecorate %22 DescriptorSet 0
OpDecorate %22 Binding 5
OpDecorate %_struct_23 Block
OpMemberDecorate %_struct_23 0 Offset 0
OpMemberDecorate %_struct_23 1 Offset 4
OpMemberDecorate %_struct_23 2 Offset 8
OpMemberDecorate %_struct_23 3 Offset 12
OpDecorate %NumSubgroups BuiltIn NumSubgroups
OpDecorate %SubgroupId BuiltIn SubgroupId
OpDecorate %SubgroupLocalInvocationId BuiltIn SubgroupLocalInvocationId
OpDecorate %SubgroupSize BuiltIn SubgroupSize
OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId
OpDecorate %37 SpecId 0
OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
%uint = OpTypeInt 32 0
%v4uint = OpTypeVector %uint 4
%_runtimearr_v4uint = OpTypeRuntimeArray %v4uint
%_struct_4 = OpTypeStruct %_runtimearr_v4uint
%_ptr_StorageBuffer__struct_4 = OpTypePointer StorageBuffer %_struct_4
%6 = OpVariable %_ptr_StorageBuffer__struct_4 StorageBuffer
%half = OpTypeFloat 16
%_runtimearr_half = OpTypeRuntimeArray %half
%_struct_9 = OpTypeStruct %_runtimearr_half
%_ptr_StorageBuffer__struct_9 = OpTypePointer StorageBuffer %_struct_9
%11 = OpVariable %_ptr_StorageBuffer__struct_9 StorageBuffer
%_runtimearr_uint = OpTypeRuntimeArray %uint
%_struct_13 = OpTypeStruct %_runtimearr_uint
%_ptr_StorageBuffer__struct_13 = OpTypePointer StorageBuffer %_struct_13
%15 = OpVariable %_ptr_StorageBuffer__struct_13 StorageBuffer
%16 = OpVariable %_ptr_StorageBuffer__struct_13 StorageBuffer
%float = OpTypeFloat 32
%_runtimearr_float = OpTypeRuntimeArray %float
%_struct_19 = OpTypeStruct %_runtimearr_float
%_ptr_StorageBuffer__struct_19 = OpTypePointer StorageBuffer %_struct_19
%21 = OpVariable %_ptr_StorageBuffer__struct_19 StorageBuffer
%22 = OpVariable %_ptr_StorageBuffer__struct_19 StorageBuffer
%_struct_23 = OpTypeStruct %uint %uint %uint %uint
%_ptr_PushConstant__struct_23 = OpTypePointer PushConstant %_struct_23
%25 = OpVariable %_ptr_PushConstant__struct_23 PushConstant
%_ptr_Input_uint = OpTypePointer Input %uint
%NumSubgroups = OpVariable %_ptr_Input_uint Input
%SubgroupId = OpVariable %_ptr_Input_uint Input
%SubgroupLocalInvocationId = OpVariable %_ptr_Input_uint Input
%SubgroupSize = OpVariable %_ptr_Input_uint Input
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input
%void = OpTypeVoid
%35 = OpTypeFunction %void
%37 = OpSpecConstant %uint 64
%uint_1 = OpConstant %uint 1
%gl_WorkGroupSize = OpSpecConstantComposite %v3uint %37 %uint_1 %uint_1
%_ptr_Function_float = OpTypePointer Function %float
%_ptr_Function_uint = OpTypePointer Function %uint
%int = OpTypeInt 32 1
%_ptr_Function_int = OpTypePointer Function %int
%uint_0 = OpConstant %uint 0
%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint
%uint_2 = OpConstant %uint 2
%bool = OpTypeBool
%uint_32 = OpConstant %uint 32
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
%float_0 = OpConstant %float 0
%_ptr_StorageBuffer_v4uint = OpTypePointer StorageBuffer %v4uint
%uint_8 = OpConstant %uint 8
%uint_4 = OpConstant %uint 4
%uint_3 = OpConstant %uint 3
%_ptr_StorageBuffer_half = OpTypePointer StorageBuffer %half
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
%36 = OpFunction %void None %35
%40 = OpLabel
%42 = OpVariable %_ptr_Function_float Function
%44 = OpVariable %_ptr_Function_uint Function
%47 = OpVariable %_ptr_Function_int Function
%48 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_0
%50 = OpLoad %uint %48
%51 = OpLoad %uint %NumSubgroups
%52 = OpIMul %uint %50 %51
%53 = OpLoad %uint %SubgroupId
%54 = OpIAdd %uint %52 %53
%56 = OpAccessChain %_ptr_PushConstant_uint %25 %uint_2
%58 = OpLoad %uint %56
%59 = OpAccessChain %_ptr_PushConstant_uint %25 %uint_1
%60 = OpLoad %uint %59
%61 = OpIMul %uint %58 %60
%63 = OpULessThan %bool %54 %61
OpSelectionMerge %64 None
OpBranchConditional %63 %65 %64
%65 = OpLabel
%66 = OpAccessChain %_ptr_PushConstant_uint %25 %uint_1
%67 = OpLoad %uint %66
%68 = OpUDiv %uint %54 %67
%69 = OpAccessChain %_ptr_PushConstant_uint %25 %uint_1
%70 = OpLoad %uint %69
%71 = OpUMod %uint %54 %70
%72 = OpAccessChain %_ptr_PushConstant_uint %25 %uint_0
%73 = OpLoad %uint %72
%75 = OpUDiv %uint %73 %uint_32
%76 = OpIMul %uint %68 %uint_2
%77 = OpAccessChain %_ptr_StorageBuffer_uint %15 %uint_0 %76
%79 = OpLoad %uint %77
%80 = OpIMul %uint %71 %75
%81 = OpIAdd %uint %79 %80
%82 = OpIMul %uint %68 %uint_2
%83 = OpIAdd %uint %82 %uint_1
%84 = OpAccessChain %_ptr_StorageBuffer_uint %15 %uint_0 %83
%85 = OpLoad %uint %84
%86 = OpLoad %uint %SubgroupLocalInvocationId
%87 = OpLoad %uint %SubgroupSize
%88 = OpUDiv %uint %87 %uint_2
OpStore %42 %float_0
OpStore %44 %uint_0
OpBranch %90
%90 = OpLabel
OpLoopMerge %94 %93 None
OpBranch %91
%91 = OpLabel
%95 = OpLoad %uint %44
%96 = OpULessThan %bool %95 %75
OpBranchConditional %96 %92 %94
%92 = OpLabel
%97 = OpLoad %uint %44
%98 = OpUDiv %uint %86 %uint_2
%99 = OpIAdd %uint %97 %98
%100 = OpULessThan %bool %99 %75
OpSelectionMerge %101 None
OpBranchConditional %100 %102 %101
%102 = OpLabel
%103 = OpLoad %uint %44
%104 = OpIAdd %uint %81 %103
%105 = OpIMul %uint %104 %uint_2
%106 = OpIAdd %uint %105 %86
%107 = OpAccessChain %_ptr_StorageBuffer_v4uint %6 %uint_0 %106
%109 = OpLoad %v4uint %107
%110 = OpLoad %uint %44
%111 = OpIAdd %uint %85 %110
%113 = OpIMul %uint %111 %uint_8
%115 = OpIMul %uint %86 %uint_4
%116 = OpIAdd %uint %113 %115
%117 = OpCompositeExtract %uint %109 0
%118 = OpAccessChain %_ptr_StorageBuffer_uint %16 %uint_0 %116
%119 = OpLoad %uint %118
%120 = OpSDot %int %117 %119 PackedVectorFormat4x8Bit
OpStore %47 %120
%121 = OpCompositeExtract %uint %109 1
%122 = OpIAdd %uint %116 %uint_1
%123 = OpAccessChain %_ptr_StorageBuffer_uint %16 %uint_0 %122
%124 = OpLoad %uint %123
%125 = OpSDot %int %121 %124 PackedVectorFormat4x8Bit
%126 = OpLoad %int %47
%127 = OpIAdd %int %126 %125
OpStore %47 %127
%128 = OpCompositeExtract %uint %109 2
%129 = OpIAdd %uint %116 %uint_2
%130 = OpAccessChain %_ptr_StorageBuffer_uint %16 %uint_0 %129
%131 = OpLoad %uint %130
%132 = OpSDot %int %128 %131 PackedVectorFormat4x8Bit
%133 = OpLoad %int %47
%134 = OpIAdd %int %133 %132
OpStore %47 %134
%135 = OpCompositeExtract %uint %109 3
%137 = OpIAdd %uint %116 %uint_3
%138 = OpAccessChain %_ptr_StorageBuffer_uint %16 %uint_0 %137
%139 = OpLoad %uint %138
%140 = OpSDot %int %135 %139 PackedVectorFormat4x8Bit
%141 = OpLoad %int %47
%142 = OpIAdd %int %141 %140
OpStore %47 %142
%143 = OpLoad %int %47
%144 = OpGroupNonUniformShuffleXor %int %uint_3 %143 %uint_1
%145 = OpLoad %int %47
%146 = OpIAdd %int %145 %144
OpStore %47 %146
%147 = OpUMod %uint %86 %uint_2
%148 = OpIEqual %bool %147 %uint_0
OpSelectionMerge %149 None
OpBranchConditional %148 %150 %149
%150 = OpLabel
%151 = OpLoad %int %47
%152 = OpConvertSToF %float %151
%153 = OpIAdd %uint %81 %99
%154 = OpAccessChain %_ptr_StorageBuffer_half %11 %uint_0 %153
%156 = OpLoad %half %154
%157 = OpFConvert %float %156
%158 = OpFMul %float %152 %157
%159 = OpIAdd %uint %85 %99
%160 = OpAccessChain %_ptr_StorageBuffer_float %21 %uint_0 %159
%162 = OpLoad %float %160
%163 = OpFMul %float %158 %162
%164 = OpLoad %float %42
%165 = OpFAdd %float %164 %163
OpStore %42 %165
OpBranch %149
%149 = OpLabel
OpBranch %101
%101 = OpLabel
%166 = OpLoad %uint %44
%167 = OpIAdd %uint %166 %88
OpStore %44 %167
OpBranch %93
%93 = OpLabel
OpBranch %90
%94 = OpLabel
%168 = OpLoad %float %42
%169 = OpGroupNonUniformFAdd %float %uint_3 Reduce %168
%170 = OpGroupNonUniformElect %bool %uint_3
OpSelectionMerge %171 None
OpBranchConditional %170 %172 %171
%172 = OpLabel
%173 = OpAccessChain %_ptr_PushConstant_uint %25 %uint_3
%174 = OpLoad %uint %173
%175 = OpIAdd %uint %174 %54
%176 = OpAccessChain %_ptr_StorageBuffer_float %22 %uint_0 %175
OpStore %176 %169
OpBranch %171
%171 = OpLabel
OpBranch %64
%64 = OpLabel
OpReturn
OpFunctionEnd
; SPIR-V
; Version: 1.3
; Generator: Khronos; 0
; Bound: 276
; Schema: 0
OpCapability Shader
OpCapability GroupNonUniform
OpCapability GroupNonUniformArithmetic
%271 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %44 "main" %gl_LocalInvocationID %gl_WorkGroupID %NumSubgroups %SubgroupId %SubgroupLocalInvocationId
OpExecutionMode %44 LocalSize 256 1 1
OpDecorate %_runtimearr_float ArrayStride 4
OpDecorate %_struct_12 Block
OpMemberDecorate %_struct_12 0 Offset 0
OpDecorate %14 DescriptorSet 0
OpDecorate %14 Binding 0
OpDecorate %15 DescriptorSet 0
OpDecorate %15 Binding 1
OpDecorate %16 DescriptorSet 0
OpDecorate %16 Binding 2
OpDecorate %17 DescriptorSet 0
OpDecorate %17 Binding 3
OpDecorate %18 DescriptorSet 0
OpDecorate %18 Binding 4
OpDecorate %19 DescriptorSet 0
OpDecorate %19 Binding 5
OpMemberDecorate %_struct_20 0 Offset 0
OpMemberDecorate %_struct_20 1 Offset 4
OpMemberDecorate %_struct_20 2 Offset 8
OpMemberDecorate %_struct_20 3 Offset 12
OpDecorate %_runtimearr__struct_20 ArrayStride 16
OpDecorate %_struct_22 Block
OpMemberDecorate %_struct_22 0 Offset 0
OpDecorate %24 DescriptorSet 0
OpDecorate %24 Binding 6
OpDecorate %_struct_25 Block
OpMemberDecorate %_struct_25 0 Offset 0
OpMemberDecorate %_struct_25 1 Offset 4
OpMemberDecorate %_struct_25 2 Offset 8
OpMemberDecorate %_struct_25 3 Offset 12
OpMemberDecorate %_struct_25 4 Offset 16
OpMemberDecorate %_struct_25 5 Offset 20
OpMemberDecorate %_struct_25 6 Offset 24
OpMemberDecorate %_struct_25 7 Offset 28
OpMemberDecorate %_struct_25 8 Offset 32
OpMemberDecorate %_struct_25 9 Offset 36
OpDecorate %gl_LocalInvocationID BuiltIn LocalInvocationId
OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId
OpDecorate %NumSubgroups BuiltIn NumSubgroups
OpDecorate %SubgroupId BuiltIn SubgroupId
OpDecorate %SubgroupLocalInvocationId BuiltIn SubgroupLocalInvocationId
%float = OpTypeFloat 32
%uint = OpTypeInt 32 0
%uint_64 = OpConstant %uint 64
%_arr_float_uint_64 = OpTypeArray %float %uint_64
%_ptr_Workgroup__arr_float_uint_64 = OpTypePointer Workgroup %_arr_float_uint_64
%6 = OpVariable %_ptr_Workgroup__arr_float_uint_64 Workgroup
%uint_1 = OpConstant %uint 1
%_arr_float_uint_1 = OpTypeArray %float %uint_1
%_ptr_Workgroup__arr_float_uint_1 = OpTypePointer Workgroup %_arr_float_uint_1
%10 = OpVariable %_ptr_Workgroup__arr_float_uint_1 Workgroup
%_runtimearr_float = OpTypeRuntimeArray %float
%_struct_12 = OpTypeStruct %_runtimearr_float
%_ptr_StorageBuffer__struct_12 = OpTypePointer StorageBuffer %_struct_12
%14 = OpVariable %_ptr_StorageBuffer__struct_12 StorageBuffer
%15 = OpVariable %_ptr_StorageBuffer__struct_12 StorageBuffer
%16 = OpVariable %_ptr_StorageBuffer__struct_12 StorageBuffer
%17 = OpVariable %_ptr_StorageBuffer__struct_12 StorageBuffer
%18 = OpVariable %_ptr_StorageBuffer__struct_12 StorageBuffer
%19 = OpVariable %_ptr_StorageBuffer__struct_12 StorageBuffer
%_struct_20 = OpTypeStruct %uint %uint %uint %uint
%_runtimearr__struct_20 = OpTypeRuntimeArray %_struct_20
%_struct_22 = OpTypeStruct %_runtimearr__struct_20
%_ptr_StorageBuffer__struct_22 = OpTypePointer StorageBuffer %_struct_22
%24 = OpVariable %_ptr_StorageBuffer__struct_22 StorageBuffer
%_struct_25 = OpTypeStruct %uint %uint %uint %uint %uint %uint %uint %uint %uint %float
%_ptr_PushConstant__struct_25 = OpTypePointer PushConstant %_struct_25
%27 = OpVariable %_ptr_PushConstant__struct_25 PushConstant
%uint_256 = OpConstant %uint 256
%_arr_float_uint_256 = OpTypeArray %float %uint_256
%_ptr_Workgroup__arr_float_uint_256 = OpTypePointer Workgroup %_arr_float_uint_256
%31 = OpVariable %_ptr_Workgroup__arr_float_uint_256 Workgroup
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%gl_LocalInvocationID = OpVariable %_ptr_Input_v3uint Input
%gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input
%37 = OpTypeFunction %float %float %uint %float
%_ptr_Input_uint = OpTypePointer Input %uint
%NumSubgroups = OpVariable %_ptr_Input_uint Input
%SubgroupId = OpVariable %_ptr_Input_uint Input
%SubgroupLocalInvocationId = OpVariable %_ptr_Input_uint Input
%void = OpTypeVoid
%43 = OpTypeFunction %void
%_ptr_Function_float = OpTypePointer Function %float
%uint_0 = OpConstant %uint 0
%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint
%uint_5 = OpConstant %uint 5
%bool = OpTypeBool
%uint_2 = OpConstant %uint 2
%float_0 = OpConstant %float 0
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
%_ptr_PushConstant_float = OpTypePointer PushConstant %float
%uint_9 = OpConstant %uint 9
%_ptr_Workgroup_float = OpTypePointer Workgroup %float
%uint_8 = OpConstant %uint 8
%uint_7 = OpConstant %uint 7
%uint_264 = OpConstant %uint 264
%uint_3 = OpConstant %uint 3
%uint_4 = OpConstant %uint 4
%uint_6 = OpConstant %uint 6
%_ptr_StorageBuffer__struct_20 = OpTypePointer StorageBuffer %_struct_20
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
%_ptr_Function_uint = OpTypePointer Function %uint
%float_1 = OpConstant %float 1
%44 = OpFunction %void None %43
%45 = OpLabel
%47 = OpVariable %_ptr_Function_float Function
%48 = OpAccessChain %_ptr_Input_uint %gl_WorkGroupID %uint_0
%50 = OpLoad %uint %48
%52 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_5
%54 = OpLoad %uint %52
%56 = OpUGreaterThanEqual %bool %50 %54
%57 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_5
%58 = OpLoad %uint %57
%59 = OpISub %uint %50 %58
%60 = OpSelect %uint %56 %59 %50
%61 = OpAccessChain %_ptr_Input_uint %gl_LocalInvocationID %uint_0
%62 = OpLoad %uint %61
%63 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_0
%64 = OpLoad %uint %63
%65 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_2
%67 = OpLoad %uint %65
%68 = OpIMul %uint %60 %67
%69 = OpIAdd %uint %64 %68
%70 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_2
%71 = OpLoad %uint %70
%72 = OpIMul %uint %60 %71
%73 = OpSelect %uint %56 %69 %72
OpStore %47 %float_0
%75 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_2
%76 = OpLoad %uint %75
%77 = OpULessThan %bool %62 %76
OpSelectionMerge %78 None
OpBranchConditional %77 %79 %78
%79 = OpLabel
%80 = OpIAdd %uint %73 %62
%81 = OpAccessChain %_ptr_StorageBuffer_float %15 %uint_0 %80
%83 = OpIAdd %uint %73 %62
%84 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %83
%85 = OpLoad %float %81
%86 = OpLoad %float %84
%87 = OpSelect %float %56 %85 %86
OpStore %47 %87
OpBranch %78
%78 = OpLabel
%88 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_2
%89 = OpLoad %uint %88
%90 = OpULessThan %bool %62 %89
%91 = OpLoad %float %47
%92 = OpLoad %float %47
%93 = OpFMul %float %91 %92
%94 = OpSelect %float %90 %93 %float_0
%95 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_2
%96 = OpLoad %uint %95
%98 = OpAccessChain %_ptr_PushConstant_float %27 %uint_9
%100 = OpLoad %float %98
%101 = OpFunctionCall %float %36 %94 %96 %100
%102 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_2
%103 = OpLoad %uint %102
%104 = OpULessThan %bool %62 %103
OpSelectionMerge %105 None
OpBranchConditional %104 %106 %105
%106 = OpLabel
%107 = OpAccessChain %_ptr_Workgroup_float %31 %62
%109 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_8
%111 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_7
%113 = OpLoad %uint %109
%114 = OpLoad %uint %111
%115 = OpSelect %uint %56 %113 %114
%116 = OpIAdd %uint %115 %62
%117 = OpAccessChain %_ptr_StorageBuffer_float %19 %uint_0 %116
%118 = OpLoad %float %117
%119 = OpLoad %float %47
%120 = OpFMul %float %119 %101
%121 = OpFMul %float %118 %120
OpStore %107 %121
OpBranch %105
%105 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
%123 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_3
%125 = OpLoad %uint %123
%126 = OpULessThan %bool %62 %125
OpSelectionMerge %127 None
OpBranchConditional %126 %128 %127
%128 = OpLabel
%129 = OpAccessChain %_ptr_StorageBuffer_float %18 %uint_0 %62
%130 = OpLoad %float %129
%131 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_3
%132 = OpLoad %uint %131
%133 = OpIAdd %uint %132 %62
%134 = OpAccessChain %_ptr_StorageBuffer_float %18 %uint_0 %133
%135 = OpLoad %float %134
%136 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_4
%138 = OpLoad %uint %136
%139 = OpINotEqual %bool %138 %uint_0
%140 = OpIMul %uint %62 %uint_2
%141 = OpSelect %uint %139 %62 %140
%142 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_4
%143 = OpLoad %uint %142
%144 = OpINotEqual %bool %143 %uint_0
%145 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_3
%146 = OpLoad %uint %145
%147 = OpIAdd %uint %62 %146
%148 = OpIMul %uint %62 %uint_2
%149 = OpIAdd %uint %148 %uint_1
%150 = OpSelect %uint %144 %147 %149
%151 = OpAccessChain %_ptr_Workgroup_float %31 %141
%152 = OpLoad %float %151
%153 = OpAccessChain %_ptr_Workgroup_float %31 %150
%154 = OpLoad %float %153
%155 = OpFMul %float %152 %130
%156 = OpFMul %float %154 %135
%157 = OpFSub %float %155 %156
%158 = OpFMul %float %152 %135
%159 = OpFMul %float %154 %130
%160 = OpFAdd %float %158 %159
OpSelectionMerge %161 None
OpBranchConditional %56 %162 %163
%162 = OpLabel
%164 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_6
%166 = OpLoad %uint %164
%167 = OpAccessChain %_ptr_StorageBuffer__struct_20 %24 %uint_0 %uint_0
%170 = OpAccessChain %_ptr_StorageBuffer_uint %167 %uint_0
%171 = OpLoad %uint %170
%172 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_1
%173 = OpLoad %uint %172
%174 = OpIMul %uint %171 %173
%175 = OpIAdd %uint %166 %174
%176 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_2
%177 = OpLoad %uint %176
%178 = OpIMul %uint %60 %177
%179 = OpIAdd %uint %175 %178
%180 = OpIAdd %uint %179 %141
%181 = OpAccessChain %_ptr_StorageBuffer_float %16 %uint_0 %180
OpStore %181 %157
%182 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_2
%183 = OpLoad %uint %182
%184 = OpIMul %uint %60 %183
%185 = OpIAdd %uint %175 %184
%186 = OpIAdd %uint %185 %150
%187 = OpAccessChain %_ptr_StorageBuffer_float %16 %uint_0 %186
OpStore %187 %160
OpBranch %161
%163 = OpLabel
%188 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_2
%189 = OpLoad %uint %188
%190 = OpIMul %uint %60 %189
%191 = OpIAdd %uint %190 %141
%192 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %191
OpStore %192 %157
%193 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_2
%194 = OpLoad %uint %193
%195 = OpIMul %uint %60 %194
%196 = OpIAdd %uint %195 %150
%197 = OpAccessChain %_ptr_StorageBuffer_float %14 %uint_0 %196
OpStore %197 %160
OpBranch %161
%161 = OpLabel
OpBranch %127
%127 = OpLabel
%198 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_2
%199 = OpLoad %uint %198
%200 = OpULessThan %bool %62 %199
%201 = OpLogicalAnd %bool %56 %200
OpSelectionMerge %202 None
OpBranchConditional %201 %203 %202
%203 = OpLabel
%204 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_6
%205 = OpLoad %uint %204
%206 = OpAccessChain %_ptr_StorageBuffer__struct_20 %24 %uint_0 %uint_0
%207 = OpAccessChain %_ptr_StorageBuffer_uint %206 %uint_0
%208 = OpLoad %uint %207
%209 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_1
%210 = OpLoad %uint %209
%211 = OpIMul %uint %208 %210
%212 = OpIAdd %uint %205 %211
%213 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_2
%214 = OpLoad %uint %213
%215 = OpIMul %uint %60 %214
%216 = OpIAdd %uint %212 %215
%217 = OpIAdd %uint %216 %62
%218 = OpAccessChain %_ptr_StorageBuffer_float %17 %uint_0 %217
%219 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_0
%220 = OpLoad %uint %219
%221 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_1
%222 = OpLoad %uint %221
%223 = OpIAdd %uint %220 %222
%224 = OpAccessChain %_ptr_PushConstant_uint %27 %uint_2
%225 = OpLoad %uint %224
%226 = OpIMul %uint %60 %225
%227 = OpIAdd %uint %223 %226
%228 = OpIAdd %uint %227 %62
%229 = OpAccessChain %_ptr_StorageBuffer_float %15 %uint_0 %228
%230 = OpLoad %float %229
OpStore %218 %230
OpBranch %202
%202 = OpLabel
OpReturn
OpFunctionEnd
%36 = OpFunction %float None %37
%231 = OpFunctionParameter %float
%232 = OpFunctionParameter %uint
%233 = OpFunctionParameter %float
%234 = OpLabel
%235 = OpVariable %_ptr_Function_float Function
%237 = OpVariable %_ptr_Function_uint Function
%238 = OpGroupNonUniformFAdd %float %uint_3 Reduce %231
%239 = OpLoad %uint %SubgroupLocalInvocationId
%240 = OpIEqual %bool %239 %uint_0
OpSelectionMerge %241 None
OpBranchConditional %240 %242 %241
%242 = OpLabel
%243 = OpLoad %uint %SubgroupId
%244 = OpAccessChain %_ptr_Workgroup_float %6 %243
OpStore %244 %238
OpBranch %241
%241 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
%245 = OpAccessChain %_ptr_Input_uint %gl_LocalInvocationID %uint_0
%246 = OpLoad %uint %245
%247 = OpIEqual %bool %246 %uint_0
OpSelectionMerge %248 None
OpBranchConditional %247 %249 %248
%249 = OpLabel
OpStore %235 %float_0
OpStore %237 %uint_0
OpBranch %250
%250 = OpLabel
OpLoopMerge %254 %253 None
OpBranch %251
%251 = OpLabel
%255 = OpLoad %uint %237
%256 = OpLoad %uint %NumSubgroups
%257 = OpULessThan %bool %255 %256
OpBranchConditional %257 %252 %254
%252 = OpLabel
%258 = OpLoad %uint %237
%259 = OpAccessChain %_ptr_Workgroup_float %6 %258
%260 = OpLoad %float %259
%261 = OpLoad %float %235
%262 = OpFAdd %float %261 %260
OpStore %235 %262
%263 = OpLoad %uint %237
%264 = OpIAdd %uint %263 %uint_1
OpStore %237 %264
OpBranch %253
%253 = OpLabel
OpBranch %250
%254 = OpLabel
%265 = OpAccessChain %_ptr_Workgroup_float %10 %uint_0
%267 = OpLoad %float %235
%268 = OpConvertUToF %float %232
%269 = OpFDiv %float %267 %268
%270 = OpFAdd %float %269 %233
%272 = OpExtInst %float %271 Sqrt %270
%273 = OpFDiv %float %float_1 %272
OpStore %265 %273
OpBranch %248
%248 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
%274 = OpAccessChain %_ptr_Workgroup_float %10 %uint_0
%275 = OpLoad %float %274
OpReturnValue %275
OpFunctionEnd
; SPIR-V
; Version: 1.3
; Generator: Khronos; 0
; Bound: 173
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %19 "main" %gl_GlobalInvocationID
OpExecutionMode %19 LocalSize 256 1 1
OpDecorate %_runtimearr_float ArrayStride 4
OpDecorate %_struct_3 Block
OpMemberDecorate %_struct_3 0 Offset 0
OpDecorate %5 DescriptorSet 0
OpDecorate %5 Binding 0
OpDecorate %6 DescriptorSet 0
OpDecorate %6 Binding 1
OpDecorate %7 DescriptorSet 0
OpDecorate %7 Binding 2
OpDecorate %8 DescriptorSet 0
OpDecorate %8 Binding 3
OpDecorate %9 DescriptorSet 0
OpDecorate %9 Binding 4
OpDecorate %_struct_11 Block
OpMemberDecorate %_struct_11 0 Offset 0
OpMemberDecorate %_struct_11 1 Offset 4
OpMemberDecorate %_struct_11 2 Offset 8
OpMemberDecorate %_struct_11 3 Offset 12
OpMemberDecorate %_struct_11 4 Offset 16
OpMemberDecorate %_struct_11 5 Offset 20
OpMemberDecorate %_struct_11 6 Offset 24
OpMemberDecorate %_struct_11 7 Offset 28
OpMemberDecorate %_struct_11 8 Offset 32
OpMemberDecorate %_struct_11 9 Offset 36
OpMemberDecorate %_struct_11 10 Offset 40
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
%float = OpTypeFloat 32
%_runtimearr_float = OpTypeRuntimeArray %float
%_struct_3 = OpTypeStruct %_runtimearr_float
%_ptr_StorageBuffer__struct_3 = OpTypePointer StorageBuffer %_struct_3
%5 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%6 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%7 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%8 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%9 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%uint = OpTypeInt 32 0
%_struct_11 = OpTypeStruct %uint %uint %uint %uint %uint %uint %uint %uint %uint %uint %uint
%_ptr_PushConstant__struct_11 = OpTypePointer PushConstant %_struct_11
%13 = OpVariable %_ptr_PushConstant__struct_11 PushConstant
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
%void = OpTypeVoid
%18 = OpTypeFunction %void
%_ptr_Input_uint = OpTypePointer Input %uint
%uint_0 = OpConstant %uint 0
%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint
%uint_8 = OpConstant %uint 8
%uint_6 = OpConstant %uint 6
%bool = OpTypeBool
%uint_5 = OpConstant %uint 5
%uint_3 = OpConstant %uint 3
%uint_2 = OpConstant %uint 2
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
%uint_4 = OpConstant %uint 4
%uint_1 = OpConstant %uint 1
%uint_9 = OpConstant %uint 9
%uint_7 = OpConstant %uint 7
%uint_10 = OpConstant %uint 10
%19 = OpFunction %void None %18
%20 = OpLabel
%22 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0
%24 = OpLoad %uint %22
%26 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_8
%28 = OpLoad %uint %26
%29 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_6
%31 = OpLoad %uint %29
%32 = OpIMul %uint %28 %31
%34 = OpULessThan %bool %24 %32
OpSelectionMerge %35 None
OpBranchConditional %34 %36 %35
%36 = OpLabel
%37 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_6
%38 = OpLoad %uint %37
%39 = OpUDiv %uint %24 %38
%40 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_6
%41 = OpLoad %uint %40
%42 = OpUMod %uint %24 %41
%43 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_5
%45 = OpLoad %uint %43
%46 = OpUGreaterThanEqual %bool %42 %45
%47 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_5
%48 = OpLoad %uint %47
%49 = OpISub %uint %42 %48
%50 = OpSelect %uint %46 %49 %42
%51 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_3
%53 = OpLoad %uint %51
%54 = OpUDiv %uint %50 %53
%55 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_3
%56 = OpLoad %uint %55
%57 = OpUMod %uint %50 %56
%58 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_2
%60 = OpLoad %uint %58
%61 = OpIMul %uint %39 %60
%62 = OpIAdd %uint %61 %57
%63 = OpAccessChain %_ptr_StorageBuffer_float %9 %uint_0 %62
%65 = OpLoad %float %63
%66 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_3
%67 = OpLoad %uint %66
%68 = OpIAdd %uint %61 %67
%69 = OpIAdd %uint %68 %57
%70 = OpAccessChain %_ptr_StorageBuffer_float %9 %uint_0 %69
%71 = OpLoad %float %70
%72 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_4
%74 = OpLoad %uint %72
%75 = OpINotEqual %bool %74 %uint_0
%76 = OpIMul %uint %57 %uint_2
%77 = OpSelect %uint %75 %57 %76
%78 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_4
%79 = OpLoad %uint %78
%80 = OpINotEqual %bool %79 %uint_0
%81 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_3
%82 = OpLoad %uint %81
%83 = OpIAdd %uint %57 %82
%84 = OpIMul %uint %57 %uint_2
%86 = OpIAdd %uint %84 %uint_1
%87 = OpSelect %uint %80 %83 %86
%88 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_9
%90 = OpLoad %uint %88
%91 = OpIAdd %uint %90 %39
OpSelectionMerge %92 None
OpBranchConditional %46 %93 %94
%93 = OpLabel
%95 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_1
%96 = OpLoad %uint %95
%97 = OpIMul %uint %39 %96
%98 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_2
%99 = OpLoad %uint %98
%100 = OpIMul %uint %54 %99
%101 = OpIAdd %uint %97 %100
%102 = OpIAdd %uint %101 %77
%103 = OpAccessChain %_ptr_StorageBuffer_float %6 %uint_0 %102
%104 = OpLoad %float %103
%105 = OpIAdd %uint %101 %87
%106 = OpAccessChain %_ptr_StorageBuffer_float %6 %uint_0 %105
%107 = OpLoad %float %106
%108 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_7
%110 = OpLoad %uint %108
%111 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_1
%112 = OpLoad %uint %111
%113 = OpIMul %uint %91 %112
%114 = OpIAdd %uint %110 %113
%115 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_2
%116 = OpLoad %uint %115
%117 = OpIMul %uint %54 %116
%118 = OpIAdd %uint %114 %117
%119 = OpIAdd %uint %118 %77
%120 = OpAccessChain %_ptr_StorageBuffer_float %7 %uint_0 %119
%121 = OpFMul %float %104 %65
%122 = OpFMul %float %107 %71
%123 = OpFSub %float %121 %122
OpStore %120 %123
%124 = OpIAdd %uint %118 %87
%125 = OpAccessChain %_ptr_StorageBuffer_float %7 %uint_0 %124
%126 = OpFMul %float %104 %71
%127 = OpFMul %float %107 %65
%128 = OpFAdd %float %126 %127
OpStore %125 %128
%129 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_10
%131 = OpLoad %uint %129
%132 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_1
%133 = OpLoad %uint %132
%134 = OpIMul %uint %39 %133
%135 = OpIAdd %uint %131 %134
%136 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_2
%137 = OpLoad %uint %136
%138 = OpIMul %uint %54 %137
%139 = OpIAdd %uint %135 %138
%140 = OpIAdd %uint %118 %77
%141 = OpAccessChain %_ptr_StorageBuffer_float %8 %uint_0 %140
%142 = OpIAdd %uint %139 %77
%143 = OpAccessChain %_ptr_StorageBuffer_float %6 %uint_0 %142
%144 = OpLoad %float %143
OpStore %141 %144
%145 = OpIAdd %uint %118 %87
%146 = OpAccessChain %_ptr_StorageBuffer_float %8 %uint_0 %145
%147 = OpIAdd %uint %139 %87
%148 = OpAccessChain %_ptr_StorageBuffer_float %6 %uint_0 %147
%149 = OpLoad %float %148
OpStore %146 %149
OpBranch %92
%94 = OpLabel
%150 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_0
%151 = OpLoad %uint %150
%152 = OpIMul %uint %39 %151
%153 = OpAccessChain %_ptr_PushConstant_uint %13 %uint_2
%154 = OpLoad %uint %153
%155 = OpIMul %uint %54 %154
%156 = OpIAdd %uint %152 %155
%157 = OpIAdd %uint %156 %77
%158 = OpAccessChain %_ptr_StorageBuffer_float %5 %uint_0 %157
%159 = OpLoad %float %158
%160 = OpIAdd %uint %156 %87
%161 = OpAccessChain %_ptr_StorageBuffer_float %5 %uint_0 %160
%162 = OpLoad %float %161
%163 = OpIAdd %uint %156 %77
%164 = OpAccessChain %_ptr_StorageBuffer_float %5 %uint_0 %163
%165 = OpFMul %float %159 %65
%166 = OpFMul %float %162 %71
%167 = OpFSub %float %165 %166
OpStore %164 %167
%168 = OpIAdd %uint %156 %87
%169 = OpAccessChain %_ptr_StorageBuffer_float %5 %uint_0 %168
%170 = OpFMul %float %159 %71
%171 = OpFMul %float %162 %65
%172 = OpFAdd %float %170 %171
OpStore %169 %172
OpBranch %92
%92 = OpLabel
OpBranch %35
%35 = OpLabel
OpReturn
OpFunctionEnd
; SPIR-V
; Version: 1.3
; Generator: Khronos; 0
; Bound: 169
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %24 "main" %gl_GlobalInvocationID
OpExecutionMode %24 LocalSize 256 1 1
OpDecorate %_runtimearr_float ArrayStride 4
OpDecorate %_struct_3 Block
OpMemberDecorate %_struct_3 0 Offset 0
OpDecorate %5 DescriptorSet 0
OpDecorate %5 Binding 0
OpDecorate %6 DescriptorSet 0
OpDecorate %6 Binding 1
OpDecorate %7 DescriptorSet 0
OpDecorate %7 Binding 2
OpDecorate %8 DescriptorSet 0
OpDecorate %8 Binding 3
OpDecorate %9 DescriptorSet 0
OpDecorate %9 Binding 4
OpMemberDecorate %_struct_11 0 Offset 0
OpMemberDecorate %_struct_11 1 Offset 4
OpMemberDecorate %_struct_11 2 Offset 8
OpMemberDecorate %_struct_11 3 Offset 12
OpDecorate %_runtimearr__struct_11 ArrayStride 16
OpDecorate %_struct_13 Block
OpMemberDecorate %_struct_13 0 Offset 0
OpDecorate %15 DescriptorSet 0
OpDecorate %15 Binding 5
OpDecorate %_struct_16 Block
OpMemberDecorate %_struct_16 0 Offset 0
OpMemberDecorate %_struct_16 1 Offset 4
OpMemberDecorate %_struct_16 2 Offset 8
OpMemberDecorate %_struct_16 3 Offset 12
OpMemberDecorate %_struct_16 4 Offset 16
OpMemberDecorate %_struct_16 5 Offset 20
OpMemberDecorate %_struct_16 6 Offset 24
OpMemberDecorate %_struct_16 7 Offset 28
OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
%float = OpTypeFloat 32
%_runtimearr_float = OpTypeRuntimeArray %float
%_struct_3 = OpTypeStruct %_runtimearr_float
%_ptr_StorageBuffer__struct_3 = OpTypePointer StorageBuffer %_struct_3
%5 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%6 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%7 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%8 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%9 = OpVariable %_ptr_StorageBuffer__struct_3 StorageBuffer
%uint = OpTypeInt 32 0
%_struct_11 = OpTypeStruct %uint %uint %uint %uint
%_runtimearr__struct_11 = OpTypeRuntimeArray %_struct_11
%_struct_13 = OpTypeStruct %_runtimearr__struct_11
%_ptr_StorageBuffer__struct_13 = OpTypePointer StorageBuffer %_struct_13
%15 = OpVariable %_ptr_StorageBuffer__struct_13 StorageBuffer
%_struct_16 = OpTypeStruct %uint %uint %uint %uint %uint %uint %uint %uint
%_ptr_PushConstant__struct_16 = OpTypePointer PushConstant %_struct_16
%18 = OpVariable %_ptr_PushConstant__struct_16 PushConstant
%v3uint = OpTypeVector %uint 3
%_ptr_Input_v3uint = OpTypePointer Input %v3uint
%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
%void = OpTypeVoid
%23 = OpTypeFunction %void
%_ptr_Input_uint = OpTypePointer Input %uint
%uint_0 = OpConstant %uint 0
%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint
%uint_6 = OpConstant %uint 6
%bool = OpTypeBool
%uint_5 = OpConstant %uint 5
%uint_3 = OpConstant %uint 3
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
%uint_4 = OpConstant %uint 4
%uint_2 = OpConstant %uint 2
%uint_1 = OpConstant %uint 1
%uint_7 = OpConstant %uint 7
%_ptr_StorageBuffer__struct_11 = OpTypePointer StorageBuffer %_struct_11
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
%24 = OpFunction %void None %23
%25 = OpLabel
%27 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0
%29 = OpLoad %uint %27
%31 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_6
%33 = OpLoad %uint %31
%35 = OpULessThan %bool %29 %33
OpSelectionMerge %36 None
OpBranchConditional %35 %37 %36
%37 = OpLabel
%38 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_5
%40 = OpLoad %uint %38
%41 = OpUGreaterThanEqual %bool %29 %40
%42 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_5
%43 = OpLoad %uint %42
%44 = OpISub %uint %29 %43
%45 = OpSelect %uint %41 %44 %29
%46 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_3
%48 = OpLoad %uint %46
%49 = OpUDiv %uint %45 %48
%50 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_3
%51 = OpLoad %uint %50
%52 = OpUMod %uint %45 %51
%53 = OpAccessChain %_ptr_StorageBuffer_float %9 %uint_0 %52
%55 = OpLoad %float %53
%56 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_3
%57 = OpLoad %uint %56
%58 = OpIAdd %uint %57 %52
%59 = OpAccessChain %_ptr_StorageBuffer_float %9 %uint_0 %58
%60 = OpLoad %float %59
%61 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_4
%63 = OpLoad %uint %61
%64 = OpINotEqual %bool %63 %uint_0
%66 = OpIMul %uint %52 %uint_2
%67 = OpSelect %uint %64 %52 %66
%68 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_4
%69 = OpLoad %uint %68
%70 = OpINotEqual %bool %69 %uint_0
%71 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_3
%72 = OpLoad %uint %71
%73 = OpIAdd %uint %52 %72
%74 = OpIMul %uint %52 %uint_2
%76 = OpIAdd %uint %74 %uint_1
%77 = OpSelect %uint %70 %73 %76
OpSelectionMerge %78 None
OpBranchConditional %41 %79 %80
%79 = OpLabel
%81 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_7
%83 = OpLoad %uint %81
%84 = OpAccessChain %_ptr_StorageBuffer__struct_11 %15 %uint_0 %uint_0
%87 = OpAccessChain %_ptr_StorageBuffer_uint %84 %uint_0
%88 = OpLoad %uint %87
%89 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_1
%90 = OpLoad %uint %89
%91 = OpIMul %uint %88 %90
%92 = OpIAdd %uint %83 %91
%93 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_0
%94 = OpLoad %uint %93
%95 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_2
%96 = OpLoad %uint %95
%97 = OpIMul %uint %49 %96
%98 = OpIAdd %uint %94 %97
%99 = OpIAdd %uint %98 %67
%100 = OpAccessChain %_ptr_StorageBuffer_float %6 %uint_0 %99
%101 = OpLoad %float %100
%102 = OpIAdd %uint %98 %77
%103 = OpAccessChain %_ptr_StorageBuffer_float %6 %uint_0 %102
%104 = OpLoad %float %103
%105 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_2
%106 = OpLoad %uint %105
%107 = OpIMul %uint %49 %106
%108 = OpIAdd %uint %92 %107
%109 = OpIAdd %uint %108 %67
%110 = OpAccessChain %_ptr_StorageBuffer_float %7 %uint_0 %109
%111 = OpFMul %float %101 %55
%112 = OpFMul %float %104 %60
%113 = OpFSub %float %111 %112
OpStore %110 %113
%114 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_2
%115 = OpLoad %uint %114
%116 = OpIMul %uint %49 %115
%117 = OpIAdd %uint %92 %116
%118 = OpIAdd %uint %117 %77
%119 = OpAccessChain %_ptr_StorageBuffer_float %7 %uint_0 %118
%120 = OpFMul %float %101 %60
%121 = OpFMul %float %104 %55
%122 = OpFAdd %float %120 %121
OpStore %119 %122
%123 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_0
%124 = OpLoad %uint %123
%125 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_1
%126 = OpLoad %uint %125
%127 = OpIAdd %uint %124 %126
%128 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_2
%129 = OpLoad %uint %128
%130 = OpIMul %uint %49 %129
%131 = OpIAdd %uint %127 %130
%132 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_2
%133 = OpLoad %uint %132
%134 = OpIMul %uint %49 %133
%135 = OpIAdd %uint %92 %134
%136 = OpIAdd %uint %135 %67
%137 = OpAccessChain %_ptr_StorageBuffer_float %8 %uint_0 %136
%138 = OpIAdd %uint %131 %67
%139 = OpAccessChain %_ptr_StorageBuffer_float %6 %uint_0 %138
%140 = OpLoad %float %139
OpStore %137 %140
%141 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_2
%142 = OpLoad %uint %141
%143 = OpIMul %uint %49 %142
%144 = OpIAdd %uint %92 %143
%145 = OpIAdd %uint %144 %77
%146 = OpAccessChain %_ptr_StorageBuffer_float %8 %uint_0 %145
%147 = OpIAdd %uint %131 %77
%148 = OpAccessChain %_ptr_StorageBuffer_float %6 %uint_0 %147
%149 = OpLoad %float %148
OpStore %146 %149
OpBranch %78
%80 = OpLabel
%150 = OpAccessChain %_ptr_PushConstant_uint %18 %uint_2
%151 = OpLoad %uint %150
%152 = OpIMul %uint %49 %151
%153 = OpIAdd %uint %152 %67
%154 = OpAccessChain %_ptr_StorageBuffer_float %5 %uint_0 %153
%155 = OpLoad %float %154
%156 = OpIAdd %uint %152 %77
%157 = OpAccessChain %_ptr_StorageBuffer_float %5 %uint_0 %156
%158 = OpLoad %float %157
%159 = OpIAdd %uint %152 %67
%160 = OpAccessChain %_ptr_StorageBuffer_float %5 %uint_0 %159
%161 = OpFMul %float %155 %55
%162 = OpFMul %float %158 %60
%163 = OpFSub %float %161 %162
OpStore %160 %163
%164 = OpIAdd %uint %152 %77
%165 = OpAccessChain %_ptr_StorageBuffer_float %5 %uint_0 %164
%166 = OpFMul %float %155 %60
%167 = OpFMul %float %158 %55
%168 = OpFAdd %float %166 %167
OpStore %165 %168
OpBranch %78
%78 = OpLabel
OpBranch %36
%36 = OpLabel
OpReturn
OpFunctionEnd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment