spv.RayGenShaderArray.rgen
// Module Version 10000
// Generated by (magic number): 8000b
// Id's are bound by 89

                              Capability ShaderNonUniformEXT
                              Capability RuntimeDescriptorArrayEXT
                              Capability RayTracingNV
                              Extension  "SPV_EXT_descriptor_indexing"
                              Extension  "SPV_NV_ray_tracing"
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint RayGenerationKHR 4  "main" 11 21
                              Source GLSL 460
                              SourceExtension  "GL_EXT_nonuniform_qualifier"
                              SourceExtension  "GL_NV_ray_tracing"
                              Name 4  "main"
                              Name 8  "lx"
                              Name 11  "gl_LaunchIDNV"
                              Name 16  "ly"
                              Name 20  "sx"
                              Name 21  "gl_LaunchSizeNV"
                              Name 24  "sy"
                              Name 30  "accNV0"
                              Name 34  "block"
                              MemberName 34(block) 0  "dir"
                              MemberName 34(block) 1  "origin"
                              MemberName 34(block) 2  "i"
                              Name 36  ""
                              Name 60  "accNV1"
                              Name 88  "payload"
                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
                              Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                              Decorate 30(accNV0) DescriptorSet 0
                              Decorate 30(accNV0) Binding 0
                              MemberDecorate 34(block) 0 Offset 0
                              MemberDecorate 34(block) 1 Offset 16
                              MemberDecorate 34(block) 2 Offset 28
                              Decorate 34(block) BufferBlock
                              Decorate 60(accNV1) DescriptorSet 0
                              Decorate 60(accNV1) Binding 1
                              Decorate 75 DecorationNonUniformEXT
                              Decorate 76 DecorationNonUniformEXT
                              Decorate 77 DecorationNonUniformEXT
                              Decorate 88(payload) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 0
               7:             TypePointer Function 6(int)
               9:             TypeVector 6(int) 3
              10:             TypePointer Input 9(ivec3)
11(gl_LaunchIDNV):     10(ptr) Variable Input
              12:      6(int) Constant 0
              13:             TypePointer Input 6(int)
              17:      6(int) Constant 1
21(gl_LaunchSizeNV):     10(ptr) Variable Input
              27:             TypeAccelerationStructureKHR
              28:             TypeRuntimeArray 27
              29:             TypePointer UniformConstant 28
      30(accNV0):     29(ptr) Variable UniformConstant
              31:             TypeFloat 32
              32:             TypeVector 31(float) 3
              33:             TypeInt 32 1
       34(block):             TypeStruct 32(fvec3) 32(fvec3) 33(int)
              35:             TypePointer ShaderRecordBufferKHR 34(block)
              36:     35(ptr) Variable ShaderRecordBufferKHR
              37:     33(int) Constant 2
              38:             TypePointer ShaderRecordBufferKHR 33(int)
              41:             TypePointer UniformConstant 27
              48:     33(int) Constant 1
              49:             TypePointer ShaderRecordBufferKHR 32(fvec3)
              52:   31(float) Constant 1056964608
              53:     33(int) Constant 0
              56:   31(float) Constant 1061158912
              57:      6(int) Constant 2
              58:             TypeArray 27 57
              59:             TypePointer UniformConstant 58
      60(accNV1):     59(ptr) Variable UniformConstant
              86:             TypeVector 31(float) 4
              87:             TypePointer RayPayloadKHR 86(fvec4)
     88(payload):     87(ptr) Variable RayPayloadKHR
         4(main):           2 Function None 3
               5:             Label
           8(lx):      7(ptr) Variable Function
          16(ly):      7(ptr) Variable Function
          20(sx):      7(ptr) Variable Function
          24(sy):      7(ptr) Variable Function
              14:     13(ptr) AccessChain 11(gl_LaunchIDNV) 12
              15:      6(int) Load 14
                              Store 8(lx) 15
              18:     13(ptr) AccessChain 11(gl_LaunchIDNV) 17
              19:      6(int) Load 18
                              Store 16(ly) 19
              22:     13(ptr) AccessChain 21(gl_LaunchSizeNV) 12
              23:      6(int) Load 22
                              Store 20(sx) 23
              25:     13(ptr) AccessChain 21(gl_LaunchSizeNV) 17
              26:      6(int) Load 25
                              Store 24(sy) 26
              39:     38(ptr) AccessChain 36 37
              40:     33(int) Load 39
              42:     41(ptr) AccessChain 30(accNV0) 40
              43:          27 Load 42
              44:      6(int) Load 8(lx)
              45:      6(int) Load 16(ly)
              46:      6(int) Load 20(sx)
              47:      6(int) Load 24(sy)
              50:     49(ptr) AccessChain 36 48
              51:   32(fvec3) Load 50
              54:     49(ptr) AccessChain 36 53
              55:   32(fvec3) Load 54
                              TraceNV 43 44 45 46 47 12 51 52 55 56 48
              61:     38(ptr) AccessChain 36 37
              62:     33(int) Load 61
              63:     41(ptr) AccessChain 60(accNV1) 62
              64:          27 Load 63
              65:      6(int) Load 8(lx)
              66:      6(int) Load 16(ly)
              67:      6(int) Load 20(sx)
              68:      6(int) Load 24(sy)
              69:     49(ptr) AccessChain 36 48
              70:   32(fvec3) Load 69
              71:     49(ptr) AccessChain 36 53
              72:   32(fvec3) Load 71
                              TraceNV 64 65 66 67 68 12 70 52 72 56 48
              73:     38(ptr) AccessChain 36 37
              74:     33(int) Load 73
              75:     33(int) CopyObject 74
              76:     41(ptr) AccessChain 30(accNV0) 75
              77:          27 Load 76
              78:      6(int) Load 8(lx)
              79:      6(int) Load 16(ly)
              80:      6(int) Load 20(sx)
              81:      6(int) Load 24(sy)
              82:     49(ptr) AccessChain 36 48
              83:   32(fvec3) Load 82
              84:     49(ptr) AccessChain 36 53
              85:   32(fvec3) Load 84
                              TraceNV 77 78 79 80 81 12 83 52 85 56 48
                              Return
                              FunctionEnd
