spv.simpleFunctionCall.frag
WARNING: 0:4: varying deprecated in version 130; may be removed in future release


Linked fragment stage:


// Module Version 99
// Generated by (magic number): 51a00bb
// Id's are bound by 23

                              Source GLSL 150
                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main"
                              ExecutionMode 4 OriginLowerLeft
                              Name 4  "main"
                              Name 10  "foo("
                              Name 13  "BaseColor"
                              Name 17  "gl_FragColor"
                              Name 20  "bigColor"
                              Name 22  "d"
                              Decorate 13(BaseColor) Smooth
                              Decorate 17(gl_FragColor) BuiltIn FragColor
                              Decorate 20(bigColor) NoStaticUse
                              Decorate 22(d) NoStaticUse
               2:             TypeVoid
               3:             TypeFunction 2
               7:             TypeFloat 32
               8:             TypeVector 7(float) 4
               9:             TypeFunction 8(fvec4)
              12:             TypePointer Input 8(fvec4)
   13(BaseColor):     12(ptr) Variable Input
              16:             TypePointer Output 8(fvec4)
17(gl_FragColor):     16(ptr) Variable Output
              19:             TypePointer UniformConstant 8(fvec4)
    20(bigColor):     19(ptr) Variable UniformConstant
              21:             TypePointer UniformConstant 7(float)
           22(d):     21(ptr) Variable UniformConstant
         4(main):           2 Function None 3
               5:             Label
              18:    8(fvec4) FunctionCall 10(foo()
                              Store 17(gl_FragColor) 18
                              Branch 6
               6:             Label
                              Return
                              FunctionEnd
        10(foo():    8(fvec4) Function None 9
              11:             Label
              14:    8(fvec4) Load 13(BaseColor)
                              ReturnValue 14
                              FunctionEnd
