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

                              Capability Shader
               2:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 5  "MainPs" 70 74
                              ExecutionMode 5 OriginUpperLeft
               1:             String  "hlsl.pp.line4.frag"
              17:             String  "C:\\Users\\Greg\\shaders\\line\\foo4.frag"
              32:             String  "C:\\Users\\Greg\\shaders\\line\\u1.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 "C:\\Users\\Greg\\shaders\\line\\foo4.frag"
Texture2D g_tColor [ 128 ] ;

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

#line 12
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 ;
    if ( g_B )


#line 1 "C:\\Users\\Greg\\shaders\\line\\u1.h"
    u = g_nDataIdx ;


#line 31 "C:\\Users\\Greg\\shaders\\line\\foo4.frag"
    else
    u = g_nDataIdx2 ;
    ps_output . vColor = g_tColor [ u ] . Sample ( g_sAniso , i . vTextureCoords . xy ) ;
    return ps_output ;
}

"
                              Name 5  "MainPs"
                              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 48  "g_tColor"
                              Name 55  "g_sAniso"
                              Name 70  "i.vTextureCoords"
                              Name 74  "@entryPointOutput.vColor"
                              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 48(g_tColor) DescriptorSet 0
                              Decorate 48(g_tColor) Binding 0
                              Decorate 55(g_sAniso) DescriptorSet 0
                              Decorate 55(g_sAniso) Binding 1
                              Decorate 70(i.vTextureCoords) Location 0
                              Decorate 74(@entryPointOutput.vColor) Location 0
               3:             TypeVoid
               4:             TypeFunction 3
               7:             TypeFloat 32
               8:             TypeVector 7(float) 2
              11:             TypeVector 7(float) 4
              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
              35:     22(int) Constant 0
              39:     22(int) Constant 1
              44:             TypeImage 7(float) 2D sampled format:Unknown
              45:     18(int) Constant 128
              46:             TypeArray 44 45
              47:             TypePointer UniformConstant 46
    48(g_tColor):     47(ptr) Variable UniformConstant
              50:             TypePointer UniformConstant 44
              53:             TypeSampler
              54:             TypePointer UniformConstant 53
    55(g_sAniso):     54(ptr) Variable UniformConstant
              57:             TypeSampledImage 44
              69:             TypePointer Input 8(fvec2)
70(i.vTextureCoords):     69(ptr) Variable Input
              73:             TypePointer Output 11(fvec4)
74(@entryPointOutput.vColor):     73(ptr) Variable Output
       5(MainPs):           3 Function None 4
               6:             Label
                              Line 17 25 0
              71:    8(fvec2) Load 70(i.vTextureCoords)
                              Line 17 29 0
              83:     24(ptr) AccessChain 21 23
              84:     18(int) Load 83
              85:    27(bool) INotEqual 84 28
                              SelectionMerge 92 None
                              BranchConditional 85 86 89
              86:               Label
                                Line 32 1 0
              87:     24(ptr)   AccessChain 21 35
              88:     18(int)   Load 87
                                Branch 92
              89:               Label
                                Line 17 32 0
              90:     24(ptr)   AccessChain 21 39
              91:     18(int)   Load 90
                                Branch 92
              92:             Label
             115:     18(int) Phi 88 86 91 89
                              Line 17 33 0
              94:     50(ptr) AccessChain 48(g_tColor) 115
              95:          44 Load 94
              96:          53 Load 55(g_sAniso)
              97:          57 SampledImage 95 96
             100:   11(fvec4) ImageSampleImplicitLod 97 71
                              Line 17 25 0
                              Store 74(@entryPointOutput.vColor) 100
                              Return
                              FunctionEnd
