hlsl.max.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2  Function Definition: @PixelShaderFunction(vf4;vf4; ( temp 4-component vector of float)
0:2    Function Parameters: 
0:2      'input1' ( in 4-component vector of float)
0:2      'input2' ( in 4-component vector of float)
0:?     Sequence
0:3      Branch: Return with expression
0:3        max ( temp 4-component vector of float)
0:3          'input1' ( in 4-component vector of float)
0:3          'input2' ( in 4-component vector of float)
0:2  Function Definition: PixelShaderFunction( ( temp void)
0:2    Function Parameters: 
0:?     Sequence
0:2      move second child to first child ( temp 4-component vector of float)
0:?         'input1' ( temp 4-component vector of float)
0:?         'input1' (layout( location=0) in 4-component vector of float)
0:2      move second child to first child ( temp 4-component vector of float)
0:?         'input2' ( temp 4-component vector of float)
0:?         'input2' (layout( location=1) in 4-component vector of float)
0:2      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:2        Function Call: @PixelShaderFunction(vf4;vf4; ( temp 4-component vector of float)
0:?           'input1' ( temp 4-component vector of float)
0:?           'input2' ( temp 4-component vector of float)
0:?   Linker Objects
0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:?     'input1' (layout( location=0) in 4-component vector of float)
0:?     'input2' (layout( location=1) in 4-component vector of float)


Linked fragment stage:


Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2  Function Definition: @PixelShaderFunction(vf4;vf4; ( temp 4-component vector of float)
0:2    Function Parameters: 
0:2      'input1' ( in 4-component vector of float)
0:2      'input2' ( in 4-component vector of float)
0:?     Sequence
0:3      Branch: Return with expression
0:3        max ( temp 4-component vector of float)
0:3          'input1' ( in 4-component vector of float)
0:3          'input2' ( in 4-component vector of float)
0:2  Function Definition: PixelShaderFunction( ( temp void)
0:2    Function Parameters: 
0:?     Sequence
0:2      move second child to first child ( temp 4-component vector of float)
0:?         'input1' ( temp 4-component vector of float)
0:?         'input1' (layout( location=0) in 4-component vector of float)
0:2      move second child to first child ( temp 4-component vector of float)
0:?         'input2' ( temp 4-component vector of float)
0:?         'input2' (layout( location=1) in 4-component vector of float)
0:2      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:2        Function Call: @PixelShaderFunction(vf4;vf4; ( temp 4-component vector of float)
0:?           'input1' ( temp 4-component vector of float)
0:?           'input2' ( temp 4-component vector of float)
0:?   Linker Objects
0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:?     'input1' (layout( location=0) in 4-component vector of float)
0:?     'input2' (layout( location=1) in 4-component vector of float)

// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 33

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "PixelShaderFunction" 21 24 27
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "PixelShaderFunction"
                              Name 12  "@PixelShaderFunction(vf4;vf4;"
                              Name 10  "input1"
                              Name 11  "input2"
                              Name 19  "input1"
                              Name 21  "input1"
                              Name 23  "input2"
                              Name 24  "input2"
                              Name 27  "@entryPointOutput"
                              Name 28  "param"
                              Name 30  "param"
                              Decorate 21(input1) Location 0
                              Decorate 24(input2) Location 1
                              Decorate 27(@entryPointOutput) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypePointer Function 7(fvec4)
               9:             TypeFunction 7(fvec4) 8(ptr) 8(ptr)
              20:             TypePointer Input 7(fvec4)
      21(input1):     20(ptr) Variable Input
      24(input2):     20(ptr) Variable Input
              26:             TypePointer Output 7(fvec4)
27(@entryPointOutput):     26(ptr) Variable Output
4(PixelShaderFunction):           2 Function None 3
               5:             Label
      19(input1):      8(ptr) Variable Function
      23(input2):      8(ptr) Variable Function
       28(param):      8(ptr) Variable Function
       30(param):      8(ptr) Variable Function
              22:    7(fvec4) Load 21(input1)
                              Store 19(input1) 22
              25:    7(fvec4) Load 24(input2)
                              Store 23(input2) 25
              29:    7(fvec4) Load 19(input1)
                              Store 28(param) 29
              31:    7(fvec4) Load 23(input2)
                              Store 30(param) 31
              32:    7(fvec4) FunctionCall 12(@PixelShaderFunction(vf4;vf4;) 28(param) 30(param)
                              Store 27(@entryPointOutput) 32
                              Return
                              FunctionEnd
12(@PixelShaderFunction(vf4;vf4;):    7(fvec4) Function None 9
      10(input1):      8(ptr) FunctionParameter
      11(input2):      8(ptr) FunctionParameter
              13:             Label
              14:    7(fvec4) Load 10(input1)
              15:    7(fvec4) Load 11(input2)
              16:    7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 14 15
                              ReturnValue 16
                              FunctionEnd
