hlsl.pp.line2.frag
// Module Version 10000
// Generated by (magic number): 8000b
// 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 1
                              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
                              Line 17 23 1
       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
                              Line 17 23 1
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
