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

struct _15
{
    vec4 _m0;
};

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

layout(set = 0, binding = 0) uniform accelerationStructureEXT _12[];
layout(location = 0) rayPayloadEXT _15 _17;

void main()
{
    _17._m0 = vec4(1.0, 2.0, 3.0, 4.0);
    traceRayEXT(_12[(registers._m0 + 100u) + 10u], 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(_12[registers._m0 + 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);
    traceRayEXT(_12[nonuniformEXT((registers._m0 + 100u) + uint(int(_17._m0.w)))], 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 RayGenerationNV %3 "main" %8 %12 %17
OpName %3 "main"
OpName %6 "RootConstants"
OpName %8 "registers"
OpName %15 ""
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 %12 DescriptorSet 0
OpDecorate %12 Binding 0
OpDecorate %55 NonUniform
OpDecorate %56 NonUniform
%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 = OpTypeAccelerationStructureKHR
%10 = OpTypeRuntimeArray %9
%11 = OpTypePointer UniformConstant %10
%12 = OpVariable %11 UniformConstant
%13 = OpTypeFloat 32
%14 = OpTypeVector %13 4
%15 = OpTypeStruct %14
%16 = OpTypePointer RayPayloadNV %15
%17 = OpVariable %16 RayPayloadNV
%18 = OpTypePointer RayPayloadNV %14
%20 = OpConstant %5 0
%21 = OpConstant %13 1
%22 = OpConstant %13 2
%23 = OpConstant %13 3
%24 = OpConstant %13 4
%25 = OpConstantComposite %14 %21 %22 %23 %24
%26 = OpTypePointer UniformConstant %9
%28 = OpTypePointer PushConstant %5
%32 = OpConstant %5 100
%34 = OpConstant %5 10
%36 = OpConstant %13 0
%37 = OpTypeVector %13 3
%44 = OpConstant %5 3
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %59
%59 = OpLabel
%19 = OpInBoundsAccessChain %18 %17 %20
OpStore %19 %25
%29 = OpAccessChain %28 %8 %20
%30 = OpLoad %5 %29
%31 = OpIAdd %5 %30 %32
%33 = OpIAdd %5 %31 %34
%27 = OpAccessChain %26 %12 %33
%35 = OpLoad %9 %27
%38 = OpCompositeConstruct %37 %21 %22 %23
%39 = OpCompositeConstruct %37 %36 %36 %21
OpTraceRayKHR %35 %20 %20 %20 %20 %20 %38 %21 %39 %24 %17
%41 = OpAccessChain %28 %8 %20
%42 = OpLoad %5 %41
%43 = OpIAdd %5 %42 %44
%40 = OpAccessChain %26 %12 %43
%45 = OpLoad %9 %40
%46 = OpCompositeConstruct %37 %21 %22 %23
%47 = OpCompositeConstruct %37 %36 %36 %21
OpTraceRayKHR %45 %20 %20 %20 %20 %20 %46 %21 %47 %24 %17
%48 = OpLoad %14 %19
%49 = OpCompositeExtract %13 %48 3
%50 = OpConvertFToS %5 %49
%52 = OpAccessChain %28 %8 %20
%53 = OpLoad %5 %52
%54 = OpIAdd %5 %53 %32
%55 = OpIAdd %5 %54 %50
%51 = OpAccessChain %26 %12 %55
%56 = OpLoad %9 %51
%57 = OpCompositeConstruct %37 %21 %22 %23
%58 = OpCompositeConstruct %37 %36 %36 %21
OpTraceRayKHR %56 %20 %20 %20 %20 %20 %57 %21 %58 %24 %17
OpReturn
OpFunctionEnd
#endif
