spv.ext.IntersectShader.rint
// Module Version 10400
// Generated by (magic number): 8000a
// Id's are bound by 81

                              Capability RayTracingKHR
                              Extension  "SPV_KHR_ray_tracing"
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint IntersectionKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 56 59 65 69 73
                              Source GLSL 460
                              SourceExtension  "GL_EXT_ray_tracing"
                              Name 4  "main"
                              Name 9  "v0"
                              Name 11  "gl_LaunchIDEXT"
                              Name 13  "v1"
                              Name 14  "gl_LaunchSizeEXT"
                              Name 18  "v2"
                              Name 20  "gl_PrimitiveID"
                              Name 22  "v3"
                              Name 23  "gl_InstanceID"
                              Name 25  "v4"
                              Name 26  "gl_InstanceCustomIndexEXT"
                              Name 31  "v5"
                              Name 33  "gl_WorldRayOriginEXT"
                              Name 35  "v6"
                              Name 36  "gl_WorldRayDirectionEXT"
                              Name 38  "v7"
                              Name 39  "gl_ObjectRayOriginEXT"
                              Name 41  "v8"
                              Name 42  "gl_ObjectRayDirectionEXT"
                              Name 45  "v9"
                              Name 47  "gl_RayTminEXT"
                              Name 49  "v10"
                              Name 50  "gl_RayTmaxEXT"
                              Name 54  "v11"
                              Name 56  "gl_ObjectToWorldEXT"
                              Name 58  "v12"
                              Name 59  "gl_WorldToObjectEXT"
                              Name 64  "v13"
                              Name 65  "gl_ObjectToWorld3x4EXT"
                              Name 68  "v14"
                              Name 69  "gl_WorldToObject3x4EXT"
                              Name 73  "iAttr"
                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                              Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                              Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
                              Decorate 23(gl_InstanceID) BuiltIn InstanceId
                              Decorate 26(gl_InstanceCustomIndexEXT) BuiltIn InstanceCustomIndexKHR
                              Decorate 33(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR
                              Decorate 36(gl_WorldRayDirectionEXT) BuiltIn WorldRayDirectionKHR
                              Decorate 39(gl_ObjectRayOriginEXT) BuiltIn ObjectRayOriginKHR
                              Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
                              Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
                              Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
                              Decorate 50(gl_RayTmaxEXT) Volatile
                              Decorate 50(gl_RayTmaxEXT) Coherent
                              Decorate 56(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
                              Decorate 59(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
                              Decorate 65(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR
                              Decorate 69(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 0
               7:             TypeVector 6(int) 3
               8:             TypePointer Function 7(ivec3)
              10:             TypePointer Input 7(ivec3)
11(gl_LaunchIDEXT):     10(ptr) Variable Input
14(gl_LaunchSizeEXT):     10(ptr) Variable Input
              16:             TypeInt 32 1
              17:             TypePointer Function 16(int)
              19:             TypePointer Input 16(int)
20(gl_PrimitiveID):     19(ptr) Variable Input
23(gl_InstanceID):     19(ptr) Variable Input
26(gl_InstanceCustomIndexEXT):     19(ptr) Variable Input
              28:             TypeFloat 32
              29:             TypeVector 28(float) 3
              30:             TypePointer Function 29(fvec3)
              32:             TypePointer Input 29(fvec3)
33(gl_WorldRayOriginEXT):     32(ptr) Variable Input
36(gl_WorldRayDirectionEXT):     32(ptr) Variable Input
39(gl_ObjectRayOriginEXT):     32(ptr) Variable Input
42(gl_ObjectRayDirectionEXT):     32(ptr) Variable Input
              44:             TypePointer Function 28(float)
              46:             TypePointer Input 28(float)
47(gl_RayTminEXT):     46(ptr) Variable Input
50(gl_RayTmaxEXT):     46(ptr) Variable Input
              52:             TypeMatrix 29(fvec3) 4
              53:             TypePointer Function 52
              55:             TypePointer Input 52
56(gl_ObjectToWorldEXT):     55(ptr) Variable Input
59(gl_WorldToObjectEXT):     55(ptr) Variable Input
              61:             TypeVector 28(float) 4
              62:             TypeMatrix 61(fvec4) 3
              63:             TypePointer Function 62
65(gl_ObjectToWorld3x4EXT):     55(ptr) Variable Input
69(gl_WorldToObject3x4EXT):     55(ptr) Variable Input
              72:             TypePointer HitAttributeKHR 61(fvec4)
       73(iAttr):     72(ptr) Variable HitAttributeKHR
              74:   28(float) Constant 1056964608
              75:   28(float) Constant 0
              76:   28(float) Constant 1065353216
              77:   61(fvec4) ConstantComposite 74 74 75 76
              78:      6(int) Constant 1
              79:             TypeBool
         4(main):           2 Function None 3
               5:             Label
           9(v0):      8(ptr) Variable Function
          13(v1):      8(ptr) Variable Function
          18(v2):     17(ptr) Variable Function
          22(v3):     17(ptr) Variable Function
          25(v4):     17(ptr) Variable Function
          31(v5):     30(ptr) Variable Function
          35(v6):     30(ptr) Variable Function
          38(v7):     30(ptr) Variable Function
          41(v8):     30(ptr) Variable Function
          45(v9):     44(ptr) Variable Function
         49(v10):     44(ptr) Variable Function
         54(v11):     53(ptr) Variable Function
         58(v12):     53(ptr) Variable Function
         64(v13):     63(ptr) Variable Function
         68(v14):     63(ptr) Variable Function
              12:    7(ivec3) Load 11(gl_LaunchIDEXT)
                              Store 9(v0) 12
              15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
                              Store 13(v1) 15
              21:     16(int) Load 20(gl_PrimitiveID)
                              Store 18(v2) 21
              24:     16(int) Load 23(gl_InstanceID)
                              Store 22(v3) 24
              27:     16(int) Load 26(gl_InstanceCustomIndexEXT)
                              Store 25(v4) 27
              34:   29(fvec3) Load 33(gl_WorldRayOriginEXT)
                              Store 31(v5) 34
              37:   29(fvec3) Load 36(gl_WorldRayDirectionEXT)
                              Store 35(v6) 37
              40:   29(fvec3) Load 39(gl_ObjectRayOriginEXT)
                              Store 38(v7) 40
              43:   29(fvec3) Load 42(gl_ObjectRayDirectionEXT)
                              Store 41(v8) 43
              48:   28(float) Load 47(gl_RayTminEXT)
                              Store 45(v9) 48
              51:   28(float) Load 50(gl_RayTmaxEXT)
                              Store 49(v10) 51
              57:          52 Load 56(gl_ObjectToWorldEXT)
                              Store 54(v11) 57
              60:          52 Load 59(gl_WorldToObjectEXT)
                              Store 58(v12) 60
              66:          52 Load 65(gl_ObjectToWorld3x4EXT)
              67:          62 Transpose 66
                              Store 64(v13) 67
              70:          52 Load 69(gl_WorldToObject3x4EXT)
              71:          62 Transpose 70
                              Store 68(v14) 71
                              Store 73(iAttr) 77
              80:    79(bool) ReportIntersectionKHR 74 78
                              Return
                              FunctionEnd
