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

struct _17
{
    vec4 _m0;
};

struct _20
{
    float _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 _17 _19;
layout(location = 1) rayPayloadEXT _20 _22;

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


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.4
; Generator: Unknown(30017); 21022
; Bound: 66
; 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 %19 %22
OpName %3 "main"
OpName %8 "RTASHeap"
OpName %17 ""
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 = OpTypeVector %11 4
%17 = OpTypeStruct %16
%18 = OpTypePointer RayPayloadKHR %17
%19 = OpVariable %18 RayPayloadKHR
%20 = OpTypeStruct %11
%21 = OpTypePointer RayPayloadKHR %20
%22 = OpVariable %21 RayPayloadKHR
%23 = OpConstant %5 0
%25 = OpConstant %5 3
%27 = OpConstant %5 4
%29 = OpTypePointer StorageBuffer %6
%32 = OpTypeAccelerationStructureKHR
%34 = OpTypePointer UniformConstant %12
%36 = OpConstant %5 1
%38 = OpConstant %11 1
%39 = OpConstant %11 0
%40 = OpConstant %11 2
%41 = OpConstant %11 3
%42 = OpConstant %11 4
%43 = OpTypeVector %11 3
%48 = OpTypePointer RayPayloadKHR %16
%55 = OpTypePointer RayPayloadKHR %11
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %64
%64 = OpLabel
%24 = OpGroupNonUniformBroadcastFirst %5 %25 %23
%26 = OpIMul %5 %27 %24
%28 = OpIAdd %5 %26 %25
%30 = OpAccessChain %29 %10 %23 %28
%31 = OpLoad %6 %30
%33 = OpConvertUToAccelerationStructureKHR %32 %31
%35 = OpAccessChain %34 %15 %36
%37 = OpLoad %12 %35
%44 = OpCompositeConstruct %43 %38 %40 %41
%45 = OpCompositeConstruct %43 %39 %39 %38
OpTraceRayKHR %33 %23 %23 %23 %23 %23 %44 %38 %45 %42 %19
%46 = OpCompositeConstruct %43 %38 %40 %41
%47 = OpCompositeConstruct %43 %39 %39 %38
OpTraceRayKHR %33 %23 %36 %23 %23 %23 %46 %38 %47 %42 %22
%49 = OpInBoundsAccessChain %48 %19 %23
%50 = OpLoad %16 %49
%51 = OpCompositeExtract %11 %50 0
%52 = OpCompositeExtract %11 %50 1
%53 = OpCompositeExtract %11 %50 2
%54 = OpCompositeExtract %11 %50 3
%56 = OpInBoundsAccessChain %55 %22 %23
%57 = OpLoad %11 %56
%58 = OpFAdd %11 %51 %57
%59 = OpFAdd %11 %52 %57
%60 = OpFAdd %11 %53 %57
%61 = OpFAdd %11 %54 %57
%62 = OpCompositeConstruct %6 %23 %23
%63 = OpCompositeConstruct %16 %58 %59 %60 %61
OpImageWrite %37 %62 %63
OpReturn
OpFunctionEnd
#endif
