spv.register.autoassign-2.frag
// Module Version 10000
// Generated by (magic number): 80006
// Id's are bound by 47

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 44
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "main"
                              Name 8  "PS_OUTPUT"
                              MemberName 8(PS_OUTPUT) 0  "Color"
                              Name 12  "@main(struct-PS_OUTPUT-vf41;"
                              Name 11  "psout"
                              Name 18  "g_tScene[0]"
                              Name 22  "g_tSamp"
                              Name 31  "g_tScene[1]"
                              Name 39  "psout"
                              Name 40  "param"
                              Name 44  "psout.Color"
                              Decorate 18(g_tScene[0]) DescriptorSet 0
                              Decorate 18(g_tScene[0]) Binding 10
                              Decorate 22(g_tSamp) DescriptorSet 0
                              Decorate 22(g_tSamp) Binding 5
                              Decorate 31(g_tScene[1]) DescriptorSet 0
                              Decorate 31(g_tScene[1]) Binding 11
                              Decorate 44(psout.Color) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
    8(PS_OUTPUT):             TypeStruct 7(fvec4)
               9:             TypePointer Function 8(PS_OUTPUT)
              10:             TypeFunction 2 9(ptr)
              14:             TypeInt 32 1
              15:     14(int) Constant 0
              16:             TypeImage 6(float) 2D sampled format:Unknown
              17:             TypePointer UniformConstant 16
 18(g_tScene[0]):     17(ptr) Variable UniformConstant
              20:             TypeSampler
              21:             TypePointer UniformConstant 20
     22(g_tSamp):     21(ptr) Variable UniformConstant
              24:             TypeSampledImage 16
              26:             TypeVector 6(float) 2
              27:    6(float) Constant 1050253722
              28:    6(float) Constant 1053609165
              29:   26(fvec2) ConstantComposite 27 28
 31(g_tScene[1]):     17(ptr) Variable UniformConstant
              37:             TypePointer Function 7(fvec4)
              43:             TypePointer Output 7(fvec4)
 44(psout.Color):     43(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
       39(psout):      9(ptr) Variable Function
       40(param):      9(ptr) Variable Function
              41:           2 FunctionCall 12(@main(struct-PS_OUTPUT-vf41;) 40(param)
              42:8(PS_OUTPUT) Load 40(param)
                              Store 39(psout) 42
              45:     37(ptr) AccessChain 39(psout) 15
              46:    7(fvec4) Load 45
                              Store 44(psout.Color) 46
                              Return
                              FunctionEnd
12(@main(struct-PS_OUTPUT-vf41;):           2 Function None 10
       11(psout):      9(ptr) FunctionParameter
              13:             Label
              19:          16 Load 18(g_tScene[0])
              23:          20 Load 22(g_tSamp)
              25:          24 SampledImage 19 23
              30:    7(fvec4) ImageSampleImplicitLod 25 29
              32:          16 Load 31(g_tScene[1])
              33:          20 Load 22(g_tSamp)
              34:          24 SampledImage 32 33
              35:    7(fvec4) ImageSampleImplicitLod 34 29
              36:    7(fvec4) FAdd 30 35
              38:     37(ptr) AccessChain 11(psout) 15
                              Store 38 36
                              Return
                              FunctionEnd
