spv.specTexture.frag
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 23

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 9
                              ExecutionMode 4 OriginLowerLeft
                              Source GLSL 450
                              Name 4  "main"
                              Name 9  "color_out"
                              Name 13  "tex"
                              Name 19  "offs"
                              Decorate 9(color_out) Location 0
                              Decorate 13(tex) Location 0
                              Decorate 13(tex) DescriptorSet 0
                              Decorate 13(tex) Binding 0
                              Decorate 19(offs) SpecId 1
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypePointer Output 7(fvec4)
    9(color_out):      8(ptr) Variable Output
              10:             TypeImage 6(float) 2D sampled format:Unknown
              11:             TypeSampledImage 10
              12:             TypePointer UniformConstant 11
         13(tex):     12(ptr) Variable UniformConstant
              15:             TypeVector 6(float) 2
              16:    6(float) Constant 0
              17:   15(fvec2) ConstantComposite 16 16
              18:             TypeInt 32 1
        19(offs):     18(int) SpecConstant 0
              20:             TypeVector 18(int) 2
              21:   20(ivec2) SpecConstantComposite 19(offs) 19(offs)
         4(main):           2 Function None 3
               5:             Label
              14:          11 Load 13(tex)
              22:    7(fvec4) ImageSampleExplicitLod 14 17 Lod ConstOffset 16 21
                              Store 9(color_out) 22
                              Return
                              FunctionEnd
