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

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 62
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "main"
                              Name 47  "gss"
                              Name 51  "gtex"
                              Name 62  "@entryPointOutput"
                              Decorate 47(gss) DescriptorSet 0
                              Decorate 47(gss) Binding 0
                              Decorate 51(gtex) DescriptorSet 0
                              Decorate 51(gtex) Binding 2
                              Decorate 62(@entryPointOutput) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeSampler
               7:             TypeFloat 32
               8:             TypeImage 7(float) 2D sampled format:Unknown
              11:             TypeVector 7(float) 4
              32:             TypeSampledImage 8
              34:             TypeVector 7(float) 2
              35:    7(float) Constant 1045220557
              36:    7(float) Constant 1050253722
              37:   34(fvec2) ConstantComposite 35 36
              43:             TypePointer UniformConstant 6
         47(gss):     43(ptr) Variable UniformConstant
              50:             TypePointer UniformConstant 8
        51(gtex):     50(ptr) Variable UniformConstant
              54:    7(float) Constant 1077936128
              61:             TypePointer Output 11(fvec4)
62(@entryPointOutput):     61(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
              71:           6 Load 47(gss)
              73:           8 Load 51(gtex)
              86:          32 SampledImage 73 71
              87:   11(fvec4) ImageSampleImplicitLod 86 37
              88:   11(fvec4) VectorTimesScalar 87 54
                              Store 62(@entryPointOutput) 88
                              Return
                              FunctionEnd
