hlsl.synthesizeInput.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7  Function Definition: @main(struct-PSInput-f1-u11; ( temp 4-component vector of float)
0:7    Function Parameters: 
0:7      'input' ( in structure{ temp float interp,  temp uint no_interp})
0:?     Sequence
0:8      Branch: Return with expression
0:8        Construct vec4 ( temp 4-component vector of float)
0:8          Convert uint to float ( temp float)
0:8            no_interp: direct index for structure ( temp uint)
0:8              'input' ( in structure{ temp float interp,  temp uint no_interp})
0:8              Constant:
0:8                1 (const int)
0:8          interp: direct index for structure ( temp float)
0:8            'input' ( in structure{ temp float interp,  temp uint no_interp})
0:8            Constant:
0:8              0 (const int)
0:8          Constant:
0:8            0.000000
0:8          Constant:
0:8            1.000000
0:7  Function Definition: main( ( temp void)
0:7    Function Parameters: 
0:?     Sequence
0:7      Sequence
0:7        move second child to first child ( temp float)
0:7          interp: direct index for structure ( temp float)
0:?             'input' ( temp structure{ temp float interp,  temp uint no_interp})
0:7            Constant:
0:7              0 (const int)
0:?           'input.interp' (layout( location=0) in float)
0:7        move second child to first child ( temp uint)
0:7          no_interp: direct index for structure ( temp uint)
0:?             'input' ( temp structure{ temp float interp,  temp uint no_interp})
0:7            Constant:
0:7              1 (const int)
0:?           'input.no_interp' (layout( location=1) flat in uint)
0:7      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:7        Function Call: @main(struct-PSInput-f1-u11; ( temp 4-component vector of float)
0:?           'input' ( temp structure{ temp float interp,  temp uint no_interp})
0:?   Linker Objects
0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:?     'input.interp' (layout( location=0) in float)
0:?     'input.no_interp' (layout( location=1) flat in uint)


Linked fragment stage:


Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7  Function Definition: @main(struct-PSInput-f1-u11; ( temp 4-component vector of float)
0:7    Function Parameters: 
0:7      'input' ( in structure{ temp float interp,  temp uint no_interp})
0:?     Sequence
0:8      Branch: Return with expression
0:8        Construct vec4 ( temp 4-component vector of float)
0:8          Convert uint to float ( temp float)
0:8            no_interp: direct index for structure ( temp uint)
0:8              'input' ( in structure{ temp float interp,  temp uint no_interp})
0:8              Constant:
0:8                1 (const int)
0:8          interp: direct index for structure ( temp float)
0:8            'input' ( in structure{ temp float interp,  temp uint no_interp})
0:8            Constant:
0:8              0 (const int)
0:8          Constant:
0:8            0.000000
0:8          Constant:
0:8            1.000000
0:7  Function Definition: main( ( temp void)
0:7    Function Parameters: 
0:?     Sequence
0:7      Sequence
0:7        move second child to first child ( temp float)
0:7          interp: direct index for structure ( temp float)
0:?             'input' ( temp structure{ temp float interp,  temp uint no_interp})
0:7            Constant:
0:7              0 (const int)
0:?           'input.interp' (layout( location=0) in float)
0:7        move second child to first child ( temp uint)
0:7          no_interp: direct index for structure ( temp uint)
0:?             'input' ( temp structure{ temp float interp,  temp uint no_interp})
0:7            Constant:
0:7              1 (const int)
0:?           'input.no_interp' (layout( location=1) flat in uint)
0:7      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:7        Function Call: @main(struct-PSInput-f1-u11; ( temp 4-component vector of float)
0:?           'input' ( temp structure{ temp float interp,  temp uint no_interp})
0:?   Linker Objects
0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:?     'input.interp' (layout( location=0) in float)
0:?     'input.no_interp' (layout( location=1) flat in uint)

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

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 32 36 40
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "main"
                              Name 8  "PSInput"
                              MemberName 8(PSInput) 0  "interp"
                              MemberName 8(PSInput) 1  "no_interp"
                              Name 13  "@main(struct-PSInput-f1-u11;"
                              Name 12  "input"
                              Name 30  "input"
                              Name 32  "input.interp"
                              Name 36  "input.no_interp"
                              Name 40  "@entryPointOutput"
                              Name 41  "param"
                              Decorate 32(input.interp) Location 0
                              Decorate 36(input.no_interp) Flat
                              Decorate 36(input.no_interp) Location 1
                              Decorate 40(@entryPointOutput) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeInt 32 0
      8(PSInput):             TypeStruct 6(float) 7(int)
               9:             TypePointer Function 8(PSInput)
              10:             TypeVector 6(float) 4
              11:             TypeFunction 10(fvec4) 9(ptr)
              15:             TypeInt 32 1
              16:     15(int) Constant 1
              17:             TypePointer Function 7(int)
              21:     15(int) Constant 0
              22:             TypePointer Function 6(float)
              25:    6(float) Constant 0
              26:    6(float) Constant 1065353216
              31:             TypePointer Input 6(float)
32(input.interp):     31(ptr) Variable Input
              35:             TypePointer Input 7(int)
36(input.no_interp):     35(ptr) Variable Input
              39:             TypePointer Output 10(fvec4)
40(@entryPointOutput):     39(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
       30(input):      9(ptr) Variable Function
       41(param):      9(ptr) Variable Function
              33:    6(float) Load 32(input.interp)
              34:     22(ptr) AccessChain 30(input) 21
                              Store 34 33
              37:      7(int) Load 36(input.no_interp)
              38:     17(ptr) AccessChain 30(input) 16
                              Store 38 37
              42:  8(PSInput) Load 30(input)
                              Store 41(param) 42
              43:   10(fvec4) FunctionCall 13(@main(struct-PSInput-f1-u11;) 41(param)
                              Store 40(@entryPointOutput) 43
                              Return
                              FunctionEnd
13(@main(struct-PSInput-f1-u11;):   10(fvec4) Function None 11
       12(input):      9(ptr) FunctionParameter
              14:             Label
              18:     17(ptr) AccessChain 12(input) 16
              19:      7(int) Load 18
              20:    6(float) ConvertUToF 19
              23:     22(ptr) AccessChain 12(input) 21
              24:    6(float) Load 23
              27:   10(fvec4) CompositeConstruct 20 24 25 26
                              ReturnValue 27
                              FunctionEnd
