spv.ext.ClosestHitShader_Subgroup.rchit
// Module Version 10400
// Generated by (magic number): 8000a
// Id's are bound by 67

                              Capability Int64
                              Capability GroupNonUniform
                              Capability GroupNonUniformBallot
                              Capability SubgroupBallotKHR
                              Capability RayTracingKHR
                              Capability VulkanMemoryModelKHR
                              Capability ShaderSMBuiltinsNV
                              Extension  "SPV_KHR_ray_tracing"
                              Extension  "SPV_KHR_shader_ballot"
                              Extension  "SPV_KHR_vulkan_memory_model"
                              Extension  "SPV_NV_shader_sm_builtins"
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical VulkanKHR
                              EntryPoint ClosestHitKHR 4  "main" 8 26 28 34 43 48 53 61
                              Source GLSL 460
                              SourceExtension  "GL_ARB_shader_ballot"
                              SourceExtension  "GL_EXT_ray_tracing"
                              SourceExtension  "GL_KHR_shader_subgroup_ballot"
                              SourceExtension  "GL_KHR_shader_subgroup_basic"
                              SourceExtension  "GL_NV_shader_sm_builtins"
                              Name 4  "main"
                              Name 8  "accEXT"
                              Name 26  "incomingPayload"
                              Name 28  "gl_SubgroupInvocationID"
                              Name 34  "gl_SubGroupGeMaskARB"
                              Name 43  "gl_SubgroupGtMask"
                              Name 48  "gl_SubgroupLeMask"
                              Name 53  "gl_SubGroupLtMaskARB"
                              Name 61  "gl_SMIDNV"
                              Decorate 8(accEXT) DescriptorSet 0
                              Decorate 8(accEXT) Binding 0
                              Decorate 26(incomingPayload) Location 1
                              Decorate 28(gl_SubgroupInvocationID) RelaxedPrecision
                              Decorate 28(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
                              Decorate 29 RelaxedPrecision
                              Decorate 34(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR
                              Decorate 43(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR
                              Decorate 48(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR
                              Decorate 53(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
                              Decorate 61(gl_SMIDNV) BuiltIn SMIDNV
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeAccelerationStructureKHR
               7:             TypePointer UniformConstant 6
       8(accEXT):      7(ptr) Variable UniformConstant
              10:             TypeInt 32 0
              11:     10(int) Constant 0
              12:     10(int) Constant 1
              13:     10(int) Constant 2
              14:     10(int) Constant 3
              15:             TypeFloat 32
              16:             TypeVector 15(float) 3
              17:   15(float) Constant 1056964608
              18:   16(fvec3) ConstantComposite 17 17 17
              19:   15(float) Constant 1065353216
              20:   16(fvec3) ConstantComposite 19 19 19
              21:   15(float) Constant 1061158912
              22:             TypeInt 32 1
              23:     22(int) Constant 1
              24:             TypeVector 15(float) 4
              25:             TypePointer IncomingRayPayloadKHR 24(fvec4)
26(incomingPayload):     25(ptr) Variable IncomingRayPayloadKHR
              27:             TypePointer Input 10(int)
28(gl_SubgroupInvocationID):     27(ptr) Variable Input
              31:             TypeVector 10(int) 4
              32:             TypeInt 64 0
              33:             TypePointer Input 31(ivec4)
34(gl_SubGroupGeMaskARB):     33(ptr) Variable Input
              38:             TypeVector 10(int) 2
43(gl_SubgroupGtMask):     33(ptr) Variable Input
48(gl_SubgroupLeMask):     33(ptr) Variable Input
53(gl_SubGroupLtMaskARB):     33(ptr) Variable Input
   61(gl_SMIDNV):     27(ptr) Variable Input
              65:             TypePointer IncomingRayPayloadKHR 15(float)
         4(main):           2 Function None 3
               5:             Label
               9:           6 Load 8(accEXT)
                              TraceRayKHR 9 11 12 13 14 11 18 17 20 21 26(incomingPayload)
              29:     10(int) Load 28(gl_SubgroupInvocationID) Volatile 
              30:   15(float) ConvertUToF 29
              35:   31(ivec4) Load 34(gl_SubGroupGeMaskARB)
              36:     10(int) CompositeExtract 35 0
              37:     10(int) CompositeExtract 35 1
              39:   38(ivec2) CompositeConstruct 36 37
              40: 32(int64_t) Bitcast 39
              41:   15(float) ConvertUToF 40
              42:   15(float) FAdd 30 41
              44:   31(ivec4) Load 43(gl_SubgroupGtMask) Volatile 
              45:   24(fvec4) ConvertUToF 44
              46:   15(float) CompositeExtract 45 0
              47:   15(float) FAdd 42 46
              49:   31(ivec4) Load 48(gl_SubgroupLeMask) Volatile 
              50:   24(fvec4) ConvertUToF 49
              51:   15(float) CompositeExtract 50 0
              52:   15(float) FAdd 47 51
              54:   31(ivec4) Load 53(gl_SubGroupLtMaskARB)
              55:     10(int) CompositeExtract 54 0
              56:     10(int) CompositeExtract 54 1
              57:   38(ivec2) CompositeConstruct 55 56
              58: 32(int64_t) Bitcast 57
              59:   15(float) ConvertUToF 58
              60:   15(float) FAdd 52 59
              62:     10(int) Load 61(gl_SMIDNV) Volatile 
              63:   15(float) ConvertUToF 62
              64:   15(float) FAdd 60 63
              66:     65(ptr) AccessChain 26(incomingPayload) 11
                              Store 66 64
                              Return
                              FunctionEnd
