#version 460
layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;

layout(set = 0, binding = 0, r32ui) uniform writeonly uimageBuffer _8;

shared float _13[256];
shared float _17[128];

void main()
{
    float _25 = float(gl_LocalInvocationIndex + 1u);
    _13[0u + ((0u + (gl_LocalInvocationIndex * 2u)) * 2u)] = float(gl_LocalInvocationIndex);
    _13[1u + ((0u + (gl_LocalInvocationIndex * 2u)) * 2u)] = _25;
    float _40 = float(gl_LocalInvocationIndex + 2u);
    _13[0u + ((1u + (gl_LocalInvocationIndex * 2u)) * 2u)] = _25;
    _13[1u + ((1u + (gl_LocalInvocationIndex * 2u)) * 2u)] = _40;
    _17[0u + (gl_LocalInvocationIndex * 2u)] = _40;
    _17[1u + (gl_LocalInvocationIndex * 2u)] = float(gl_LocalInvocationIndex + 3u);
    barrier();
    uint _61 = gl_LocalInvocationIndex ^ 1u;
    uint _74 = gl_LocalInvocationIndex ^ 2u;
    uint _89 = gl_LocalInvocationIndex ^ 4u;
    uint _101 = gl_LocalInvocationIndex * 2u;
    imageStore(_8, int(_101), uvec4(floatBitsToUint((_13[0u + ((1u + (_74 * 2u)) * 2u)] * _13[0u + ((0u + (_61 * 2u)) * 2u)]) * _17[0u + (_89 * 2u)])));
    imageStore(_8, int(_101 + 1u), uvec4(floatBitsToUint((_13[1u + ((1u + (_74 * 2u)) * 2u)] * _13[1u + ((0u + (_61 * 2u)) * 2u)]) * _17[1u + (_89 * 2u)])));
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.3
; Generator: Unknown(30017); 21022
; Bound: 110
; Schema: 0
OpCapability Shader
OpCapability ImageBuffer
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %3 "main" %20
OpExecutionMode %3 LocalSize 64 1 1
OpName %3 "main"
OpDecorate %8 DescriptorSet 0
OpDecorate %8 Binding 0
OpDecorate %8 NonReadable
OpDecorate %20 BuiltIn LocalInvocationIndex
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeInt 32 0
%6 = OpTypeImage %5 Buffer 0 0 0 2 R32ui
%7 = OpTypePointer UniformConstant %6
%8 = OpVariable %7 UniformConstant
%9 = OpConstant %5 256
%10 = OpTypeFloat 32
%11 = OpTypeArray %10 %9
%12 = OpTypePointer Workgroup %11
%13 = OpVariable %12 Workgroup
%14 = OpConstant %5 128
%15 = OpTypeArray %10 %14
%16 = OpTypePointer Workgroup %15
%17 = OpVariable %16 Workgroup
%19 = OpTypePointer Input %5
%20 = OpVariable %19 Input
%24 = OpConstant %5 1
%27 = OpConstant %5 2
%29 = OpConstant %5 0
%32 = OpTypePointer Workgroup %10
%52 = OpConstant %5 3
%60 = OpConstant %5 264
%90 = OpConstant %5 4
%104 = OpTypeVector %5 4
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %108
%108 = OpLabel
%18 = OpLoad %6 %8
%21 = OpLoad %5 %20
%22 = OpConvertUToF %10 %21
%23 = OpIAdd %5 %21 %24
%25 = OpConvertUToF %10 %23
%26 = OpIMul %5 %21 %27
%28 = OpIAdd %5 %29 %26
%30 = OpIMul %5 %28 %27
%31 = OpIAdd %5 %29 %30
%33 = OpAccessChain %32 %13 %31
OpStore %33 %22
%34 = OpIMul %5 %21 %27
%35 = OpIAdd %5 %29 %34
%36 = OpIMul %5 %35 %27
%37 = OpIAdd %5 %24 %36
%38 = OpAccessChain %32 %13 %37
OpStore %38 %25
%39 = OpIAdd %5 %21 %27
%40 = OpConvertUToF %10 %39
%41 = OpIMul %5 %21 %27
%42 = OpIAdd %5 %24 %41
%43 = OpIMul %5 %42 %27
%44 = OpIAdd %5 %29 %43
%45 = OpAccessChain %32 %13 %44
OpStore %45 %25
%46 = OpIMul %5 %21 %27
%47 = OpIAdd %5 %24 %46
%48 = OpIMul %5 %47 %27
%49 = OpIAdd %5 %24 %48
%50 = OpAccessChain %32 %13 %49
OpStore %50 %40
%51 = OpIAdd %5 %21 %52
%53 = OpConvertUToF %10 %51
%54 = OpIMul %5 %21 %27
%55 = OpIAdd %5 %29 %54
%56 = OpAccessChain %32 %17 %55
OpStore %56 %40
%57 = OpIMul %5 %21 %27
%58 = OpIAdd %5 %24 %57
%59 = OpAccessChain %32 %17 %58
OpStore %59 %53
OpControlBarrier %27 %27 %60
%61 = OpBitwiseXor %5 %21 %24
%62 = OpIMul %5 %61 %27
%63 = OpIAdd %5 %29 %62
%64 = OpIMul %5 %63 %27
%65 = OpIAdd %5 %29 %64
%66 = OpAccessChain %32 %13 %65
%67 = OpLoad %10 %66
%68 = OpIMul %5 %61 %27
%69 = OpIAdd %5 %29 %68
%70 = OpIMul %5 %69 %27
%71 = OpIAdd %5 %24 %70
%72 = OpAccessChain %32 %13 %71
%73 = OpLoad %10 %72
%74 = OpBitwiseXor %5 %21 %27
%75 = OpIMul %5 %74 %27
%76 = OpIAdd %5 %24 %75
%77 = OpIMul %5 %76 %27
%78 = OpIAdd %5 %29 %77
%79 = OpAccessChain %32 %13 %78
%80 = OpLoad %10 %79
%81 = OpIMul %5 %74 %27
%82 = OpIAdd %5 %24 %81
%83 = OpIMul %5 %82 %27
%84 = OpIAdd %5 %24 %83
%85 = OpAccessChain %32 %13 %84
%86 = OpLoad %10 %85
%87 = OpFMul %10 %80 %67
%88 = OpFMul %10 %86 %73
%89 = OpBitwiseXor %5 %21 %90
%91 = OpIMul %5 %89 %27
%92 = OpIAdd %5 %29 %91
%93 = OpAccessChain %32 %17 %92
%94 = OpLoad %10 %93
%95 = OpIMul %5 %89 %27
%96 = OpIAdd %5 %24 %95
%97 = OpAccessChain %32 %17 %96
%98 = OpLoad %10 %97
%99 = OpFMul %10 %87 %94
%100 = OpFMul %10 %88 %98
%101 = OpIMul %5 %21 %27
%102 = OpBitcast %5 %99
%103 = OpBitcast %5 %100
%105 = OpCompositeConstruct %104 %102 %102 %102 %102
OpImageWrite %18 %101 %105
%106 = OpCompositeConstruct %104 %103 %103 %103 %103
%107 = OpIAdd %5 %101 %24
OpImageWrite %18 %107 %106
OpReturn
OpFunctionEnd
#endif
