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

layout(buffer_reference) buffer PhysicalPointerFloat4NonWriteArray;
layout(buffer_reference) buffer PhysicalPointerFloat4CoherentArray;
layout(buffer_reference, buffer_reference_align = 4, std430) readonly buffer PhysicalPointerFloat4NonWriteArray
{
    vec4 value[];
};

layout(buffer_reference, buffer_reference_align = 4, std430) coherent buffer PhysicalPointerFloat4CoherentArray
{
    vec4 value[];
};

layout(push_constant, std430) uniform RootConstants
{
    uvec2 _m0;
    uvec2 _m1;
    uvec2 _m2;
    uvec2 _m3;
    uint _m4;
    uint _m5;
    uint _m6;
    uint _m7;
    uint _m8;
    uint _m9;
    uint _m10;
    uint _m11;
    uint _m12;
    uint _m13;
    uint _m14;
    uint _m15;
    uint _m16;
    uint _m17;
    uint _m18;
    uint _m19;
} registers;

void main()
{
    PhysicalPointerFloat4NonWriteArray _29 = PhysicalPointerFloat4NonWriteArray(registers._m1);
    vec4 _52 = uintBitsToFloat(uvec4(registers._m4, registers._m5, registers._m6, registers._m7));
    float _53 = _52.x;
    vec4 _71 = uintBitsToFloat(uvec4(registers._m8, registers._m9, registers._m10, registers._m11));
    float _72 = _71.y;
    vec4 _90 = uintBitsToFloat(uvec4(registers._m12, registers._m13, registers._m14, registers._m15));
    float _91 = _90.z;
    PhysicalPointerFloat4CoherentArray(registers._m2).value[gl_GlobalInvocationID.x] = vec4(((_53 + _29.value[gl_GlobalInvocationID.x].x) + _72) + _91, ((_53 + _29.value[gl_GlobalInvocationID.x].y) + _72) + _91, ((_53 + _29.value[gl_GlobalInvocationID.x].z) + _72) + _91, ((_53 + _29.value[gl_GlobalInvocationID.x].w) + _72) + _91);
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.3
; Generator: Unknown(30017); 21022
; Bound: 104
; Schema: 0
OpCapability Shader
OpCapability PhysicalStorageBufferAddresses
OpExtension "SPV_KHR_physical_storage_buffer"
OpMemoryModel PhysicalStorageBuffer64 GLSL450
OpEntryPoint GLCompute %3 "main" %19
OpExecutionMode %3 LocalSize 1 1 1
OpName %3 "main"
OpName %7 "RootConstants"
OpName %9 "registers"
OpName %27 "PhysicalPointerFloat4NonWriteArray"
OpMemberName %27 0 "value"
OpName %97 "PhysicalPointerFloat4CoherentArray"
OpMemberName %97 0 "value"
OpDecorate %7 Block
OpMemberDecorate %7 0 Offset 0
OpMemberDecorate %7 1 Offset 8
OpMemberDecorate %7 2 Offset 16
OpMemberDecorate %7 3 Offset 24
OpMemberDecorate %7 4 Offset 32
OpMemberDecorate %7 5 Offset 36
OpMemberDecorate %7 6 Offset 40
OpMemberDecorate %7 7 Offset 44
OpMemberDecorate %7 8 Offset 48
OpMemberDecorate %7 9 Offset 52
OpMemberDecorate %7 10 Offset 56
OpMemberDecorate %7 11 Offset 60
OpMemberDecorate %7 12 Offset 64
OpMemberDecorate %7 13 Offset 68
OpMemberDecorate %7 14 Offset 72
OpMemberDecorate %7 15 Offset 76
OpMemberDecorate %7 16 Offset 80
OpMemberDecorate %7 17 Offset 84
OpMemberDecorate %7 18 Offset 88
OpMemberDecorate %7 19 Offset 92
OpDecorate %19 BuiltIn GlobalInvocationId
OpDecorate %26 ArrayStride 16
OpMemberDecorate %27 0 Offset 0
OpDecorate %27 Block
OpMemberDecorate %27 0 NonWritable
OpDecorate %96 ArrayStride 16
OpMemberDecorate %97 0 Offset 0
OpDecorate %97 Block
OpMemberDecorate %97 0 Coherent
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeInt 32 0
%6 = OpTypeVector %5 2
%7 = OpTypeStruct %6 %6 %6 %6 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5 %5
%8 = OpTypePointer PushConstant %7
%9 = OpVariable %8 PushConstant
%10 = OpTypePointer PushConstant %6
%12 = OpConstant %5 2
%15 = OpConstant %5 1
%17 = OpTypeVector %5 3
%18 = OpTypePointer Input %17
%19 = OpVariable %18 Input
%20 = OpTypePointer Input %5
%22 = OpConstant %5 0
%24 = OpTypeFloat 32
%25 = OpTypeVector %24 4
%26 = OpTypeRuntimeArray %25
%27 = OpTypeStruct %26
%28 = OpTypePointer PhysicalStorageBuffer %27
%30 = OpTypePointer PhysicalStorageBuffer %25
%37 = OpTypePointer PushConstant %5
%39 = OpConstant %5 4
%42 = OpConstant %5 5
%45 = OpConstant %5 6
%48 = OpConstant %5 7
%50 = OpTypeVector %5 4
%59 = OpConstant %5 8
%62 = OpConstant %5 9
%65 = OpConstant %5 10
%68 = OpConstant %5 11
%78 = OpConstant %5 12
%81 = OpConstant %5 13
%84 = OpConstant %5 14
%87 = OpConstant %5 15
%96 = OpTypeRuntimeArray %25
%97 = OpTypeStruct %96
%98 = OpTypePointer PhysicalStorageBuffer %97
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %102
%102 = OpLabel
%11 = OpAccessChain %10 %9 %12
%13 = OpLoad %6 %11
%14 = OpAccessChain %10 %9 %15
%16 = OpLoad %6 %14
%21 = OpAccessChain %20 %19 %22
%23 = OpLoad %5 %21
%29 = OpBitcast %28 %16
%31 = OpInBoundsAccessChain %30 %29 %22 %23
%32 = OpLoad %25 %31 Aligned 4
%33 = OpCompositeExtract %24 %32 0
%34 = OpCompositeExtract %24 %32 1
%35 = OpCompositeExtract %24 %32 2
%36 = OpCompositeExtract %24 %32 3
%38 = OpAccessChain %37 %9 %39
%40 = OpLoad %5 %38
%41 = OpAccessChain %37 %9 %42
%43 = OpLoad %5 %41
%44 = OpAccessChain %37 %9 %45
%46 = OpLoad %5 %44
%47 = OpAccessChain %37 %9 %48
%49 = OpLoad %5 %47
%51 = OpCompositeConstruct %50 %40 %43 %46 %49
%52 = OpBitcast %25 %51
%53 = OpCompositeExtract %24 %52 0
%54 = OpFAdd %24 %53 %33
%55 = OpFAdd %24 %53 %34
%56 = OpFAdd %24 %53 %35
%57 = OpFAdd %24 %53 %36
%58 = OpAccessChain %37 %9 %59
%60 = OpLoad %5 %58
%61 = OpAccessChain %37 %9 %62
%63 = OpLoad %5 %61
%64 = OpAccessChain %37 %9 %65
%66 = OpLoad %5 %64
%67 = OpAccessChain %37 %9 %68
%69 = OpLoad %5 %67
%70 = OpCompositeConstruct %50 %60 %63 %66 %69
%71 = OpBitcast %25 %70
%72 = OpCompositeExtract %24 %71 1
%73 = OpFAdd %24 %54 %72
%74 = OpFAdd %24 %55 %72
%75 = OpFAdd %24 %56 %72
%76 = OpFAdd %24 %57 %72
%77 = OpAccessChain %37 %9 %78
%79 = OpLoad %5 %77
%80 = OpAccessChain %37 %9 %81
%82 = OpLoad %5 %80
%83 = OpAccessChain %37 %9 %84
%85 = OpLoad %5 %83
%86 = OpAccessChain %37 %9 %87
%88 = OpLoad %5 %86
%89 = OpCompositeConstruct %50 %79 %82 %85 %88
%90 = OpBitcast %25 %89
%91 = OpCompositeExtract %24 %90 2
%92 = OpFAdd %24 %73 %91
%93 = OpFAdd %24 %74 %91
%94 = OpFAdd %24 %75 %91
%95 = OpFAdd %24 %76 %91
%99 = OpBitcast %98 %13
%100 = OpInBoundsAccessChain %30 %99 %22 %23
%101 = OpCompositeConstruct %25 %92 %93 %94 %95
OpStore %100 %101 Aligned 4
OpReturn
OpFunctionEnd
#endif
