hlsl.flattenOpaque.frag
// Module Version 10000
// Generated by (magic number): 80002
// Id's are bound by 144

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 97
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "main"
                              Name 38  "tex"
                              Name 70  "s.s2D"
                              Name 79  "s2.s2D"
                              Name 80  "s2.tex"
                              Name 97  "@entryPointOutput"
                              Decorate 38(tex) DescriptorSet 0
                              Decorate 70(s.s2D) DescriptorSet 0
                              Decorate 79(s2.s2D) DescriptorSet 0
                              Decorate 80(s2.tex) DescriptorSet 0
                              Decorate 97(@entryPointOutput) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeSampler
               8:             TypeFloat 32
               9:             TypeVector 8(float) 4
              14:             TypeVector 8(float) 2
              21:             TypeImage 8(float) 2D sampled format:Unknown
              37:             TypePointer UniformConstant 21
         38(tex):     37(ptr) Variable UniformConstant
              41:             TypeSampledImage 21
              43:    8(float) Constant 1045220557
              44:    8(float) Constant 1050253722
              45:   14(fvec2) ConstantComposite 43 44
              69:             TypePointer UniformConstant 6
       70(s.s2D):     69(ptr) Variable UniformConstant
      79(s2.s2D):     69(ptr) Variable UniformConstant
      80(s2.tex):     37(ptr) Variable UniformConstant
              96:             TypePointer Output 9(fvec4)
97(@entryPointOutput):     96(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
             109:           6 Load 70(s.s2D)
             123:          21 Load 38(tex)
             125:          41 SampledImage 123 109
             126:    9(fvec4) ImageSampleImplicitLod 125 45
             111:           6 Load 70(s.s2D)
             128:          21 Load 38(tex)
             130:          41 SampledImage 128 111
             132:    9(fvec4) ImageSampleImplicitLod 130 45
             113:    9(fvec4) FAdd 126 132
             114:           6 Load 79(s2.s2D)
             115:          21 Load 80(s2.tex)
             136:          41 SampledImage 115 114
             137:    9(fvec4) ImageSampleImplicitLod 136 45
             117:    9(fvec4) FAdd 113 137
             118:           6 Load 79(s2.s2D)
             119:          21 Load 80(s2.tex)
             141:          41 SampledImage 119 118
             143:    9(fvec4) ImageSampleImplicitLod 141 45
             121:    9(fvec4) FAdd 117 143
                              Store 97(@entryPointOutput) 121
                              Return
                              FunctionEnd
