#version 460
#extension GL_EXT_ray_tracing : require
#extension GL_EXT_nonuniform_qualifier : require
#extension GL_KHR_shader_subgroup_ballot : require

struct _16
{
    float _m0;
};

struct _20
{
    vec4 _m0;
};

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

layout(set = 0, binding = 0) uniform writeonly image2D _15[];
layout(location = 0) rayPayloadEXT _16 _18;
layout(location = 1) rayPayloadEXT _20 _22;

void main()
{
    uint _24 = subgroupBroadcastFirst(0u);
    uvec2 _30 = _10._m0[_24];
    traceRayEXT(accelerationStructureEXT(_30), 0u, 0u, 0u, 0u, 0u, vec3(1.0, 2.0, 3.0), 1.0, vec3(0.0, 0.0, 1.0), 4.0, 1);
    traceRayEXT(accelerationStructureEXT(_30), 0u, 1u, 0u, 0u, 0u, vec3(1.0, 2.0, 3.0), 1.0, vec3(0.0, 0.0, 1.0), 4.0, 0);
    imageStore(_15[1u], ivec2(uvec2(0u)), vec4(_18._m0 + _22._m0.x, _18._m0 + _22._m0.y, _18._m0 + _22._m0.z, _18._m0 + _22._m0.w));
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.4
; Generator: Unknown(30017); 21022
; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability UniformBufferArrayDynamicIndexing
OpCapability SampledImageArrayDynamicIndexing
OpCapability StorageBufferArrayDynamicIndexing
OpCapability StorageImageArrayDynamicIndexing
OpCapability StorageImageWriteWithoutFormat
OpCapability GroupNonUniformBallot
OpCapability RayTracingKHR
OpCapability RuntimeDescriptorArray
OpCapability UniformBufferArrayNonUniformIndexing
OpCapability SampledImageArrayNonUniformIndexing
OpCapability StorageBufferArrayNonUniformIndexing
OpCapability StorageImageArrayNonUniformIndexing
OpExtension "SPV_EXT_descriptor_indexing"
OpExtension "SPV_KHR_ray_tracing"
OpMemoryModel Logical GLSL450
OpEntryPoint RayGenerationKHR %3 "main" %10 %15 %18 %22
OpName %3 "main"
OpName %8 "RTASHeap"
OpName %16 ""
OpName %20 ""
OpDecorate %7 ArrayStride 8
OpMemberDecorate %8 0 Offset 0
OpDecorate %8 Block
OpDecorate %10 DescriptorSet 0
OpDecorate %10 Binding 0
OpDecorate %10 NonWritable
OpDecorate %10 Restrict
OpDecorate %15 DescriptorSet 0
OpDecorate %15 Binding 0
OpDecorate %15 NonReadable
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeInt 32 0
%6 = OpTypeVector %5 2
%7 = OpTypeRuntimeArray %6
%8 = OpTypeStruct %7
%9 = OpTypePointer StorageBuffer %8
%10 = OpVariable %9 StorageBuffer
%11 = OpTypeFloat 32
%12 = OpTypeImage %11 2D 0 0 0 2 Unknown
%13 = OpTypeRuntimeArray %12
%14 = OpTypePointer UniformConstant %13
%15 = OpVariable %14 UniformConstant
%16 = OpTypeStruct %11
%17 = OpTypePointer RayPayloadKHR %16
%18 = OpVariable %17 RayPayloadKHR
%19 = OpTypeVector %11 4
%20 = OpTypeStruct %19
%21 = OpTypePointer RayPayloadKHR %20
%22 = OpVariable %21 RayPayloadKHR
%23 = OpConstant %5 0
%25 = OpConstant %5 3
%26 = OpTypePointer StorageBuffer %6
%29 = OpTypeAccelerationStructureKHR
%31 = OpTypePointer UniformConstant %12
%33 = OpConstant %5 1
%35 = OpConstant %11 1
%36 = OpConstant %11 0
%37 = OpConstant %11 2
%38 = OpConstant %11 3
%39 = OpConstant %11 4
%40 = OpTypeVector %11 3
%43 = OpTypePointer RayPayloadKHR %19
%52 = OpTypePointer RayPayloadKHR %11
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %61
%61 = OpLabel
%24 = OpGroupNonUniformBroadcastFirst %5 %25 %23
%27 = OpAccessChain %26 %10 %23 %24
%28 = OpLoad %6 %27
%30 = OpConvertUToAccelerationStructureKHR %29 %28
%32 = OpAccessChain %31 %15 %33
%34 = OpLoad %12 %32
%41 = OpCompositeConstruct %40 %35 %37 %38
%42 = OpCompositeConstruct %40 %36 %36 %35
OpTraceRayKHR %30 %23 %23 %23 %23 %23 %41 %35 %42 %39 %22
%44 = OpInBoundsAccessChain %43 %22 %23
%45 = OpLoad %19 %44
%46 = OpCompositeExtract %11 %45 0
%47 = OpCompositeExtract %11 %45 1
%48 = OpCompositeExtract %11 %45 2
%49 = OpCompositeExtract %11 %45 3
%50 = OpCompositeConstruct %40 %35 %37 %38
%51 = OpCompositeConstruct %40 %36 %36 %35
OpTraceRayKHR %30 %23 %33 %23 %23 %23 %50 %35 %51 %39 %18
%53 = OpInBoundsAccessChain %52 %18 %23
%54 = OpLoad %11 %53
%55 = OpFAdd %11 %54 %46
%56 = OpFAdd %11 %54 %47
%57 = OpFAdd %11 %54 %48
%58 = OpFAdd %11 %54 %49
%59 = OpCompositeConstruct %6 %23 %23
%60 = OpCompositeConstruct %19 %55 %56 %57 %58
OpImageWrite %34 %59 %60
OpReturn
OpFunctionEnd
#endif
