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

struct _14
{
    vec4 _m0;
};

struct _17
{
    float _m0;
};

layout(set = 40, binding = 30) uniform accelerationStructureEXT AS;
layout(set = 20, binding = 10) uniform writeonly image2D IMG;
layout(location = 0) rayPayloadEXT _14 _16;
layout(location = 1) rayPayloadEXT _17 _19;

void main()
{
    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);
    traceRayEXT(AS, 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(IMG, ivec2(uvec2(0u)), vec4(_16._m0.x + _19._m0, _16._m0.y + _19._m0, _16._m0.z + _19._m0, _16._m0.w + _19._m0));
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.4
; Generator: Unknown(30017); 21022
; Bound: 55
; 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 %16 %19
OpName %3 "main"
OpName %8 "AS"
OpName %12 "IMG"
OpName %14 ""
OpName %17 ""
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 = OpTypePointer RayPayloadKHR %14
%16 = OpVariable %15 RayPayloadKHR
%17 = OpTypeStruct %9
%18 = OpTypePointer RayPayloadKHR %17
%19 = OpVariable %18 RayPayloadKHR
%21 = OpTypeInt 32 0
%22 = OpConstant %21 0
%23 = OpConstant %9 1
%24 = OpConstant %9 0
%25 = OpConstant %9 2
%26 = OpConstant %9 3
%27 = OpConstant %9 4
%28 = OpTypeVector %9 3
%32 = OpConstant %21 1
%35 = OpTypePointer RayPayloadKHR %13
%42 = OpTypePointer RayPayloadKHR %9
%50 = OpTypeVector %21 2
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %53
%53 = OpLabel
%20 = OpLoad %6 %8
%29 = OpCompositeConstruct %28 %23 %25 %26
%30 = OpCompositeConstruct %28 %24 %24 %23
OpTraceRayKHR %20 %22 %22 %22 %22 %22 %29 %23 %30 %27 %16
%31 = OpLoad %6 %8
%33 = OpCompositeConstruct %28 %23 %25 %26
%34 = OpCompositeConstruct %28 %24 %24 %23
OpTraceRayKHR %31 %22 %32 %22 %22 %22 %33 %23 %34 %27 %19
%36 = OpInBoundsAccessChain %35 %16 %22
%37 = OpLoad %13 %36
%38 = OpCompositeExtract %9 %37 0
%39 = OpCompositeExtract %9 %37 1
%40 = OpCompositeExtract %9 %37 2
%41 = OpCompositeExtract %9 %37 3
%43 = OpInBoundsAccessChain %42 %19 %22
%44 = OpLoad %9 %43
%45 = OpFAdd %9 %38 %44
%46 = OpFAdd %9 %39 %44
%47 = OpFAdd %9 %40 %44
%48 = OpFAdd %9 %41 %44
%49 = OpLoad %10 %12
%51 = OpCompositeConstruct %50 %22 %22
%52 = OpCompositeConstruct %13 %45 %46 %47 %48
OpImageWrite %49 %51 %52
OpReturn
OpFunctionEnd
#endif
