hlsl.namespace.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5  Function Definition: N1::getVec( ( temp 4-component vector of float)
0:5    Function Parameters: 
0:?     Sequence
0:5      Branch: Return with expression
0:5        'v1' ( global 4-component vector of float)
0:10  Function Definition: N2::getVec( ( temp 4-component vector of float)
0:10    Function Parameters: 
0:?     Sequence
0:10      Branch: Return with expression
0:10        'v2' ( global 4-component vector of float)
0:12  Function Definition: N2::N3::getVec( ( temp 4-component vector of float)
0:12    Function Parameters: 
0:?     Sequence
0:12      Branch: Return with expression
0:12        'v2' ( global 4-component vector of float)
0:15  Function Definition: N2::N3::C1::getVec( ( global 4-component vector of float)
0:15    Function Parameters: 
0:?     Sequence
0:15      Branch: Return with expression
0:15        'v2' ( global 4-component vector of float)
0:21  Function Definition: @main( ( temp 4-component vector of float)
0:21    Function Parameters: 
0:?     Sequence
0:22      Branch: Return with expression
0:22        add ( temp 4-component vector of float)
0:22          add ( temp 4-component vector of float)
0:22            add ( temp 4-component vector of float)
0:22              Function Call: N1::getVec( ( temp 4-component vector of float)
0:22              Function Call: N2::getVec( ( temp 4-component vector of float)
0:22            Function Call: N2::N3::getVec( ( temp 4-component vector of float)
0:22          vector-scale ( temp 4-component vector of float)
0:22            Function Call: N2::N3::C1::getVec( ( global 4-component vector of float)
0:22            'N2::gf' ( global float)
0:21  Function Definition: main( ( temp void)
0:21    Function Parameters: 
0:?     Sequence
0:21      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:21        Function Call: @main( ( temp 4-component vector of float)
0:?   Linker Objects
0:?     'v1' ( global 4-component vector of float)
0:?     'v2' ( global 4-component vector of float)
0:?     'N2::gf' ( global float)
0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)


Linked fragment stage:


Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:5  Function Definition: N1::getVec( ( temp 4-component vector of float)
0:5    Function Parameters: 
0:?     Sequence
0:5      Branch: Return with expression
0:5        'v1' ( global 4-component vector of float)
0:10  Function Definition: N2::getVec( ( temp 4-component vector of float)
0:10    Function Parameters: 
0:?     Sequence
0:10      Branch: Return with expression
0:10        'v2' ( global 4-component vector of float)
0:12  Function Definition: N2::N3::getVec( ( temp 4-component vector of float)
0:12    Function Parameters: 
0:?     Sequence
0:12      Branch: Return with expression
0:12        'v2' ( global 4-component vector of float)
0:15  Function Definition: N2::N3::C1::getVec( ( global 4-component vector of float)
0:15    Function Parameters: 
0:?     Sequence
0:15      Branch: Return with expression
0:15        'v2' ( global 4-component vector of float)
0:21  Function Definition: @main( ( temp 4-component vector of float)
0:21    Function Parameters: 
0:?     Sequence
0:22      Branch: Return with expression
0:22        add ( temp 4-component vector of float)
0:22          add ( temp 4-component vector of float)
0:22            add ( temp 4-component vector of float)
0:22              Function Call: N1::getVec( ( temp 4-component vector of float)
0:22              Function Call: N2::getVec( ( temp 4-component vector of float)
0:22            Function Call: N2::N3::getVec( ( temp 4-component vector of float)
0:22          vector-scale ( temp 4-component vector of float)
0:22            Function Call: N2::N3::C1::getVec( ( global 4-component vector of float)
0:22            'N2::gf' ( global float)
0:21  Function Definition: main( ( temp void)
0:21    Function Parameters: 
0:?     Sequence
0:21      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:21        Function Call: @main( ( temp 4-component vector of float)
0:?   Linker Objects
0:?     'v1' ( global 4-component vector of float)
0:?     'v2' ( global 4-component vector of float)
0:?     'N2::gf' ( global float)
0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)

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

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 48
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "main"
                              Name 9  "N1::getVec("
                              Name 11  "N2::getVec("
                              Name 13  "N2::N3::getVec("
                              Name 15  "N2::N3::C1::getVec("
                              Name 17  "@main("
                              Name 20  "v1"
                              Name 24  "v2"
                              Name 41  "N2::gf"
                              Name 48  "@entryPointOutput"
                              Decorate 48(@entryPointOutput) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypeFunction 7(fvec4)
              19:             TypePointer Private 7(fvec4)
          20(v1):     19(ptr) Variable Private
          24(v2):     19(ptr) Variable Private
              40:             TypePointer Private 6(float)
      41(N2::gf):     40(ptr) Variable Private
              47:             TypePointer Output 7(fvec4)
48(@entryPointOutput):     47(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
              49:    7(fvec4) FunctionCall 17(@main()
                              Store 48(@entryPointOutput) 49
                              Return
                              FunctionEnd
  9(N1::getVec():    7(fvec4) Function None 8
              10:             Label
              21:    7(fvec4) Load 20(v1)
                              ReturnValue 21
                              FunctionEnd
 11(N2::getVec():    7(fvec4) Function None 8
              12:             Label
              25:    7(fvec4) Load 24(v2)
                              ReturnValue 25
                              FunctionEnd
13(N2::N3::getVec():    7(fvec4) Function None 8
              14:             Label
              28:    7(fvec4) Load 24(v2)
                              ReturnValue 28
                              FunctionEnd
15(N2::N3::C1::getVec():    7(fvec4) Function None 8
              16:             Label
              31:    7(fvec4) Load 24(v2)
                              ReturnValue 31
                              FunctionEnd
      17(@main():    7(fvec4) Function None 8
              18:             Label
              34:    7(fvec4) FunctionCall 9(N1::getVec()
              35:    7(fvec4) FunctionCall 11(N2::getVec()
              36:    7(fvec4) FAdd 34 35
              37:    7(fvec4) FunctionCall 13(N2::N3::getVec()
              38:    7(fvec4) FAdd 36 37
              39:    7(fvec4) FunctionCall 15(N2::N3::C1::getVec()
              42:    6(float) Load 41(N2::gf)
              43:    7(fvec4) VectorTimesScalar 39 42
              44:    7(fvec4) FAdd 38 43
                              ReturnValue 44
                              FunctionEnd
