#version 460
#extension GL_KHR_shader_subgroup_ballot : require
#extension GL_KHR_shader_subgroup_arithmetic : require
#extension GL_KHR_shader_subgroup_vote : require
layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;

layout(set = 0, binding = 0, std430) restrict readonly buffer SSBO
{
    uint _m0[];
} _9;

layout(set = 0, binding = 0, std430) restrict readonly buffer _12_14
{
    uvec2 _m0[];
} _14;

layout(set = 0, binding = 1, std430) restrict readonly buffer _16_20
{
    uint _m0[];
} _20[2];

layout(set = 0, binding = 4, std430) restrict readonly buffer _26_28
{
    uint _m0[];
} _28;

layout(set = 0, binding = 0, std430) buffer _30_32
{
    uint _m0[];
} _32;

layout(set = 0, binding = 0, std140) uniform _36_38
{
    vec4 _m0[1024];
} _38;

layout(set = 0, binding = 1, std140) uniform _40_43
{
    vec4 _m0[1024];
} _43[2];

layout(set = 0, binding = 3) uniform samplerBuffer _24;

void main()
{
    uint _66 = atomicAdd(_32._m0[0u], floatBitsToUint(_38._m0[1u]).x);
    uint _74 = atomicAdd(_32._m0[1u], subgroupBroadcastFirst(floatBitsToUint(_38._m0[gl_GlobalInvocationID.x]).x));
    uint _81 = atomicAdd(_32._m0[1u], subgroupBroadcastFirst(floatBitsToUint(_43[1u]._m0[1u]).x));
    uint _88 = atomicAdd(_32._m0[1u], subgroupBroadcastFirst(floatBitsToUint(_43[1u]._m0[gl_GlobalInvocationID.x]).x));
    uint _92 = atomicAdd(_32._m0[0u], _9._m0[2u]);
    uint _96 = atomicAdd(_32._m0[0u], _28._m0[0u]);
    uint _103 = atomicAdd(_32._m0[1u], subgroupBroadcastFirst(_14._m0[gl_GlobalInvocationID.x].y));
    uint _107 = 1u * 2u;
    uint _114 = atomicAdd(_32._m0[1u], subgroupBroadcastFirst(_9._m0[_107 + (((gl_GlobalInvocationID.x << 2u) & 4u) >> 2u)]));
    uint _121 = atomicAdd(_32._m0[1u], subgroupBroadcastFirst(_20[1u]._m0[1u]));
    uint _126 = atomicAdd(_32._m0[1u], subgroupBroadcastFirst(_28._m0[gl_GlobalInvocationID.x]));
    uint _131 = atomicAdd(_32._m0[1u], subgroupBroadcastFirst(_32._m0[2u]));
    uint _137 = atomicAdd(_32._m0[1u], uint(subgroupBroadcastFirst(texelFetch(_24, int(0u)).x)));
    uint _139 = atomicAdd(_32._m0[0u], gl_WorkGroupID.x);
    uint _142 = atomicAdd(_32._m0[1u], subgroupBroadcastFirst(gl_GlobalInvocationID.x));
    uint _148 = atomicAdd(_32._m0[0u], floatBitsToUint(_38._m0[1u]).x);
    uint _155 = atomicAdd(_32._m0[0u], subgroupAdd(floatBitsToUint(_38._m0[gl_GlobalInvocationID.x]).x));
    uint _162 = atomicAdd(_32._m0[0u], subgroupOr(floatBitsToUint(_38._m0[gl_GlobalInvocationID.x]).x));
    uint _171 = atomicAdd(_32._m0[0u], uint(subgroupAllEqual(floatBitsToUint(_38._m0[gl_GlobalInvocationID.x]).x)));
    uint _180 = atomicAdd(_32._m0[0u], subgroupBallot(floatBitsToUint(_38._m0[gl_GlobalInvocationID.x]).x != 0u).x);
    uint _189 = atomicAdd(_32._m0[0u], uint(subgroupAny(floatBitsToUint(_38._m0[gl_GlobalInvocationID.x]).x != 0u)));
    uint _198 = atomicAdd(_32._m0[0u], uint(subgroupAll(floatBitsToUint(_38._m0[gl_GlobalInvocationID.x]).x != 0u)));
    uint _206 = atomicAdd(_32._m0[1u], subgroupBroadcastFirst(subgroupExclusiveAdd(floatBitsToUint(_38._m0[gl_GlobalInvocationID.x]).x)));
}


