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

struct _7
{
    vec3 _m0;
};

struct _11
{
    vec2 _m0;
};

vec3 _59;

layout(location = 0) rayPayloadInEXT _7 payload;
hitAttributeEXT _11 hit;

void main()
{
    vec3 _58;
    _58.x = fma(gl_WorldToObjectEXT[2u].x, payload._m0.z, fma(gl_WorldToObjectEXT[1u].x, payload._m0.y, gl_WorldToObjectEXT[0u].x * payload._m0.x)) + gl_WorldToObjectEXT[3u].x;
    _58.y = fma(gl_WorldToObjectEXT[2u].y, payload._m0.z, fma(gl_WorldToObjectEXT[1u].y, payload._m0.y, gl_WorldToObjectEXT[0u].y * payload._m0.x)) + gl_WorldToObjectEXT[3u].y;
    _58.z = fma(gl_WorldToObjectEXT[2u].z, payload._m0.z, fma(gl_WorldToObjectEXT[1u].z, payload._m0.y, gl_WorldToObjectEXT[0u].z * payload._m0.x)) + gl_WorldToObjectEXT[3u].z;
    payload._m0 = _58;
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.4
; Generator: Unknown(30017); 21022
; Bound: 72
; Schema: 0
OpCapability Shader
OpCapability UniformBufferArrayDynamicIndexing
OpCapability SampledImageArrayDynamicIndexing
OpCapability StorageBufferArrayDynamicIndexing
OpCapability StorageImageArrayDynamicIndexing
OpCapability RayTracingKHR
OpCapability RuntimeDescriptorArray
OpCapability UniformBufferArrayNonUniformIndexing
OpCapability SampledImageArrayNonUniformIndexing
OpCapability StorageBufferArrayNonUniformIndexing
OpCapability StorageImageArrayNonUniformIndexing
OpExtension "SPV_EXT_descriptor_indexing"
OpExtension "SPV_KHR_ray_tracing"
%54 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint AnyHitNV %3 "main" %9 %13 %24
OpName %3 "main"
OpName %7 ""
OpName %9 "payload"
OpName %11 ""
OpName %13 "hit"
OpDecorate %24 BuiltIn WorldToObjectNV
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeFloat 32
%6 = OpTypeVector %5 3
%7 = OpTypeStruct %6
%8 = OpTypePointer IncomingRayPayloadNV %7
%9 = OpVariable %8 IncomingRayPayloadNV
%10 = OpTypeVector %5 2
%11 = OpTypeStruct %10
%12 = OpTypePointer HitAttributeNV %11
%13 = OpVariable %12 HitAttributeNV
%14 = OpTypePointer IncomingRayPayloadNV %6
%16 = OpTypeInt 32 0
%17 = OpConstant %16 0
%22 = OpTypeMatrix %6 4
%23 = OpTypePointer Input %22
%24 = OpVariable %23 Input
%25 = OpTypePointer Input %5
%29 = OpConstant %16 1
%32 = OpConstant %16 2
%35 = OpConstant %16 3
%3 = OpFunction %1 None %2
%4 = OpLabel
%59 = OpUndef %6
OpBranch %70
%70 = OpLabel
%15 = OpInBoundsAccessChain %14 %9 %17
%18 = OpLoad %6 %15
%19 = OpCompositeExtract %5 %18 0
%20 = OpCompositeExtract %5 %18 1
%21 = OpCompositeExtract %5 %18 2
%26 = OpAccessChain %25 %24 %17 %17
%27 = OpLoad %5 %26
%28 = OpAccessChain %25 %24 %29 %17
%30 = OpLoad %5 %28
%31 = OpAccessChain %25 %24 %32 %17
%33 = OpLoad %5 %31
%34 = OpAccessChain %25 %24 %35 %17
%36 = OpLoad %5 %34
%37 = OpAccessChain %25 %24 %17 %29
%38 = OpLoad %5 %37
%39 = OpAccessChain %25 %24 %29 %29
%40 = OpLoad %5 %39
%41 = OpAccessChain %25 %24 %32 %29
%42 = OpLoad %5 %41
%43 = OpAccessChain %25 %24 %35 %29
%44 = OpLoad %5 %43
%45 = OpAccessChain %25 %24 %17 %32
%46 = OpLoad %5 %45
%47 = OpAccessChain %25 %24 %29 %32
%48 = OpLoad %5 %47
%49 = OpAccessChain %25 %24 %32 %32
%50 = OpLoad %5 %49
%51 = OpAccessChain %25 %24 %35 %32
%52 = OpLoad %5 %51
%53 = OpFMul %5 %27 %19
%55 = OpExtInst %5 %54 Fma %30 %20 %53
%56 = OpExtInst %5 %54 Fma %33 %21 %55
%57 = OpFAdd %5 %56 %36
%58 = OpCompositeInsert %6 %57 %59 0
%60 = OpFMul %5 %38 %19
%61 = OpExtInst %5 %54 Fma %40 %20 %60
%62 = OpExtInst %5 %54 Fma %42 %21 %61
%63 = OpFAdd %5 %62 %44
%64 = OpCompositeInsert %6 %63 %58 1
%65 = OpFMul %5 %46 %19
%66 = OpExtInst %5 %54 Fma %48 %20 %65
%67 = OpExtInst %5 %54 Fma %50 %21 %66
%68 = OpFAdd %5 %67 %52
%69 = OpCompositeInsert %6 %68 %64 2
OpStore %15 %69
OpReturn
OpFunctionEnd
#endif
