#version 460
#extension GL_EXT_ray_tracing : require
#extension GL_EXT_buffer_reference2 : require
#extension GL_EXT_nonuniform_qualifier : 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(push_constant, std430) uniform RootConstants
{
    uvec2 _m0;
    uvec2 _m1;
    uvec2 _m2;
    uvec2 _m3;
} registers;

layout(set = 0, binding = 1) uniform accelerationStructureEXT AS_Plain;
layout(location = 0) rayPayloadEXT _23 _25;
layout(location = 1) rayPayloadEXT _23 _26;
layout(location = 2) rayPayloadEXT _23 _27;

void main()
{
    _27._m0 = vec4(1.0, 2.0, 3.0, 4.0);
    traceRayEXT(accelerationStructureEXT(SBT._m2), 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(registers._m1), 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(AS_Plain, 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: 61
; Schema: 0
OpCapability Shader
OpCapability UniformBufferArrayDynamicIndexing
OpCapability SampledImageArrayDynamicIndexing
OpCapability StorageBufferArrayDynamicIndexing
OpCapability StorageImageArrayDynamicIndexing
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" %9 %16 %20 %25 %26 %27
OpName %3 "main"
OpName %7 "RootConstants"
OpName %9 "registers"
OpName %14 "SBTBlock"
OpName %16 "SBT"
OpName %20 "AS_Plain"
OpName %23 ""
OpDecorate %7 Block
OpMemberDecorate %7 0 Offset 0
OpMemberDecorate %7 1 Offset 8
OpMemberDecorate %7 2 Offset 16
OpMemberDecorate %7 3 Offset 24
OpDecorate %11 ArrayStride 4
OpDecorate %13 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 %20 DescriptorSet 0
OpDecorate %20 Binding 1
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeInt 32 0
%6 = OpTypeVector %5 2
%7 = OpTypeStruct %6 %6 %6 %6
%8 = OpTypePointer PushConstant %7
%9 = OpVariable %8 PushConstant
%10 = OpConstant %5 5
%11 = OpTypeArray %5 %10
%12 = OpConstant %5 6
%13 = OpTypeArray %5 %12
%14 = OpTypeStruct %11 %13 %6 %6 %6 %6 %6 %6 %6 %6 %6
%15 = OpTypePointer ShaderRecordBufferKHR %14
%16 = OpVariable %15 ShaderRecordBufferKHR
%17 = OpTypeInt 32 1
%18 = OpTypeAccelerationStructureKHR
%19 = OpTypePointer UniformConstant %18
%20 = OpVariable %19 UniformConstant
%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 = OpTypePointer ShaderRecordBufferKHR %6
%30 = OpConstant %5 2
%33 = OpTypePointer RayPayloadKHR %22
%35 = OpConstant %5 0
%36 = OpConstant %21 1
%37 = OpConstant %21 2
%38 = OpConstant %21 3
%39 = OpConstant %21 4
%40 = OpConstantComposite %22 %36 %37 %38 %39
%41 = OpConstant %21 0
%42 = OpTypeVector %21 3
%46 = OpTypePointer PushConstant %6
%48 = OpConstant %5 1
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %59
%59 = OpLabel
%29 = OpAccessChain %28 %16 %30
%31 = OpLoad %6 %29
%32 = OpConvertUToAccelerationStructureKHR %18 %31
%34 = OpInBoundsAccessChain %33 %27 %35
OpStore %34 %40
%43 = OpCompositeConstruct %42 %36 %37 %38
%44 = OpCompositeConstruct %42 %41 %41 %36
OpTraceRayKHR %32 %35 %35 %35 %35 %35 %43 %36 %44 %39 %27
%45 = OpLoad %22 %34
%47 = OpAccessChain %46 %9 %48
%49 = OpLoad %6 %47
%50 = OpConvertUToAccelerationStructureKHR %18 %49
%51 = OpInBoundsAccessChain %33 %26 %35
OpStore %51 %45
%52 = OpCompositeConstruct %42 %36 %37 %38
%53 = OpCompositeConstruct %42 %41 %41 %36
OpTraceRayKHR %50 %35 %35 %35 %35 %35 %52 %36 %53 %39 %26
%54 = OpLoad %22 %51
%55 = OpLoad %18 %20
%56 = OpInBoundsAccessChain %33 %25 %35
OpStore %56 %54
%57 = OpCompositeConstruct %42 %36 %37 %38
%58 = OpCompositeConstruct %42 %41 %41 %36
OpTraceRayKHR %55 %35 %35 %35 %35 %35 %57 %36 %58 %39 %25
OpReturn
OpFunctionEnd
#endif
