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

                              Capability Shader
               2:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 5  "MainPs" 71 75
                              ExecutionMode 5 OriginUpperLeft
               1:             String  "hlsl.pp.line2.frag"
              17:             String  "foo.frag"
              32:             String  "foo.h"
              42:             String  "foo2.h"
                              Source HLSL 500 1  "// OpModuleProcessed auto-map-locations
// OpModuleProcessed auto-map-bindings
// OpModuleProcessed entry-point MainPs
// OpModuleProcessed client vulkan100
// OpModuleProcessed target-env vulkan1.0
// OpModuleProcessed keep-uncalled
// OpModuleProcessed hlsl-offsets
#line 1
#line 1 "foo.frag"
Texture2D g_tColor[ 128 ] ;

layout (push_constant) cbuffer PerViewConstantBuffer_t
{
    uint g_nDataIdx;
    uint g_nDataIdx2;
    bool g_B;
} ;

SamplerState g_sAniso;

struct PS_INPUT
{
    float2 vTextureCoords : TEXCOORD2 ;
} ;

struct PS_OUTPUT
{
    float4 vColor : SV_Target0 ;
} ;

PS_OUTPUT MainPs ( PS_INPUT i )
{
    PS_OUTPUT ps_output ;

    uint u;
#line 47
    if (g_B)
#line 3 "foo.h"
        u = g_nDataIdx;
    else
#line 67
        u = g_nDataIdx2;
#line 7 "foo2.h"
    ps_output . vColor = g_tColor [ u ] . Sample ( g_sAniso , i . vTextureCoords . xy );
#line 105
    return ps_output ;
}

"
                              Name 5  "MainPs"
                              Name 9  "PS_INPUT"
                              MemberName 9(PS_INPUT) 0  "vTextureCoords"
                              Name 12  "PS_OUTPUT"
                              MemberName 12(PS_OUTPUT) 0  "vColor"
                              Name 15  "@MainPs(struct-PS_INPUT-vf21;"
                              Name 14  "i"
                              Name 19  "PerViewConstantBuffer_t"
                              MemberName 19(PerViewConstantBuffer_t) 0  "g_nDataIdx"
                              MemberName 19(PerViewConstantBuffer_t) 1  "g_nDataIdx2"
                              MemberName 19(PerViewConstantBuffer_t) 2  "g_B"
                              Name 21  ""
                              Name 34  "u"
                              Name 44  "ps_output"
                              Name 49  "g_tColor"
                              Name 56  "g_sAniso"
                              Name 69  "i"
                              Name 71  "i.vTextureCoords"
                              Name 75  "@entryPointOutput.vColor"
                              Name 76  "param"
                              MemberDecorate 19(PerViewConstantBuffer_t) 0 Offset 0
                              MemberDecorate 19(PerViewConstantBuffer_t) 1 Offset 4
                              MemberDecorate 19(PerViewConstantBuffer_t) 2 Offset 8
                              Decorate 19(PerViewConstantBuffer_t) Block
                              Decorate 49(g_tColor) DescriptorSet 0
                              Decorate 49(g_tColor) Binding 0
                              Decorate 56(g_sAniso) DescriptorSet 0
                              Decorate 56(g_sAniso) Binding 0
                              Decorate 71(i.vTextureCoords) Location 0
                              Decorate 75(@entryPointOutput.vColor) Location 0
               3:             TypeVoid
               4:             TypeFunction 3
               7:             TypeFloat 32
               8:             TypeVector 7(float) 2
     9(PS_INPUT):             TypeStruct 8(fvec2)
              10:             TypePointer Function 9(PS_INPUT)
              11:             TypeVector 7(float) 4
   12(PS_OUTPUT):             TypeStruct 11(fvec4)
              13:             TypeFunction 12(PS_OUTPUT) 10(ptr)
              18:             TypeInt 32 0
19(PerViewConstantBuffer_t):             TypeStruct 18(int) 18(int) 18(int)
              20:             TypePointer PushConstant 19(PerViewConstantBuffer_t)
              21:     20(ptr) Variable PushConstant
              22:             TypeInt 32 1
              23:     22(int) Constant 2
              24:             TypePointer PushConstant 18(int)
              27:             TypeBool
              28:     18(int) Constant 0
              33:             TypePointer Function 18(int)
              35:     22(int) Constant 0
              39:     22(int) Constant 1
              43:             TypePointer Function 12(PS_OUTPUT)
              45:             TypeImage 7(float) 2D sampled format:Unknown
              46:     18(int) Constant 128
              47:             TypeArray 45 46
              48:             TypePointer UniformConstant 47
    49(g_tColor):     48(ptr) Variable UniformConstant
              51:             TypePointer UniformConstant 45
              54:             TypeSampler
              55:             TypePointer UniformConstant 54
    56(g_sAniso):     55(ptr) Variable UniformConstant
              58:             TypeSampledImage 45
              60:             TypePointer Function 8(fvec2)
              64:             TypePointer Function 11(fvec4)
              70:             TypePointer Input 8(fvec2)
71(i.vTextureCoords):     70(ptr) Variable Input
              74:             TypePointer Output 11(fvec4)
75(@entryPointOutput.vColor):     74(ptr) Variable Output
       5(MainPs):           3 Function None 4
               6:             Label
           69(i):     10(ptr) Variable Function
       76(param):     10(ptr) Variable Function
                              Line 17 23 0
              72:    8(fvec2) Load 71(i.vTextureCoords)
              73:     60(ptr) AccessChain 69(i) 35
                              Store 73 72
              77: 9(PS_INPUT) Load 69(i)
                              Store 76(param) 77
              78:12(PS_OUTPUT) FunctionCall 15(@MainPs(struct-PS_INPUT-vf21;) 76(param)
              79:   11(fvec4) CompositeExtract 78 0
                              Store 75(@entryPointOutput.vColor) 79
                              Return
                              FunctionEnd
15(@MainPs(struct-PS_INPUT-vf21;):12(PS_OUTPUT) Function None 13
           14(i):     10(ptr) FunctionParameter
              16:             Label
           34(u):     33(ptr) Variable Function
   44(ps_output):     43(ptr) Variable Function
                              Line 17 47 0
              25:     24(ptr) AccessChain 21 23
              26:     18(int) Load 25
              29:    27(bool) INotEqual 26 28
                              SelectionMerge 31 None
                              BranchConditional 29 30 38
              30:               Label
                                Line 32 3 0
              36:     24(ptr)   AccessChain 21 35
              37:     18(int)   Load 36
                                Store 34(u) 37
                                Branch 31
              38:               Label
                                Line 32 67 0
              40:     24(ptr)   AccessChain 21 39
              41:     18(int)   Load 40
                                Store 34(u) 41
                                Branch 31
              31:             Label
                              Line 42 7 0
              50:     18(int) Load 34(u)
              52:     51(ptr) AccessChain 49(g_tColor) 50
              53:          45 Load 52
              57:          54 Load 56(g_sAniso)
              59:          58 SampledImage 53 57
              61:     60(ptr) AccessChain 14(i) 35
              62:    8(fvec2) Load 61
              63:   11(fvec4) ImageSampleImplicitLod 59 62
              65:     64(ptr) AccessChain 44(ps_output) 35
                              Store 65 63
                              Line 42 105 0
              66:12(PS_OUTPUT) Load 44(ps_output)
                              ReturnValue 66
                              FunctionEnd
