hlsl.entry.rename.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7  Function Definition: not_the_entry_point( ( temp void)
0:7    Function Parameters: 
0:11  Function Definition: @main_in_spv( ( temp structure{ temp 4-component vector of float Color})
0:11    Function Parameters: 
0:?     Sequence
0:13      move second child to first child ( temp 4-component vector of float)
0:13        Color: direct index for structure ( temp 4-component vector of float)
0:13          'psout' ( temp structure{ temp 4-component vector of float Color})
0:13          Constant:
0:13            0 (const int)
0:13        Constant:
0:13          0.000000
0:13          0.000000
0:13          0.000000
0:13          0.000000
0:14      Branch: Return with expression
0:14        'psout' ( temp structure{ temp 4-component vector of float Color})
0:11  Function Definition: main_in_spv( ( temp void)
0:11    Function Parameters: 
0:?     Sequence
0:11      Sequence
0:11        move second child to first child ( temp 4-component vector of float)
0:?           '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:11          Color: direct index for structure ( temp 4-component vector of float)
0:11            Function Call: @main_in_spv( ( temp structure{ temp 4-component vector of float Color})
0:11            Constant:
0:11              0 (const int)
0:?   Linker Objects
0:?     'anon@0' (layout( row_major std140) uniform block{ uniform int also_not_the_entry_point})
0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)


Linked fragment stage:


Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:7  Function Definition: not_the_entry_point( ( temp void)
0:7    Function Parameters: 
0:11  Function Definition: @main_in_spv( ( temp structure{ temp 4-component vector of float Color})
0:11    Function Parameters: 
0:?     Sequence
0:13      move second child to first child ( temp 4-component vector of float)
0:13        Color: direct index for structure ( temp 4-component vector of float)
0:13          'psout' ( temp structure{ temp 4-component vector of float Color})
0:13          Constant:
0:13            0 (const int)
0:13        Constant:
0:13          0.000000
0:13          0.000000
0:13          0.000000
0:13          0.000000
0:14      Branch: Return with expression
0:14        'psout' ( temp structure{ temp 4-component vector of float Color})
0:11  Function Definition: main_in_spv( ( temp void)
0:11    Function Parameters: 
0:?     Sequence
0:11      Sequence
0:11        move second child to first child ( temp 4-component vector of float)
0:?           '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
0:11          Color: direct index for structure ( temp 4-component vector of float)
0:11            Function Call: @main_in_spv( ( temp structure{ temp 4-component vector of float Color})
0:11            Constant:
0:11              0 (const int)
0:?   Linker Objects
0:?     'anon@0' (layout( row_major std140) uniform block{ uniform int also_not_the_entry_point})
0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)

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

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main_in_spv" 26
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "main_in_spv"
                              Name 6  "not_the_entry_point("
                              Name 10  "PS_OUTPUT"
                              MemberName 10(PS_OUTPUT) 0  "Color"
                              Name 12  "@main_in_spv("
                              Name 15  "psout"
                              Name 26  "@entryPointOutput.Color"
                              Name 29  "$Global"
                              MemberName 29($Global) 0  "also_not_the_entry_point"
                              Name 31  ""
                              Decorate 26(@entryPointOutput.Color) Location 0
                              MemberDecorate 29($Global) 0 Offset 0
                              Decorate 29($Global) Block
                              Decorate 31 DescriptorSet 0
               2:             TypeVoid
               3:             TypeFunction 2
               8:             TypeFloat 32
               9:             TypeVector 8(float) 4
   10(PS_OUTPUT):             TypeStruct 9(fvec4)
              11:             TypeFunction 10(PS_OUTPUT)
              14:             TypePointer Function 10(PS_OUTPUT)
              16:             TypeInt 32 1
              17:     16(int) Constant 0
              18:    8(float) Constant 0
              19:    9(fvec4) ConstantComposite 18 18 18 18
              20:             TypePointer Function 9(fvec4)
              25:             TypePointer Output 9(fvec4)
26(@entryPointOutput.Color):     25(ptr) Variable Output
     29($Global):             TypeStruct 16(int)
              30:             TypePointer Uniform 29($Global)
              31:     30(ptr) Variable Uniform
  4(main_in_spv):           2 Function None 3
               5:             Label
              27:10(PS_OUTPUT) FunctionCall 12(@main_in_spv()
              28:    9(fvec4) CompositeExtract 27 0
                              Store 26(@entryPointOutput.Color) 28
                              Return
                              FunctionEnd
6(not_the_entry_point():           2 Function None 3
               7:             Label
                              Return
                              FunctionEnd
12(@main_in_spv():10(PS_OUTPUT) Function None 11
              13:             Label
       15(psout):     14(ptr) Variable Function
              21:     20(ptr) AccessChain 15(psout) 17
                              Store 21 19
              22:10(PS_OUTPUT) Load 15(psout)
                              ReturnValue 22
                              FunctionEnd
