hlsl.multiEntry.vert
Shader version: 500
0:? Sequence
0:4  Function Definition: FakeEntrypoint(u1; ( temp 4-component vector of float)
0:4    Function Parameters: 
0:4      'Index' ( in uint)
0:?     Sequence
0:5      Branch: Return with expression
0:5        textureFetch ( temp 4-component vector of float)
0:5          'Position' (layout( rgba32f) uniform textureBuffer)
0:5          Convert uint to int ( temp int)
0:5            'Index' ( in uint)
0:9  Function Definition: @RealEntrypoint(u1; ( temp 4-component vector of float)
0:9    Function Parameters: 
0:9      'Index' ( in uint)
0:?     Sequence
0:10      Branch: Return with expression
0:10        Function Call: FakeEntrypoint(u1; ( temp 4-component vector of float)
0:10          'Index' ( in uint)
0:9  Function Definition: RealEntrypoint( ( temp void)
0:9    Function Parameters: 
0:?     Sequence
0:9      move second child to first child ( temp uint)
0:?         'Index' ( temp uint)
0:?         'Index' ( in uint VertexIndex)
0:9      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' ( out 4-component vector of float Position)
0:9        Function Call: @RealEntrypoint(u1; ( temp 4-component vector of float)
0:?           'Index' ( temp uint)
0:?   Linker Objects
0:?     'Position' (layout( rgba32f) uniform textureBuffer)
0:?     '@entryPointOutput' ( out 4-component vector of float Position)
0:?     'Index' ( in uint VertexIndex)


Linked vertex stage:


Shader version: 500
0:? Sequence
0:4  Function Definition: FakeEntrypoint(u1; ( temp 4-component vector of float)
0:4    Function Parameters: 
0:4      'Index' ( in uint)
0:?     Sequence
0:5      Branch: Return with expression
0:5        textureFetch ( temp 4-component vector of float)
0:5          'Position' (layout( rgba32f) uniform textureBuffer)
0:5          Convert uint to int ( temp int)
0:5            'Index' ( in uint)
0:9  Function Definition: @RealEntrypoint(u1; ( temp 4-component vector of float)
0:9    Function Parameters: 
0:9      'Index' ( in uint)
0:?     Sequence
0:10      Branch: Return with expression
0:10        Function Call: FakeEntrypoint(u1; ( temp 4-component vector of float)
0:10          'Index' ( in uint)
0:9  Function Definition: RealEntrypoint( ( temp void)
0:9    Function Parameters: 
0:?     Sequence
0:9      move second child to first child ( temp uint)
0:?         'Index' ( temp uint)
0:?         'Index' ( in uint VertexIndex)
0:9      move second child to first child ( temp 4-component vector of float)
0:?         '@entryPointOutput' ( out 4-component vector of float Position)
0:9        Function Call: @RealEntrypoint(u1; ( temp 4-component vector of float)
0:?           'Index' ( temp uint)
0:?   Linker Objects
0:?     'Position' (layout( rgba32f) uniform textureBuffer)
0:?     '@entryPointOutput' ( out 4-component vector of float Position)
0:?     'Index' ( in uint VertexIndex)

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

                              Capability Shader
                              Capability SampledBuffer
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Vertex 4  "RealEntrypoint" 34 37
                              Source HLSL 500
                              Name 4  "RealEntrypoint"
                              Name 12  "FakeEntrypoint(u1;"
                              Name 11  "Index"
                              Name 15  "@RealEntrypoint(u1;"
                              Name 14  "Index"
                              Name 19  "Position"
                              Name 27  "param"
                              Name 32  "Index"
                              Name 34  "Index"
                              Name 37  "@entryPointOutput"
                              Name 38  "param"
                              Decorate 19(Position) DescriptorSet 0
                              Decorate 19(Position) Binding 0
                              Decorate 34(Index) BuiltIn VertexIndex
                              Decorate 37(@entryPointOutput) BuiltIn Position
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 0
               7:             TypePointer Function 6(int)
               8:             TypeFloat 32
               9:             TypeVector 8(float) 4
              10:             TypeFunction 9(fvec4) 7(ptr)
              17:             TypeImage 8(float) Buffer sampled format:Rgba32f
              18:             TypePointer UniformConstant 17
    19(Position):     18(ptr) Variable UniformConstant
              22:             TypeInt 32 1
              33:             TypePointer Input 6(int)
       34(Index):     33(ptr) Variable Input
              36:             TypePointer Output 9(fvec4)
37(@entryPointOutput):     36(ptr) Variable Output
4(RealEntrypoint):           2 Function None 3
               5:             Label
       32(Index):      7(ptr) Variable Function
       38(param):      7(ptr) Variable Function
              35:      6(int) Load 34(Index)
                              Store 32(Index) 35
              39:      6(int) Load 32(Index)
                              Store 38(param) 39
              40:    9(fvec4) FunctionCall 15(@RealEntrypoint(u1;) 38(param)
                              Store 37(@entryPointOutput) 40
                              Return
                              FunctionEnd
12(FakeEntrypoint(u1;):    9(fvec4) Function None 10
       11(Index):      7(ptr) FunctionParameter
              13:             Label
              20:          17 Load 19(Position)
              21:      6(int) Load 11(Index)
              23:     22(int) Bitcast 21
              24:    9(fvec4) ImageFetch 20 23
                              ReturnValue 24
                              FunctionEnd
15(@RealEntrypoint(u1;):    9(fvec4) Function None 10
       14(Index):      7(ptr) FunctionParameter
              16:             Label
       27(param):      7(ptr) Variable Function
              28:      6(int) Load 14(Index)
                              Store 27(param) 28
              29:    9(fvec4) FunctionCall 12(FakeEntrypoint(u1;) 27(param)
                              ReturnValue 29
                              FunctionEnd
