#version 460
#extension GL_EXT_ray_tracing : require
#extension GL_EXT_ray_flags_primitive_culling : require
#extension GL_EXT_nonuniform_qualifier : require
layout(primitive_culling);

struct _20
{
    vec4 _m0;
};

layout(set = 0, binding = 0, std140) uniform FlagsUBO
{
    vec4 _m0[1];
} Flags;

layout(set = 0, binding = 0) uniform accelerationStructureEXT AS;
layout(set = 0, binding = 0) uniform writeonly image2D IMG;
layout(location = 0) rayPayloadEXT _20 _22;

void main()
{
    traceRayEXT(AS, floatBitsToUint(Flags._m0[0u]).x, 0u, 1u, 2u, 3u, vec3(1.0, 2.0, 3.0), 7.0, vec3(4.0, 5.0, 6.0), 8.0, 0);
    imageStore(IMG, ivec2(uvec2(0u)), vec4(_22._m0));
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.4
; Generator: Unknown(30017); 21022
; Bound: 57
; Schema: 0
OpCapability Shader
OpCapability UniformBufferArrayDynamicIndexing
OpCapability SampledImageArrayDynamicIndexing
OpCapability StorageBufferArrayDynamicIndexing
OpCapability StorageImageArrayDynamicIndexing
OpCapability StorageImageWriteWithoutFormat
OpCapability RayTraversalPrimitiveCullingKHR
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 %19 %22
OpName %3 "main"
OpName %8 "AS"
OpName %12 "IMG"
OpName %17 "FlagsUBO"
OpName %19 "Flags"
OpName %20 ""
OpDecorate %8 DescriptorSet 0
OpDecorate %8 Binding 0
OpDecorate %12 DescriptorSet 0
OpDecorate %12 Binding 0
OpDecorate %12 NonReadable
OpDecorate %16 ArrayStride 16
OpMemberDecorate %17 0 Offset 0
OpDecorate %17 Block
OpDecorate %19 DescriptorSet 0
OpDecorate %19 Binding 0
%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 = OpTypeInt 32 0
%14 = OpConstant %13 1
%15 = OpTypeVector %9 4
%16 = OpTypeArray %15 %14
%17 = OpTypeStruct %16
%18 = OpTypePointer Uniform %17
%19 = OpVariable %18 Uniform
%20 = OpTypeStruct %15
%21 = OpTypePointer RayPayloadKHR %20
%22 = OpVariable %21 RayPayloadKHR
%23 = OpConstant %13 0
%24 = OpTypePointer Uniform %15
%27 = OpTypeVector %13 4
%31 = OpConstant %13 2
%32 = OpConstant %13 3
%33 = OpConstant %9 1
%34 = OpConstant %9 4
%35 = OpConstant %9 2
%36 = OpConstant %9 5
%37 = OpConstant %9 3
%38 = OpConstant %9 6
%39 = OpConstant %9 7
%40 = OpConstant %9 8
%41 = OpTypeVector %9 3
%44 = OpTypePointer RayPayloadKHR %15
%52 = OpTypeVector %13 2
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %55
%55 = OpLabel
%25 = OpAccessChain %24 %19 %23 %23
%26 = OpLoad %15 %25
%28 = OpBitcast %27 %26
%29 = OpCompositeExtract %13 %28 0
%30 = OpLoad %6 %8
%42 = OpCompositeConstruct %41 %33 %35 %37
%43 = OpCompositeConstruct %41 %34 %36 %38
OpTraceRayKHR %30 %29 %23 %14 %31 %32 %42 %39 %43 %40 %22
%45 = OpInBoundsAccessChain %44 %22 %23
%46 = OpLoad %15 %45
%47 = OpLoad %10 %12
%48 = OpCompositeExtract %9 %46 0
%49 = OpCompositeExtract %9 %46 1
%50 = OpCompositeExtract %9 %46 2
%51 = OpCompositeExtract %9 %46 3
%53 = OpCompositeConstruct %52 %23 %23
%54 = OpCompositeConstruct %15 %48 %49 %50 %51
OpImageWrite %47 %53 %54
OpReturn
OpFunctionEnd
#endif
