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

struct _14
{
    vec4 _m0;
};

struct _15
{
    _14 _m0;
    _14 _m1;
};

layout(set = 40, binding = 30) uniform accelerationStructureEXT AS;
layout(set = 20, binding = 10) uniform writeonly image2D IMG;
layout(location = 0) rayPayloadEXT _15 _30;
layout(location = 1) rayPayloadEXT _14 _39;
layout(location = 2) callableDataEXT _15 _50;
layout(location = 3) callableDataEXT _14 _54;

void main()
{
    _15 _17;
    _30 = _17;
    traceRayEXT(AS, 0u, 0u, 0u, 0u, 0u, vec3(1.0, 2.0, 3.0), 1.0, vec3(0.0, 0.0, 1.0), 4.0, 0);
    _17 = _30;
    _39 = _17._m0;
    traceRayEXT(AS, 0u, 0u, 0u, 0u, 0u, vec3(1.0, 2.0, 3.0), 1.0, vec3(0.0, 0.0, 1.0), 4.0, 1);
    _17._m0 = _39;
    _39 = _17._m1;
    traceRayEXT(AS, 0u, 0u, 0u, 0u, 0u, vec3(1.0, 2.0, 3.0), 1.0, vec3(0.0, 0.0, 1.0), 4.0, 1);
    _17._m1 = _39;
    _50 = _17;
    executeCallableEXT(0u, 2);
    _17 = _50;
    _54 = _17._m0;
    executeCallableEXT(0u, 3);
    _17._m0 = _54;
    _54 = _17._m1;
    executeCallableEXT(0u, 3);
    _17._m1 = _54;
    imageStore(IMG, ivec2(uvec2(0u)), vec4(_17._m1._m0.x + _17._m0._m0.x, _17._m1._m0.y + _17._m0._m0.y, _17._m1._m0.z + _17._m0._m0.z, _17._m1._m0.w + _17._m0._m0.w));
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.4
; Generator: Unknown(30017); 21022
; Bound: 82
; Schema: 0
OpCapability Shader
OpCapability UniformBufferArrayDynamicIndexing
OpCapability SampledImageArrayDynamicIndexing
OpCapability StorageBufferArrayDynamicIndexing
OpCapability StorageImageArrayDynamicIndexing
OpCapability StorageImageWriteWithoutFormat
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" %8 %12 %30 %39 %50 %54
OpName %3 "main"
OpName %8 "AS"
OpName %12 "IMG"
OpName %14 ""
OpName %15 ""
OpDecorate %8 DescriptorSet 40
OpDecorate %8 Binding 30
OpDecorate %12 DescriptorSet 20
OpDecorate %12 Binding 10
OpDecorate %12 NonReadable
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeInt 32 1
%6 = OpTypeAccelerationStructureKHR
%7 = OpTypePointer UniformConstant %6
%8 = OpVariable %7 UniformConstant
%9 = OpTypeFloat 32
%10 = OpTypeImage %9 2D 0 0 0 2 Unknown
%11 = OpTypePointer UniformConstant %10
%12 = OpVariable %11 UniformConstant
%13 = OpTypeVector %9 4
%14 = OpTypeStruct %13
%15 = OpTypeStruct %14 %14
%16 = OpTypePointer Function %15
%19 = OpTypeInt 32 0
%20 = OpConstant %19 0
%21 = OpConstant %9 1
%22 = OpConstant %9 0
%23 = OpConstant %9 2
%24 = OpConstant %9 3
%25 = OpConstant %9 4
%26 = OpTypeVector %9 3
%29 = OpTypePointer RayPayloadKHR %15
%30 = OpVariable %29 RayPayloadKHR
%33 = OpTypePointer Function %14
%38 = OpTypePointer RayPayloadKHR %14
%39 = OpVariable %38 RayPayloadKHR
%43 = OpConstant %19 1
%49 = OpTypePointer CallableDataKHR %15
%50 = OpVariable %49 CallableDataKHR
%53 = OpTypePointer CallableDataKHR %14
%54 = OpVariable %53 CallableDataKHR
%59 = OpTypePointer Function %13
%77 = OpTypeVector %19 2
%3 = OpFunction %1 None %2
%4 = OpLabel
%17 = OpVariable %16 Function
OpBranch %80
%80 = OpLabel
%18 = OpLoad %6 %8
%27 = OpCompositeConstruct %26 %21 %23 %24
%28 = OpCompositeConstruct %26 %22 %22 %21
%31 = OpLoad %15 %17
OpStore %30 %31
OpTraceRayKHR %18 %20 %20 %20 %20 %20 %27 %21 %28 %25 %30
%32 = OpLoad %15 %30
OpStore %17 %32
%34 = OpInBoundsAccessChain %33 %17 %20
%35 = OpLoad %6 %8
%36 = OpCompositeConstruct %26 %21 %23 %24
%37 = OpCompositeConstruct %26 %22 %22 %21
%40 = OpLoad %14 %34
OpStore %39 %40
OpTraceRayKHR %35 %20 %20 %20 %20 %20 %36 %21 %37 %25 %39
%41 = OpLoad %14 %39
OpStore %34 %41
%42 = OpInBoundsAccessChain %33 %17 %43
%44 = OpLoad %6 %8
%45 = OpCompositeConstruct %26 %21 %23 %24
%46 = OpCompositeConstruct %26 %22 %22 %21
%47 = OpLoad %14 %42
OpStore %39 %47
OpTraceRayKHR %44 %20 %20 %20 %20 %20 %45 %21 %46 %25 %39
%48 = OpLoad %14 %39
OpStore %42 %48
%51 = OpLoad %15 %17
OpStore %50 %51
OpExecuteCallableKHR %20 %50
%52 = OpLoad %15 %50
OpStore %17 %52
%55 = OpLoad %14 %34
OpStore %54 %55
OpExecuteCallableKHR %20 %54
%56 = OpLoad %14 %54
OpStore %34 %56
%57 = OpLoad %14 %42
OpStore %54 %57
OpExecuteCallableKHR %20 %54
%58 = OpLoad %14 %54
OpStore %42 %58
%60 = OpInBoundsAccessChain %59 %17 %20 %20
%61 = OpLoad %13 %60
%62 = OpCompositeExtract %9 %61 0
%63 = OpCompositeExtract %9 %61 1
%64 = OpCompositeExtract %9 %61 2
%65 = OpCompositeExtract %9 %61 3
%66 = OpInBoundsAccessChain %59 %17 %43 %20
%67 = OpLoad %13 %66
%68 = OpCompositeExtract %9 %67 0
%69 = OpFAdd %9 %68 %62
%70 = OpCompositeExtract %9 %67 1
%71 = OpFAdd %9 %70 %63
%72 = OpCompositeExtract %9 %67 2
%73 = OpFAdd %9 %72 %64
%74 = OpCompositeExtract %9 %67 3
%75 = OpFAdd %9 %74 %65
%76 = OpLoad %10 %12
%78 = OpCompositeConstruct %77 %20 %20
%79 = OpCompositeConstruct %13 %69 %71 %73 %75
OpImageWrite %76 %78 %79
OpReturn
OpFunctionEnd
#endif
