hlsl.swizzle.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:1  Sequence
0:1    move second child to first child ( temp 4-component vector of float)
0:1      'AmbientColor' ( global 4-component vector of float)
0:?       Constant:
0:?         1.000000
0:?         0.500000
0:?         0.000000
0:?         1.000000
0:4  Function Definition: ShaderFunction(vf4; ( temp 4-component vector of float)
0:4    Function Parameters: 
0:4      'input' ( in 4-component vector of float)
0:?     Sequence
0:5      Branch: Return with expression
0:5        component-wise multiply ( temp 4-component vector of float)
0:5          vector swizzle ( temp 4-component vector of float)
0:5            'input' ( in 4-component vector of float)
0:5            Sequence
0:5              Constant:
0:5                3 (const int)
0:5              Constant:
0:5                3 (const int)
0:5              Constant:
0:5                1 (const int)
0:5              Constant:
0:5                0 (const int)
0:5          Construct vec4 ( temp 4-component vector of float)
0:5            direct index ( temp float)
0:5              'AmbientColor' ( global 4-component vector of float)
0:5              Constant:
0:5                2 (const int)
0:?   Linker Objects
0:?     'AmbientColor' ( global 4-component vector of float)


Linked fragment stage:

WARNING: Linking fragment stage: Entry point not found

Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:1  Sequence
0:1    move second child to first child ( temp 4-component vector of float)
0:1      'AmbientColor' ( global 4-component vector of float)
0:?       Constant:
0:?         1.000000
0:?         0.500000
0:?         0.000000
0:?         1.000000
0:4  Function Definition: ShaderFunction(vf4; ( temp 4-component vector of float)
0:4    Function Parameters: 
0:4      'input' ( in 4-component vector of float)
0:?     Sequence
0:5      Branch: Return with expression
0:5        component-wise multiply ( temp 4-component vector of float)
0:5          vector swizzle ( temp 4-component vector of float)
0:5            'input' ( in 4-component vector of float)
0:5            Sequence
0:5              Constant:
0:5                3 (const int)
0:5              Constant:
0:5                3 (const int)
0:5              Constant:
0:5                1 (const int)
0:5              Constant:
0:5                0 (const int)
0:5          Construct vec4 ( temp 4-component vector of float)
0:5            direct index ( temp float)
0:5              'AmbientColor' ( global 4-component vector of float)
0:5              Constant:
0:5                2 (const int)
0:?   Linker Objects
0:?     'AmbientColor' ( global 4-component vector of float)

// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 30

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "PixelShaderFunction"
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "PixelShaderFunction"
                              Name 11  "ShaderFunction(vf4;"
                              Name 10  "input"
                              Name 14  "AmbientColor"
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypePointer Function 7(fvec4)
               9:             TypeFunction 7(fvec4) 8(ptr)
              13:             TypePointer Private 7(fvec4)
14(AmbientColor):     13(ptr) Variable Private
              15:    6(float) Constant 1065353216
              16:    6(float) Constant 1056964608
              17:    6(float) Constant 0
              18:    7(fvec4) ConstantComposite 15 16 17 15
              21:             TypeInt 32 0
              22:     21(int) Constant 2
              23:             TypePointer Private 6(float)
4(PixelShaderFunction):           2 Function None 3
               5:             Label
                              Store 14(AmbientColor) 18
                              Return
                              FunctionEnd
11(ShaderFunction(vf4;):    7(fvec4) Function None 9
       10(input):      8(ptr) FunctionParameter
              12:             Label
              19:    7(fvec4) Load 10(input)
              20:    7(fvec4) VectorShuffle 19 19 3 3 1 0
              24:     23(ptr) AccessChain 14(AmbientColor) 22
              25:    6(float) Load 24
              26:    7(fvec4) CompositeConstruct 25 25 25 25
              27:    7(fvec4) FMul 20 26
                              ReturnValue 27
                              FunctionEnd
