hlsl.flattenSubset.frag
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 66

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 47 50
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "main"
                              Name 21  "samp"
                              Name 33  "tex"
                              Name 47  "vpos"
                              Name 50  "@entryPointOutput"
                              Decorate 21(samp) DescriptorSet 0
                              Decorate 21(samp) Binding 0
                              Decorate 33(tex) DescriptorSet 0
                              Decorate 33(tex) Binding 0
                              Decorate 47(vpos) Location 0
                              Decorate 50(@entryPointOutput) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
              13:             TypeSampler
              20:             TypePointer UniformConstant 13
        21(samp):     20(ptr) Variable UniformConstant
              31:             TypeImage 6(float) 2D sampled format:Unknown
              32:             TypePointer UniformConstant 31
         33(tex):     32(ptr) Variable UniformConstant
              37:             TypeSampledImage 31
              39:             TypeVector 6(float) 2
              40:    6(float) Constant 1056964608
              41:   39(fvec2) ConstantComposite 40 40
              46:             TypePointer Input 7(fvec4)
        47(vpos):     46(ptr) Variable Input
              49:             TypePointer Output 7(fvec4)
50(@entryPointOutput):     49(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
              57:          13 Load 21(samp)
              61:          31 Load 33(tex)
              64:          37 SampledImage 61 57
              65:    7(fvec4) ImageSampleImplicitLod 64 41
                              Store 50(@entryPointOutput) 65
                              Return
                              FunctionEnd