#if 0
// SPIR-V disassembly
// HeuristicWaveSize(32)
; SPIR-V
; Version: 1.3
; Generator: Unknown(30017); 21022
; Bound: 209
; Schema: 0
OpCapability Shader
OpCapability UniformBufferArrayDynamicIndexing
OpCapability StorageBufferArrayDynamicIndexing
OpCapability SampledBuffer
OpCapability GroupNonUniformVote
OpCapability GroupNonUniformArithmetic
OpCapability GroupNonUniformBallot
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %3 "main" %50 %55
OpExecutionMode %3 LocalSize 64 1 1
OpName %3 "main"
OpName %7 "SSBO"
OpName %12 "SSBO"
OpName %16 "SSBO"
OpName %26 "SSBO"
OpName %30 "SSBO"
OpName %36 ""
OpName %40 ""
OpDecorate %6 ArrayStride 4
OpMemberDecorate %7 0 Offset 0
OpDecorate %7 Block
OpDecorate %11 ArrayStride 8
OpMemberDecorate %12 0 Offset 0
OpDecorate %12 Block
OpDecorate %9 DescriptorSet 0
OpDecorate %9 Binding 0
OpDecorate %9 NonWritable
OpDecorate %9 Restrict
OpDecorate %14 DescriptorSet 0
OpDecorate %14 Binding 0
OpDecorate %14 NonWritable
OpDecorate %14 Restrict
OpDecorate %15 ArrayStride 4
OpMemberDecorate %16 0 Offset 0
OpDecorate %16 Block
OpDecorate %20 DescriptorSet 0
OpDecorate %20 Binding 1
OpDecorate %20 NonWritable
OpDecorate %20 Restrict
OpDecorate %24 DescriptorSet 0
OpDecorate %24 Binding 3
OpDecorate %25 ArrayStride 4
OpMemberDecorate %26 0 Offset 0
OpDecorate %26 Block
OpDecorate %28 DescriptorSet 0
OpDecorate %28 Binding 4
OpDecorate %28 NonWritable
OpDecorate %28 Restrict
OpDecorate %29 ArrayStride 4
OpMemberDecorate %30 0 Offset 0
OpDecorate %30 Block
OpDecorate %32 DescriptorSet 0
OpDecorate %32 Binding 0
OpDecorate %35 ArrayStride 16
OpMemberDecorate %36 0 Offset 0
OpDecorate %36 Block
OpDecorate %38 DescriptorSet 0
OpDecorate %38 Binding 0
OpDecorate %39 ArrayStride 16
OpMemberDecorate %40 0 Offset 0
OpDecorate %40 Block
OpDecorate %43 DescriptorSet 0
OpDecorate %43 Binding 1
OpDecorate %50 BuiltIn GlobalInvocationId
OpDecorate %55 BuiltIn WorkgroupId
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeInt 32 0
%6 = OpTypeRuntimeArray %5
%7 = OpTypeStruct %6
%8 = OpTypePointer StorageBuffer %7
%9 = OpVariable %8 StorageBuffer
%10 = OpTypeVector %5 2
%11 = OpTypeRuntimeArray %10
%12 = OpTypeStruct %11
%13 = OpTypePointer StorageBuffer %12
%14 = OpVariable %13 StorageBuffer
%15 = OpTypeRuntimeArray %5
%16 = OpTypeStruct %15
%17 = OpConstant %5 2
%18 = OpTypeArray %16 %17
%19 = OpTypePointer StorageBuffer %18
%20 = OpVariable %19 StorageBuffer
%21 = OpTypeFloat 32
%22 = OpTypeImage %21 Buffer 0 0 0 1 Unknown
%23 = OpTypePointer UniformConstant %22
%24 = OpVariable %23 UniformConstant
%25 = OpTypeRuntimeArray %5
%26 = OpTypeStruct %25
%27 = OpTypePointer StorageBuffer %26
%28 = OpVariable %27 StorageBuffer
%29 = OpTypeRuntimeArray %5
%30 = OpTypeStruct %29
%31 = OpTypePointer StorageBuffer %30
%32 = OpVariable %31 StorageBuffer
%33 = OpConstant %5 1024
%34 = OpTypeVector %21 4
%35 = OpTypeArray %34 %33
%36 = OpTypeStruct %35
%37 = OpTypePointer Uniform %36
%38 = OpVariable %37 Uniform
%39 = OpTypeArray %34 %33
%40 = OpTypeStruct %39
%41 = OpTypeArray %40 %17
%42 = OpTypePointer Uniform %41
%43 = OpVariable %42 Uniform
%45 = OpTypePointer Uniform %40
%47 = OpConstant %5 1
%48 = OpTypeVector %5 3
%49 = OpTypePointer Input %48
%50 = OpVariable %49 Input
%51 = OpTypePointer Input %5
%53 = OpConstant %5 0
%55 = OpVariable %49 Input
%58 = OpTypePointer Uniform %34
%61 = OpTypeVector %5 4
%64 = OpTypePointer StorageBuffer %5
%72 = OpConstant %5 3
%97 = OpTypePointer StorageBuffer %10
%106 = OpConstant %5 4
%115 = OpTypePointer StorageBuffer %16
%167 = OpTypeBool
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %207
%207 = OpLabel
%44 = OpLoad %22 %24
%46 = OpAccessChain %45 %43 %47
%52 = OpAccessChain %51 %50 %53
%54 = OpLoad %5 %52
%56 = OpAccessChain %51 %55 %53
%57 = OpLoad %5 %56
%59 = OpAccessChain %58 %38 %53 %47
%60 = OpLoad %34 %59
%62 = OpBitcast %61 %60
%63 = OpCompositeExtract %5 %62 0
%65 = OpAccessChain %64 %32 %53 %53
%66 = OpAtomicIAdd %5 %65 %47 %53 %63
%67 = OpAccessChain %58 %38 %53 %54
%68 = OpLoad %34 %67
%69 = OpBitcast %61 %68
%70 = OpCompositeExtract %5 %69 0
%71 = OpGroupNonUniformBroadcastFirst %5 %72 %70
%73 = OpAccessChain %64 %32 %53 %47
%74 = OpAtomicIAdd %5 %73 %47 %53 %71
%75 = OpAccessChain %58 %46 %53 %47
%76 = OpLoad %34 %75
%77 = OpBitcast %61 %76
%78 = OpCompositeExtract %5 %77 0
%79 = OpGroupNonUniformBroadcastFirst %5 %72 %78
%80 = OpAccessChain %64 %32 %53 %47
%81 = OpAtomicIAdd %5 %80 %47 %53 %79
%82 = OpAccessChain %58 %46 %53 %54
%83 = OpLoad %34 %82
%84 = OpBitcast %61 %83
%85 = OpCompositeExtract %5 %84 0
%86 = OpGroupNonUniformBroadcastFirst %5 %72 %85
%87 = OpAccessChain %64 %32 %53 %47
%88 = OpAtomicIAdd %5 %87 %47 %53 %86
%89 = OpAccessChain %64 %9 %53 %17
%90 = OpLoad %5 %89
%91 = OpAccessChain %64 %32 %53 %53
%92 = OpAtomicIAdd %5 %91 %47 %53 %90
%93 = OpAccessChain %64 %28 %53 %53
%94 = OpLoad %5 %93
%95 = OpAccessChain %64 %32 %53 %53
%96 = OpAtomicIAdd %5 %95 %47 %53 %94
%98 = OpAccessChain %97 %14 %53 %54
%99 = OpLoad %10 %98
%100 = OpCompositeExtract %5 %99 1
%101 = OpGroupNonUniformBroadcastFirst %5 %72 %100
%102 = OpAccessChain %64 %32 %53 %47
%103 = OpAtomicIAdd %5 %102 %47 %53 %101
%104 = OpShiftLeftLogical %5 %54 %17
%105 = OpBitwiseAnd %5 %104 %106
%107 = OpIMul %5 %47 %17
%108 = OpShiftRightLogical %5 %105 %17
%109 = OpIAdd %5 %107 %108
%110 = OpAccessChain %64 %9 %53 %109
%111 = OpLoad %5 %110
%112 = OpGroupNonUniformBroadcastFirst %5 %72 %111
%113 = OpAccessChain %64 %32 %53 %47
%114 = OpAtomicIAdd %5 %113 %47 %53 %112
%116 = OpAccessChain %115 %20 %47
%117 = OpAccessChain %64 %116 %53 %47
%118 = OpLoad %5 %117
%119 = OpGroupNonUniformBroadcastFirst %5 %72 %118
%120 = OpAccessChain %64 %32 %53 %47
%121 = OpAtomicIAdd %5 %120 %47 %53 %119
%122 = OpAccessChain %64 %28 %53 %54
%123 = OpLoad %5 %122
%124 = OpGroupNonUniformBroadcastFirst %5 %72 %123
%125 = OpAccessChain %64 %32 %53 %47
%126 = OpAtomicIAdd %5 %125 %47 %53 %124
%127 = OpAccessChain %64 %32 %53 %17
%128 = OpLoad %5 %127
%129 = OpGroupNonUniformBroadcastFirst %5 %72 %128
%130 = OpAccessChain %64 %32 %53 %47
%131 = OpAtomicIAdd %5 %130 %47 %53 %129
%132 = OpImageFetch %34 %44 %53
%133 = OpCompositeExtract %21 %132 0
%134 = OpGroupNonUniformBroadcastFirst %21 %72 %133
%135 = OpConvertFToU %5 %134
%136 = OpAccessChain %64 %32 %53 %47
%137 = OpAtomicIAdd %5 %136 %47 %53 %135
%138 = OpAccessChain %64 %32 %53 %53
%139 = OpAtomicIAdd %5 %138 %47 %53 %57
%140 = OpGroupNonUniformBroadcastFirst %5 %72 %54
%141 = OpAccessChain %64 %32 %53 %47
%142 = OpAtomicIAdd %5 %141 %47 %53 %140
%143 = OpAccessChain %58 %38 %53 %47
%144 = OpLoad %34 %143
%145 = OpBitcast %61 %144
%146 = OpCompositeExtract %5 %145 0
%147 = OpAccessChain %64 %32 %53 %53
%148 = OpAtomicIAdd %5 %147 %47 %53 %146
%149 = OpAccessChain %58 %38 %53 %54
%150 = OpLoad %34 %149
%151 = OpBitcast %61 %150
%152 = OpCompositeExtract %5 %151 0
%153 = OpGroupNonUniformIAdd %5 %72 Reduce %152
%154 = OpAccessChain %64 %32 %53 %53
%155 = OpAtomicIAdd %5 %154 %47 %53 %153
%156 = OpAccessChain %58 %38 %53 %54
%157 = OpLoad %34 %156
%158 = OpBitcast %61 %157
%159 = OpCompositeExtract %5 %158 0
%160 = OpGroupNonUniformBitwiseOr %5 %72 Reduce %159
%161 = OpAccessChain %64 %32 %53 %53
%162 = OpAtomicIAdd %5 %161 %47 %53 %160
%163 = OpAccessChain %58 %38 %53 %54
%164 = OpLoad %34 %163
%165 = OpBitcast %61 %164
%166 = OpCompositeExtract %5 %165 0
%168 = OpGroupNonUniformAllEqual %167 %72 %166
%169 = OpSelect %5 %168 %47 %53
%170 = OpAccessChain %64 %32 %53 %53
%171 = OpAtomicIAdd %5 %170 %47 %53 %169
%172 = OpAccessChain %58 %38 %53 %54
%173 = OpLoad %34 %172
%174 = OpBitcast %61 %173
%175 = OpCompositeExtract %5 %174 0
%176 = OpINotEqual %167 %175 %53
%177 = OpGroupNonUniformBallot %61 %72 %176
%178 = OpCompositeExtract %5 %177 0
%179 = OpAccessChain %64 %32 %53 %53
%180 = OpAtomicIAdd %5 %179 %47 %53 %178
%181 = OpAccessChain %58 %38 %53 %54
%182 = OpLoad %34 %181
%183 = OpBitcast %61 %182
%184 = OpCompositeExtract %5 %183 0
%185 = OpINotEqual %167 %184 %53
%186 = OpGroupNonUniformAny %167 %72 %185
%187 = OpSelect %5 %186 %47 %53
%188 = OpAccessChain %64 %32 %53 %53
%189 = OpAtomicIAdd %5 %188 %47 %53 %187
%190 = OpAccessChain %58 %38 %53 %54
%191 = OpLoad %34 %190
%192 = OpBitcast %61 %191
%193 = OpCompositeExtract %5 %192 0
%194 = OpINotEqual %167 %193 %53
%195 = OpGroupNonUniformAll %167 %72 %194
%196 = OpSelect %5 %195 %47 %53
%197 = OpAccessChain %64 %32 %53 %53
%198 = OpAtomicIAdd %5 %197 %47 %53 %196
%199 = OpAccessChain %58 %38 %53 %54
%200 = OpLoad %34 %199
%201 = OpBitcast %61 %200
%202 = OpCompositeExtract %5 %201 0
%203 = OpGroupNonUniformIAdd %5 %72 ExclusiveScan %202
%204 = OpGroupNonUniformBroadcastFirst %5 %72 %203
%205 = OpAccessChain %64 %32 %53 %47
%206 = OpAtomicIAdd %5 %205 %47 %53 %204
OpReturn
OpFunctionEnd
#endif
