spv.1.4.texture.frag
// Module Version 10400
// Generated by (magic number): 8000a
// Id's are bound by 79

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 15 19 28 40 51 54 76 78
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 450
                              Name 4  "main"
                              Name 9  "color"
                              Name 15  "texSampler2D"
                              Name 19  "coords2D"
                              Name 28  "itexSampler2D"
                              Name 40  "utexSampler2D"
                              Name 51  "iCoords2D"
                              Name 54  "iLod"
                              Name 76  "t"
                              Name 78  "color"
                              Decorate 15(texSampler2D) DescriptorSet 0
                              Decorate 15(texSampler2D) Binding 0
                              Decorate 19(coords2D) Location 1
                              Decorate 28(itexSampler2D) DescriptorSet 0
                              Decorate 28(itexSampler2D) Binding 1
                              Decorate 40(utexSampler2D) DescriptorSet 0
                              Decorate 40(utexSampler2D) Binding 2
                              Decorate 51(iCoords2D) Flat
                              Decorate 51(iCoords2D) Location 2
                              Decorate 54(iLod) Flat
                              Decorate 54(iLod) Location 3
                              Decorate 76(t) Location 0
                              Decorate 78(color) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypePointer Function 7(fvec4)
              10:    6(float) Constant 0
              11:    7(fvec4) ConstantComposite 10 10 10 10
              12:             TypeImage 6(float) 2D sampled format:Unknown
              13:             TypeSampledImage 12
              14:             TypePointer UniformConstant 13
15(texSampler2D):     14(ptr) Variable UniformConstant
              17:             TypeVector 6(float) 2
              18:             TypePointer Input 17(fvec2)
    19(coords2D):     18(ptr) Variable Input
              24:             TypeInt 32 1
              25:             TypeImage 24(int) 2D sampled format:Unknown
              26:             TypeSampledImage 25
              27:             TypePointer UniformConstant 26
28(itexSampler2D):     27(ptr) Variable UniformConstant
              31:             TypeVector 24(int) 4
              36:             TypeInt 32 0
              37:             TypeImage 36(int) 2D sampled format:Unknown
              38:             TypeSampledImage 37
              39:             TypePointer UniformConstant 38
40(utexSampler2D):     39(ptr) Variable UniformConstant
              43:             TypeVector 36(int) 4
              49:             TypeVector 24(int) 2
              50:             TypePointer Input 49(ivec2)
   51(iCoords2D):     50(ptr) Variable Input
              53:             TypePointer Input 24(int)
        54(iLod):     53(ptr) Variable Input
           76(t):     18(ptr) Variable Input
              77:             TypePointer Output 7(fvec4)
       78(color):     77(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
        9(color):      8(ptr) Variable Function
                              Store 9(color) 11
              16:          13 Load 15(texSampler2D)
              20:   17(fvec2) Load 19(coords2D)
              21:    7(fvec4) ImageSampleImplicitLod 16 20
              22:    7(fvec4) Load 9(color)
              23:    7(fvec4) FAdd 22 21
                              Store 9(color) 23
              29:          26 Load 28(itexSampler2D)
              30:   17(fvec2) Load 19(coords2D)
              32:   31(ivec4) ImageSampleImplicitLod 29 30 SignExtend 
              33:    7(fvec4) ConvertSToF 32
              34:    7(fvec4) Load 9(color)
              35:    7(fvec4) FAdd 34 33
                              Store 9(color) 35
              41:          38 Load 40(utexSampler2D)
              42:   17(fvec2) Load 19(coords2D)
              44:   43(ivec4) ImageSampleImplicitLod 41 42 ZeroExtend 
              45:    7(fvec4) ConvertUToF 44
              46:    7(fvec4) Load 9(color)
              47:    7(fvec4) FAdd 46 45
                              Store 9(color) 47
              48:          13 Load 15(texSampler2D)
              52:   49(ivec2) Load 51(iCoords2D)
              55:     24(int) Load 54(iLod)
              56:          12 Image 48
              57:    7(fvec4) ImageFetch 56 52 Lod 55
              58:    7(fvec4) Load 9(color)
              59:    7(fvec4) FAdd 58 57
                              Store 9(color) 59
              60:          26 Load 28(itexSampler2D)
              61:   49(ivec2) Load 51(iCoords2D)
              62:     24(int) Load 54(iLod)
              63:          25 Image 60
              64:   31(ivec4) ImageFetch 63 61 Lod SignExtend 62
              65:    7(fvec4) ConvertSToF 64
              66:    7(fvec4) Load 9(color)
              67:    7(fvec4) FAdd 66 65
                              Store 9(color) 67
              68:          38 Load 40(utexSampler2D)
              69:   49(ivec2) Load 51(iCoords2D)
              70:     24(int) Load 54(iLod)
              71:          37 Image 68
              72:   43(ivec4) ImageFetch 71 69 Lod ZeroExtend 70
              73:    7(fvec4) ConvertUToF 72
              74:    7(fvec4) Load 9(color)
              75:    7(fvec4) FAdd 74 73
                              Store 9(color) 75
                              Return
                              FunctionEnd
