#version 460
#extension GL_KHR_shader_subgroup_shuffle : require
layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;

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

layout(set = 0, binding = 1, std430) writeonly buffer _11_13
{
    uint _m0[];
} _13;

layout(set = 0, binding = 2) uniform writeonly image1D _17;

void main()
{
    _9._m0[gl_GlobalInvocationID.x] = subgroupShuffle(gl_GlobalInvocationID.x, 9u);
    uint _34 = atomicAdd(_13._m0[64u], 9u);
    _9._m0[100u] = _34;
    imageStore(_17, int(gl_GlobalInvocationID.x), vec4(2.0));
    _9._m0[101u] = 42u;
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.3
; Generator: Unknown(30017); 21022
; Bound: 47
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability StorageImageWriteWithoutFormat
OpCapability GroupNonUniformShuffle
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %3 "main" %22
OpExecutionMode %3 LocalSize 32 1 1
OpName %3 "main"
OpName %7 "SSBO"
OpName %11 "SSBO"
OpDecorate %6 ArrayStride 4
OpMemberDecorate %7 0 Offset 0
OpDecorate %7 Block
OpDecorate %9 DescriptorSet 0
OpDecorate %9 Binding 0
OpDecorate %9 NonReadable
OpDecorate %10 ArrayStride 4
OpMemberDecorate %11 0 Offset 0
OpDecorate %11 Block
OpDecorate %13 DescriptorSet 0
OpDecorate %13 Binding 1
OpDecorate %13 NonReadable
OpDecorate %17 DescriptorSet 0
OpDecorate %17 Binding 2
OpDecorate %17 NonReadable
OpDecorate %22 BuiltIn GlobalInvocationId
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeInt 32 0
%6 = OpTypeRuntimeArray %5
%7 = OpTypeStruct %6
%8 = OpTypePointer StorageBuffer %7
%9 = OpVariable %8 StorageBuffer
%10 = OpTypeRuntimeArray %5
%11 = OpTypeStruct %10
%12 = OpTypePointer StorageBuffer %11
%13 = OpVariable %12 StorageBuffer
%14 = OpTypeFloat 32
%15 = OpTypeImage %14 1D 0 0 0 2 Unknown
%16 = OpTypePointer UniformConstant %15
%17 = OpVariable %16 UniformConstant
%20 = OpTypeVector %5 3
%21 = OpTypePointer Input %20
%22 = OpVariable %21 Input
%23 = OpTypePointer Input %5
%25 = OpConstant %5 0
%27 = OpConstant %5 9
%29 = OpConstant %5 3
%30 = OpTypePointer StorageBuffer %5
%32 = OpConstant %5 64
%35 = OpConstant %5 1
%36 = OpConstant %5 100
%38 = OpConstant %5 10
%39 = OpConstant %14 2
%40 = OpTypeVector %14 4
%41 = OpConstantComposite %40 %39 %39 %39 %39
%42 = OpConstant %5 42
%43 = OpConstant %5 101
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %45
%45 = OpLabel
%18 = OpLoad %15 %17
%24 = OpAccessChain %23 %22 %25
%26 = OpLoad %5 %24
%28 = OpGroupNonUniformShuffle %5 %29 %26 %27
%31 = OpAccessChain %30 %9 %25 %26
OpStore %31 %28
%33 = OpAccessChain %30 %13 %25 %32
%34 = OpAtomicIAdd %5 %33 %35 %25 %27
%37 = OpAccessChain %30 %9 %25 %36
OpStore %37 %34
OpImageWrite %18 %26 %41
%44 = OpAccessChain %30 %9 %25 %43
OpStore %44 %42
OpReturn
OpFunctionEnd
#endif
