hlsl.precise.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:6  Function Definition: MyFunction(f1;vf3; ( temp void)
0:6    Function Parameters: 
0:6      'myfloat' ( noContraction in float)
0:6      'myfloat3' ( noContraction out 3-component vector of float)
0:9  Function Definition: @main( ( temp structure{ noContraction temp 4-component vector of float color})
0:9    Function Parameters: 
0:?     Sequence
0:11      move second child to first child ( noContraction temp 4-component vector of float)
0:11        color: direct index for structure ( noContraction temp 4-component vector of float)
0:11          'ps_output' ( temp structure{ noContraction temp 4-component vector of float color})
0:11          Constant:
0:11            0 (const int)
0:11        Constant:
0:11          1.000000
0:11          1.000000
0:11          1.000000
0:11          1.000000
0:12      Branch: Return with expression
0:12        'ps_output' ( temp structure{ noContraction temp 4-component vector of float color})
0:9  Function Definition: main( ( temp void)
0:9    Function Parameters: 
0:?     Sequence
0:9      Sequence
0:9        move second child to first child ( noContraction temp 4-component vector of float)
0:?           '@entryPointOutput.color' (layout( location=0) noContraction out 4-component vector of float)
0:9          color: direct index for structure ( noContraction temp 4-component vector of float)
0:9            Function Call: @main( ( temp structure{ noContraction temp 4-component vector of float color})
0:9            Constant:
0:9              0 (const int)
0:?   Linker Objects
0:?     'precisefloat' ( noContraction global float)
0:?     '@entryPointOutput.color' (layout( location=0) noContraction out 4-component vector of float)


Linked fragment stage:


Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:6  Function Definition: MyFunction(f1;vf3; ( temp void)
0:6    Function Parameters: 
0:6      'myfloat' ( noContraction in float)
0:6      'myfloat3' ( noContraction out 3-component vector of float)
0:9  Function Definition: @main( ( temp structure{ noContraction temp 4-component vector of float color})
0:9    Function Parameters: 
0:?     Sequence
0:11      move second child to first child ( noContraction temp 4-component vector of float)
0:11        color: direct index for structure ( noContraction temp 4-component vector of float)
0:11          'ps_output' ( temp structure{ noContraction temp 4-component vector of float color})
0:11          Constant:
0:11            0 (const int)
0:11        Constant:
0:11          1.000000
0:11          1.000000
0:11          1.000000
0:11          1.000000
0:12      Branch: Return with expression
0:12        'ps_output' ( temp structure{ noContraction temp 4-component vector of float color})
0:9  Function Definition: main( ( temp void)
0:9    Function Parameters: 
0:?     Sequence
0:9      Sequence
0:9        move second child to first child ( noContraction temp 4-component vector of float)
0:?           '@entryPointOutput.color' (layout( location=0) noContraction out 4-component vector of float)
0:9          color: direct index for structure ( noContraction temp 4-component vector of float)
0:9            Function Call: @main( ( temp structure{ noContraction temp 4-component vector of float color})
0:9            Constant:
0:9              0 (const int)
0:?   Linker Objects
0:?     'precisefloat' ( noContraction global float)
0:?     '@entryPointOutput.color' (layout( location=0) noContraction out 4-component vector of float)

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

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 32
                              ExecutionMode 4 OriginUpperLeft
                              Source HLSL 500
                              Name 4  "main"
                              Name 13  "MyFunction(f1;vf3;"
                              Name 11  "myfloat"
                              Name 12  "myfloat3"
                              Name 16  "PS_OUTPUT"
                              MemberName 16(PS_OUTPUT) 0  "color"
                              Name 18  "@main("
                              Name 21  "ps_output"
                              Name 32  "@entryPointOutput.color"
                              Name 36  "precisefloat"
                              Decorate 32(@entryPointOutput.color) Location 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypePointer Function 6(float)
               8:             TypeVector 6(float) 3
               9:             TypePointer Function 8(fvec3)
              10:             TypeFunction 2 7(ptr) 9(ptr)
              15:             TypeVector 6(float) 4
   16(PS_OUTPUT):             TypeStruct 15(fvec4)
              17:             TypeFunction 16(PS_OUTPUT)
              20:             TypePointer Function 16(PS_OUTPUT)
              22:             TypeInt 32 1
              23:     22(int) Constant 0
              24:    6(float) Constant 1065353216
              25:   15(fvec4) ConstantComposite 24 24 24 24
              26:             TypePointer Function 15(fvec4)
              31:             TypePointer Output 15(fvec4)
32(@entryPointOutput.color):     31(ptr) Variable Output
              35:             TypePointer Private 6(float)
36(precisefloat):     35(ptr) Variable Private
         4(main):           2 Function None 3
               5:             Label
              33:16(PS_OUTPUT) FunctionCall 18(@main()
              34:   15(fvec4) CompositeExtract 33 0
                              Store 32(@entryPointOutput.color) 34
                              Return
                              FunctionEnd
13(MyFunction(f1;vf3;):           2 Function None 10
     11(myfloat):      7(ptr) FunctionParameter
    12(myfloat3):      9(ptr) FunctionParameter
              14:             Label
                              Return
                              FunctionEnd
      18(@main():16(PS_OUTPUT) Function None 17
              19:             Label
   21(ps_output):     20(ptr) Variable Function
              27:     26(ptr) AccessChain 21(ps_output) 23
                              Store 27 25
              28:16(PS_OUTPUT) Load 21(ps_output)
                              ReturnValue 28
                              FunctionEnd
