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

struct _23
{
    vec4 _m0;
};

layout(shaderRecordEXT, std430) buffer SBTBlock
{
    uint _m0[5];
    uint _m1[6];
    uvec2 _m2;
    uvec2 _m3;
    uvec2 _m4;
    uvec2 _m5;
    uvec2 _m6;
    uvec2 _m7;
    uvec2 _m8;
    uvec2 _m9;
    uvec2 _m10;
} SBT;

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

layout(push_constant, std430) uniform RootConstants
{
    uint _m0;
    uint _m1;
    uint _m2;
    uint _m3;
    uint _m4;
    uint _m5;
    uint _m6;
    uint _m7;
} registers;

layout(location = 0) rayPayloadEXT _23 _25;
layout(location = 1) rayPayloadEXT _23 _26;
layout(location = 2) rayPayloadEXT _23 _27;
layout(location = 3) rayPayloadEXT _23 _28;

void main()
{
    _28._m0 = vec4(1.0, 2.0, 3.0, 4.0);
    traceRayEXT(accelerationStructureEXT(_20._m0[(4u * subgroupBroadcastFirst(registers._m0 + 110u)) + 3u]), 0u, 0u, 0u, 0u, 0u, vec3(1.0, 2.0, 3.0), 1.0, vec3(0.0, 0.0, 1.0), 4.0, 3);
    _27._m0 = _28._m0;
    traceRayEXT(accelerationStructureEXT(_20._m0[(4u * subgroupBroadcastFirst(registers._m0 + 3u)) + 3u]), 0u, 0u, 0u, 0u, 0u, vec3(1.0, 2.0, 3.0), 1.0, vec3(0.0, 0.0, 1.0), 4.0, 2);
    _26._m0 = _27._m0;
    traceRayEXT(accelerationStructureEXT(_20._m0[(4u * ((registers._m0 + 100u) + uint(int(_27._m0.w)))) + 3u]), 0u, 0u, 0u, 0u, 0u, vec3(1.0, 2.0, 3.0), 1.0, vec3(0.0, 0.0, 1.0), 4.0, 1);
    _25._m0 = _26._m0;
    traceRayEXT(accelerationStructureEXT(_20._m0[(4u * subgroupBroadcastFirst((SBT._m7.x >> 6u) + 210u)) + 3u]), 0u, 0u, 0u, 0u, 0u, vec3(1.0, 2.0, 3.0), 1.0, vec3(0.0, 0.0, 1.0), 4.0, 0);
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.4
; Generator: Unknown(30017); 21022
; Bound: 104
; Schema: 0
OpCapability Shader
OpCapability UniformBufferArrayDynamicIndexing
OpCapability SampledImageArrayDynamicIndexing
OpCapability StorageBufferArrayDynamicIndexing
OpCapability StorageImageArrayDynamicIndexing
OpCapability GroupNonUniformBallot
OpCapability RayTracingKHR
OpCapability RuntimeDescriptorArray
OpCapability UniformBufferArrayNonUniformIndexing
OpCapability SampledImageArrayNonUniformIndexing
OpCapability StorageBufferArrayNonUniformIndexing
OpCapability StorageImageArrayNonUniformIndexing
OpCapability PhysicalStorageBufferAddresses
OpExtension "SPV_EXT_descriptor_indexing"
OpExtension "SPV_KHR_physical_storage_buffer"
OpExtension "SPV_KHR_ray_tracing"
OpMemoryModel PhysicalStorageBuffer64 GLSL450
OpEntryPoint RayGenerationKHR %3 "main" %8 %16 %20 %25 %26 %27 %28
OpName %3 "main"
OpName %6 "RootConstants"
OpName %8 "registers"
OpName %14 "SBTBlock"
OpName %16 "SBT"
OpName %18 "RTASHeap"
OpName %23 ""
OpDecorate %6 Block
OpMemberDecorate %6 0 Offset 0
OpMemberDecorate %6 1 Offset 4
OpMemberDecorate %6 2 Offset 8
OpMemberDecorate %6 3 Offset 12
OpMemberDecorate %6 4 Offset 16
OpMemberDecorate %6 5 Offset 20
OpMemberDecorate %6 6 Offset 24
OpMemberDecorate %6 7 Offset 28
OpDecorate %10 ArrayStride 4
OpDecorate %12 ArrayStride 4
OpDecorate %14 Block
OpMemberDecorate %14 0 Offset 0
OpMemberDecorate %14 1 Offset 20
OpMemberDecorate %14 2 Offset 48
OpMemberDecorate %14 3 Offset 56
OpMemberDecorate %14 4 Offset 64
OpMemberDecorate %14 5 Offset 72
OpMemberDecorate %14 6 Offset 80
OpMemberDecorate %14 7 Offset 88
OpMemberDecorate %14 8 Offset 96
OpMemberDecorate %14 9 Offset 104
OpMemberDecorate %14 10 Offset 112
OpDecorate %17 ArrayStride 8
OpMemberDecorate %18 0 Offset 0
OpDecorate %18 Block
OpDecorate %20 DescriptorSet 0
OpDecorate %20 Binding 0
OpDecorate %20 NonWritable
OpDecorate %20 Restrict
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeInt 32 0
%6 = OpTypeStruct %5 %5 %5 %5 %5 %5 %5 %5
%7 = OpTypePointer PushConstant %6
%8 = OpVariable %7 PushConstant
%9 = OpConstant %5 5
%10 = OpTypeArray %5 %9
%11 = OpConstant %5 6
%12 = OpTypeArray %5 %11
%13 = OpTypeVector %5 2
%14 = OpTypeStruct %10 %12 %13 %13 %13 %13 %13 %13 %13 %13 %13
%15 = OpTypePointer ShaderRecordBufferKHR %14
%16 = OpVariable %15 ShaderRecordBufferKHR
%17 = OpTypeRuntimeArray %13
%18 = OpTypeStruct %17
%19 = OpTypePointer StorageBuffer %18
%20 = OpVariable %19 StorageBuffer
%21 = OpTypeFloat 32
%22 = OpTypeVector %21 4
%23 = OpTypeStruct %22
%24 = OpTypePointer RayPayloadKHR %23
%25 = OpVariable %24 RayPayloadKHR
%26 = OpVariable %24 RayPayloadKHR
%27 = OpVariable %24 RayPayloadKHR
%28 = OpVariable %24 RayPayloadKHR
%29 = OpTypePointer PushConstant %5
%31 = OpConstant %5 0
%34 = OpConstant %5 110
%36 = OpConstant %5 3
%38 = OpConstant %5 4
%40 = OpTypePointer StorageBuffer %13
%43 = OpTypeAccelerationStructureKHR
%45 = OpTypePointer RayPayloadKHR %22
%47 = OpConstant %21 1
%48 = OpConstant %21 2
%49 = OpConstant %21 3
%50 = OpConstant %21 4
%51 = OpConstantComposite %22 %47 %48 %49 %50
%52 = OpConstant %21 0
%53 = OpTypeVector %21 3
%75 = OpConstant %5 100
%86 = OpTypePointer ShaderRecordBufferKHR %5
%88 = OpConstant %5 7
%92 = OpConstant %5 210
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %102
%102 = OpLabel
%30 = OpAccessChain %29 %8 %31
%32 = OpLoad %5 %30
%33 = OpIAdd %5 %32 %34
%35 = OpGroupNonUniformBroadcastFirst %5 %36 %33
%37 = OpIMul %5 %38 %35
%39 = OpIAdd %5 %37 %36
%41 = OpAccessChain %40 %20 %31 %39
%42 = OpLoad %13 %41
%44 = OpConvertUToAccelerationStructureKHR %43 %42
%46 = OpInBoundsAccessChain %45 %28 %31
OpStore %46 %51
%54 = OpCompositeConstruct %53 %47 %48 %49
%55 = OpCompositeConstruct %53 %52 %52 %47
OpTraceRayKHR %44 %31 %31 %31 %31 %31 %54 %47 %55 %50 %28
%56 = OpLoad %22 %46
%57 = OpAccessChain %29 %8 %31
%58 = OpLoad %5 %57
%59 = OpIAdd %5 %58 %36
%60 = OpGroupNonUniformBroadcastFirst %5 %36 %59
%61 = OpIMul %5 %38 %60
%62 = OpIAdd %5 %61 %36
%63 = OpAccessChain %40 %20 %31 %62
%64 = OpLoad %13 %63
%65 = OpConvertUToAccelerationStructureKHR %43 %64
%66 = OpInBoundsAccessChain %45 %27 %31
OpStore %66 %56
%67 = OpCompositeConstruct %53 %47 %48 %49
%68 = OpCompositeConstruct %53 %52 %52 %47
OpTraceRayKHR %65 %31 %31 %31 %31 %31 %67 %47 %68 %50 %27
%69 = OpLoad %22 %66
%70 = OpCompositeExtract %21 %69 3
%71 = OpConvertFToS %5 %70
%72 = OpAccessChain %29 %8 %31
%73 = OpLoad %5 %72
%74 = OpIAdd %5 %73 %75
%76 = OpIAdd %5 %74 %71
%77 = OpIMul %5 %38 %76
%78 = OpIAdd %5 %77 %36
%79 = OpAccessChain %40 %20 %31 %78
%80 = OpLoad %13 %79
%81 = OpConvertUToAccelerationStructureKHR %43 %80
%82 = OpInBoundsAccessChain %45 %26 %31
OpStore %82 %69
%83 = OpCompositeConstruct %53 %47 %48 %49
%84 = OpCompositeConstruct %53 %52 %52 %47
OpTraceRayKHR %81 %31 %31 %31 %31 %31 %83 %47 %84 %50 %26
%85 = OpLoad %22 %82
%87 = OpAccessChain %86 %16 %88 %31
%89 = OpLoad %5 %87
%90 = OpShiftRightLogical %5 %89 %11
%91 = OpIAdd %5 %90 %92
%93 = OpGroupNonUniformBroadcastFirst %5 %36 %91
%94 = OpIMul %5 %38 %93
%95 = OpIAdd %5 %94 %36
%96 = OpAccessChain %40 %20 %31 %95
%97 = OpLoad %13 %96
%98 = OpConvertUToAccelerationStructureKHR %43 %97
%99 = OpInBoundsAccessChain %45 %25 %31
OpStore %99 %85
%100 = OpCompositeConstruct %53 %47 %48 %49
%101 = OpCompositeConstruct %53 %52 %52 %47
OpTraceRayKHR %98 %31 %31 %31 %31 %31 %100 %47 %101 %50 %25
OpReturn
OpFunctionEnd
#endif
