hlsl.autosampledtextures.frag
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 45

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "MainPs" 36 40
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "MainPs"
                              Name 8  "PS_INPUT"
                              MemberName 8(PS_INPUT) 0  "vTextureCoords"
                              Name 11  "PS_OUTPUT"
                              MemberName 11(PS_OUTPUT) 0  "vColor"
                              Name 14  "@MainPs(struct-PS_INPUT-vf21;"
                              Name 13  "i"
                              Name 17  "ps_output"
                              Name 23  "g_tColor"
                              Name 34  "i"
                              Name 36  "i.vTextureCoords"
                              Name 40  "@entryPointOutput.vColor"
                              Name 41  "param"
                              Decorate 23(g_tColor) DescriptorSet 0
                              Decorate 23(g_tColor) Binding 0
                              Decorate 36(i.vTextureCoords) Location 0
                              Decorate 40(@entryPointOutput.vColor) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 2
     8(PS_INPUT):             TypeStruct 7(fvec2)
               9:             TypePointer Function 8(PS_INPUT)
              10:             TypeVector 6(float) 4
   11(PS_OUTPUT):             TypeStruct 10(fvec4)
              12:             TypeFunction 11(PS_OUTPUT) 9(ptr)
              16:             TypePointer Function 11(PS_OUTPUT)
              18:             TypeInt 32 1
              19:     18(int) Constant 0
              20:             TypeImage 6(float) 2D sampled format:Unknown
              21:             TypeSampledImage 20
              22:             TypePointer UniformConstant 21
    23(g_tColor):     22(ptr) Variable UniformConstant
              25:             TypePointer Function 7(fvec2)
              29:             TypePointer Function 10(fvec4)
              35:             TypePointer Input 7(fvec2)
36(i.vTextureCoords):     35(ptr) Variable Input
              39:             TypePointer Output 10(fvec4)
40(@entryPointOutput.vColor):     39(ptr) Variable Output
       4(MainPs):           2 Function None 3
               5:             Label
           34(i):      9(ptr) Variable Function
       41(param):      9(ptr) Variable Function
              37:    7(fvec2) Load 36(i.vTextureCoords)
              38:     25(ptr) AccessChain 34(i) 19
                              Store 38 37
              42: 8(PS_INPUT) Load 34(i)
                              Store 41(param) 42
              43:11(PS_OUTPUT) FunctionCall 14(@MainPs(struct-PS_INPUT-vf21;) 41(param)
              44:   10(fvec4) CompositeExtract 43 0
                              Store 40(@entryPointOutput.vColor) 44
                              Return
                              FunctionEnd
14(@MainPs(struct-PS_INPUT-vf21;):11(PS_OUTPUT) Function None 12
           13(i):      9(ptr) FunctionParameter
              15:             Label
   17(ps_output):     16(ptr) Variable Function
              24:          21 Load 23(g_tColor)
              26:     25(ptr) AccessChain 13(i) 19
              27:    7(fvec2) Load 26
              28:   10(fvec4) ImageSampleImplicitLod 24 27
              30:     29(ptr) AccessChain 17(ps_output) 19
                              Store 30 28
              31:11(PS_OUTPUT) Load 17(ps_output)
                              ReturnValue 31
                              FunctionEnd
