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

layout(set = 0, binding = 0) uniform image2D _8;
layout(set = 0, binding = 1) uniform imageBuffer _11;
layout(set = 0, binding = 2, r32ui) uniform uimageBuffer _15;

void main()
{
    vec4 _30 = imageLoad(_8, ivec2(uvec2(gl_GlobalInvocationID.x, gl_GlobalInvocationID.y)));
    imageStore(_8, ivec2(uvec2(gl_GlobalInvocationID.x, gl_GlobalInvocationID.y)), vec4(_30.x + 2.0, _30.y + 2.0, _30.z + 2.0, _30.w + 2.0));
    vec4 _44 = imageLoad(_11, int(gl_GlobalInvocationID.x));
    imageStore(_11, int(gl_GlobalInvocationID.x), vec4(_44.x + 3.0, _44.y + 3.0, _44.z + 3.0, _44.w + 3.0));
    uint _57 = imageAtomicAdd(_15, int(gl_GlobalInvocationID.y), 10u);
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.3
; Generator: Unknown(30017); 21022
; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageBuffer
OpCapability StorageImageReadWithoutFormat
OpCapability StorageImageWriteWithoutFormat
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %3 "main" %21
OpExecutionMode %3 LocalSize 1 1 1
OpName %3 "main"
OpDecorate %8 DescriptorSet 0
OpDecorate %8 Binding 0
OpDecorate %11 DescriptorSet 0
OpDecorate %11 Binding 1
OpDecorate %15 DescriptorSet 0
OpDecorate %15 Binding 2
OpDecorate %21 BuiltIn GlobalInvocationId
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeFloat 32
%6 = OpTypeImage %5 2D 0 0 0 2 Unknown
%7 = OpTypePointer UniformConstant %6
%8 = OpVariable %7 UniformConstant
%9 = OpTypeImage %5 Buffer 0 0 0 2 Unknown
%10 = OpTypePointer UniformConstant %9
%11 = OpVariable %10 UniformConstant
%12 = OpTypeInt 32 0
%13 = OpTypeImage %12 Buffer 0 0 0 2 R32ui
%14 = OpTypePointer UniformConstant %13
%15 = OpVariable %14 UniformConstant
%19 = OpTypeVector %12 3
%20 = OpTypePointer Input %19
%21 = OpVariable %20 Input
%22 = OpTypePointer Input %12
%24 = OpConstant %12 0
%27 = OpConstant %12 1
%29 = OpTypeVector %5 4
%31 = OpTypeVector %12 2
%38 = OpConstant %5 2
%50 = OpConstant %5 3
%55 = OpTypePointer Image %12
%58 = OpConstant %12 10
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %59
%59 = OpLabel
%16 = OpLoad %13 %15
%17 = OpLoad %9 %11
%18 = OpLoad %6 %8
%23 = OpAccessChain %22 %21 %24
%25 = OpLoad %12 %23
%26 = OpAccessChain %22 %21 %27
%28 = OpLoad %12 %26
%32 = OpCompositeConstruct %31 %25 %28
%30 = OpImageRead %29 %18 %32 None
%33 = OpCompositeExtract %5 %30 0
%34 = OpCompositeExtract %5 %30 1
%35 = OpCompositeExtract %5 %30 2
%36 = OpCompositeExtract %5 %30 3
%37 = OpFAdd %5 %33 %38
%39 = OpFAdd %5 %34 %38
%40 = OpFAdd %5 %35 %38
%41 = OpFAdd %5 %36 %38
%42 = OpCompositeConstruct %31 %25 %28
%43 = OpCompositeConstruct %29 %37 %39 %40 %41
OpImageWrite %18 %42 %43
%44 = OpImageRead %29 %17 %25
%45 = OpCompositeExtract %5 %44 0
%46 = OpCompositeExtract %5 %44 1
%47 = OpCompositeExtract %5 %44 2
%48 = OpCompositeExtract %5 %44 3
%49 = OpFAdd %5 %45 %50
%51 = OpFAdd %5 %46 %50
%52 = OpFAdd %5 %47 %50
%53 = OpFAdd %5 %48 %50
%54 = OpCompositeConstruct %29 %49 %51 %52 %53
OpImageWrite %17 %25 %54
%56 = OpImageTexelPointer %55 %15 %28 %24
%57 = OpAtomicIAdd %12 %56 %27 %24 %58
OpReturn
OpFunctionEnd
#endif
