spv.ext.MissShader.rmiss
// Module Version 10400
// Generated by (magic number): 8000a
// Id's are bound by 54

                              Capability RayTracingProvisionalKHR
                              Extension  "SPV_KHR_ray_tracing"
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint MissKHR 4  "main" 11 14 21 24 29 32 36 51 53
                              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 19  "v2"
                              Name 21  "gl_WorldRayOriginEXT"
                              Name 23  "v3"
                              Name 24  "gl_WorldRayDirectionEXT"
                              Name 27  "v4"
                              Name 29  "gl_RayTminEXT"
                              Name 31  "v5"
                              Name 32  "gl_RayTmaxEXT"
                              Name 36  "accEXT"
                              Name 51  "localPayload"
                              Name 53  "incomingPayload"
                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                              Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                              Decorate 21(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR
                              Decorate 24(gl_WorldRayDirectionEXT) BuiltIn WorldRayDirectionKHR
                              Decorate 29(gl_RayTminEXT) BuiltIn RayTminKHR
                              Decorate 32(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
                              Decorate 36(accEXT) DescriptorSet 0
                              Decorate 36(accEXT) Binding 0
                              Decorate 51(localPayload) Location 0
                              Decorate 53(incomingPayload) Location 1
               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:             TypeFloat 32
              17:             TypeVector 16(float) 3
              18:             TypePointer Function 17(fvec3)
              20:             TypePointer Input 17(fvec3)
21(gl_WorldRayOriginEXT):     20(ptr) Variable Input
24(gl_WorldRayDirectionEXT):     20(ptr) Variable Input
              26:             TypePointer Function 16(float)
              28:             TypePointer Input 16(float)
29(gl_RayTminEXT):     28(ptr) Variable Input
32(gl_RayTmaxEXT):     28(ptr) Variable Input
              34:             TypeAccelerationStructureKHR
              35:             TypePointer UniformConstant 34
      36(accEXT):     35(ptr) Variable UniformConstant
              38:      6(int) Constant 0
              39:      6(int) Constant 1
              40:      6(int) Constant 2
              41:      6(int) Constant 3
              42:   16(float) Constant 1056964608
              43:   17(fvec3) ConstantComposite 42 42 42
              44:   16(float) Constant 1065353216
              45:   17(fvec3) ConstantComposite 44 44 44
              46:   16(float) Constant 1061158912
              47:             TypeInt 32 1
              48:     47(int) Constant 1
              49:             TypeVector 16(float) 4
              50:             TypePointer RayPayloadKHR 49(fvec4)
51(localPayload):     50(ptr) Variable RayPayloadKHR
              52:             TypePointer IncomingRayPayloadKHR 49(fvec4)
53(incomingPayload):     52(ptr) Variable IncomingRayPayloadKHR
         4(main):           2 Function None 3
               5:             Label
           9(v0):      8(ptr) Variable Function
          13(v1):      8(ptr) Variable Function
          19(v2):     18(ptr) Variable Function
          23(v3):     18(ptr) Variable Function
          27(v4):     26(ptr) Variable Function
          31(v5):     26(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
              22:   17(fvec3) Load 21(gl_WorldRayOriginEXT)
                              Store 19(v2) 22
              25:   17(fvec3) Load 24(gl_WorldRayDirectionEXT)
                              Store 23(v3) 25
              30:   16(float) Load 29(gl_RayTminEXT)
                              Store 27(v4) 30
              33:   16(float) Load 32(gl_RayTmaxEXT)
                              Store 31(v5) 33
              37:          34 Load 36(accEXT)
                              TraceRayKHR 37 38 39 40 41 38 43 42 45 46 48
                              Return
                              FunctionEnd
