#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 _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, 0);
    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, 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: 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 RayGenerationNV %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 RayPayloadNV %17
%19 = OpVariable %18 RayPayloadNV
%20 = OpTypeStruct %11
%21 = OpTypePointer RayPayloadNV %20
%22 = OpVariable %21 RayPayloadNV
%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
%45 = OpTypePointer RayPayloadNV %16
%52 = OpTypePointer RayPayloadNV %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 %19
%43 = OpCompositeConstruct %40 %35 %37 %38
%44 = OpCompositeConstruct %40 %36 %36 %35
OpTraceRayKHR %30 %23 %33 %23 %23 %23 %43 %35 %44 %39 %22
%46 = OpInBoundsAccessChain %45 %19 %23
%47 = OpLoad %16 %46
%48 = OpCompositeExtract %11 %47 0
%49 = OpCompositeExtract %11 %47 1
%50 = OpCompositeExtract %11 %47 2
%51 = OpCompositeExtract %11 %47 3
%53 = OpInBoundsAccessChain %52 %22 %23
%54 = OpLoad %11 %53
%55 = OpFAdd %11 %48 %54
%56 = OpFAdd %11 %49 %54
%57 = OpFAdd %11 %50 %54
%58 = OpFAdd %11 %51 %54
%59 = OpCompositeConstruct %6 %23 %23
%60 = OpCompositeConstruct %16 %55 %56 %57 %58
OpImageWrite %34 %59 %60
OpReturn
OpFunctionEnd
#endif
