spv.precisionNonESSamp.frag
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 47

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 9 17 27 39
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 450
                              Name 4  "main"
                              Name 9  "color"
                              Name 13  "s"
                              Name 17  "v2"
                              Name 23  "t"
                              Name 27  "v3"
                              Name 31  "vi1"
                              Name 34  "i1"
                              Name 39  "iv2"
                              Name 42  "vi2"
                              Name 43  "i2"
                              Decorate 9(color) RelaxedPrecision
                              Decorate 9(color) Location 0
                              Decorate 13(s) RelaxedPrecision
                              Decorate 13(s) DescriptorSet 0
                              Decorate 13(s) Binding 0
                              Decorate 14 RelaxedPrecision
                              Decorate 17(v2) RelaxedPrecision
                              Decorate 17(v2) Location 0
                              Decorate 18 RelaxedPrecision
                              Decorate 19 RelaxedPrecision
                              Decorate 23(t) DescriptorSet 0
                              Decorate 23(t) Binding 0
                              Decorate 27(v3) RelaxedPrecision
                              Decorate 27(v3) Location 1
                              Decorate 28 RelaxedPrecision
                              Decorate 31(vi1) RelaxedPrecision
                              Decorate 34(i1) RelaxedPrecision
                              Decorate 34(i1) DescriptorSet 0
                              Decorate 34(i1) Binding 0
                              Decorate 35 RelaxedPrecision
                              Decorate 39(iv2) RelaxedPrecision
                              Decorate 39(iv2) Flat
                              Decorate 39(iv2) Location 3
                              Decorate 40 RelaxedPrecision
                              Decorate 41 RelaxedPrecision
                              Decorate 42(vi2) RelaxedPrecision
                              Decorate 43(i2) DescriptorSet 0
                              Decorate 43(i2) Binding 0
                              Decorate 45 RelaxedPrecision
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypePointer Output 7(fvec4)
        9(color):      8(ptr) Variable Output
              10:             TypeImage 6(float) 2D sampled format:Unknown
              11:             TypeSampledImage 10
              12:             TypePointer UniformConstant 11
           13(s):     12(ptr) Variable UniformConstant
              15:             TypeVector 6(float) 2
              16:             TypePointer Input 15(fvec2)
          17(v2):     16(ptr) Variable Input
              20:             TypeImage 6(float) 3D sampled format:Unknown
              21:             TypeSampledImage 20
              22:             TypePointer UniformConstant 21
           23(t):     22(ptr) Variable UniformConstant
              25:             TypeVector 6(float) 3
              26:             TypePointer Input 25(fvec3)
          27(v3):     26(ptr) Variable Input
              30:             TypePointer Function 7(fvec4)
              32:             TypeImage 6(float) 2D nonsampled format:Rgba32f
              33:             TypePointer UniformConstant 32
          34(i1):     33(ptr) Variable UniformConstant
              36:             TypeInt 32 1
              37:             TypeVector 36(int) 2
              38:             TypePointer Input 37(ivec2)
         39(iv2):     38(ptr) Variable Input
          43(i2):     33(ptr) Variable UniformConstant
         4(main):           2 Function None 3
               5:             Label
         31(vi1):     30(ptr) Variable Function
         42(vi2):     30(ptr) Variable Function
              14:          11 Load 13(s)
              18:   15(fvec2) Load 17(v2)
              19:    7(fvec4) ImageSampleImplicitLod 14 18
                              Store 9(color) 19
              24:          21 Load 23(t)
              28:   25(fvec3) Load 27(v3)
              29:    7(fvec4) ImageSampleImplicitLod 24 28
                              Store 9(color) 29
              35:          32 Load 34(i1)
              40:   37(ivec2) Load 39(iv2)
              41:    7(fvec4) ImageRead 35 40
                              Store 31(vi1) 41
              44:          32 Load 43(i2)
              45:   37(ivec2) Load 39(iv2)
              46:    7(fvec4) ImageRead 44 45
                              Store 42(vi2) 46
                              Return
                              FunctionEnd
