Structured control-flow rules allow leaving the middle of a construct through a return, but not through a jump to a block that does a return. Addresses issue #58.
		
			
				
	
	
		
			127 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
spv.functionCall.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 73
 | 
						|
 | 
						|
                              Source GLSL 130
 | 
						|
                              Capability Shader
 | 
						|
               1:             ExtInstImport  "GLSL.std.450"
 | 
						|
                              MemoryModel Logical GLSL450
 | 
						|
                              EntryPoint Fragment 4  "main"
 | 
						|
                              ExecutionMode 4 OriginLowerLeft
 | 
						|
                              Name 4  "main"
 | 
						|
                              Name 11  "foo(vf4;"
 | 
						|
                              Name 10  "bar"
 | 
						|
                              Name 13  "bar("
 | 
						|
                              Name 16  "unreachableReturn("
 | 
						|
                              Name 18  "missingReturn("
 | 
						|
                              Name 21  "h"
 | 
						|
                              Name 30  "d"
 | 
						|
                              Name 51  "color"
 | 
						|
                              Name 53  "BaseColor"
 | 
						|
                              Name 54  "param"
 | 
						|
                              Name 60  "f"
 | 
						|
                              Name 62  "g"
 | 
						|
                              Name 65  "gl_FragColor"
 | 
						|
                              Name 72  "bigColor"
 | 
						|
                              Decorate 53(BaseColor) Smooth
 | 
						|
                              Decorate 65(gl_FragColor) BuiltIn FragColor
 | 
						|
                              Decorate 72(bigColor) NoStaticUse
 | 
						|
               2:             TypeVoid
 | 
						|
               3:             TypeFunction 2
 | 
						|
               6:             TypeFloat 32
 | 
						|
               7:             TypeVector 6(float) 4
 | 
						|
               8:             TypePointer Function 7(fvec4)
 | 
						|
               9:             TypeFunction 6(float) 8(ptr)
 | 
						|
              15:             TypeFunction 6(float)
 | 
						|
              20:             TypePointer PrivateGlobal 6(float)
 | 
						|
           21(h):     20(ptr) Variable PrivateGlobal
 | 
						|
              22:    6(float) Constant 0
 | 
						|
              29:             TypePointer UniformConstant 6(float)
 | 
						|
           30(d):     29(ptr) Variable UniformConstant
 | 
						|
              32:    6(float) Constant 1082549862
 | 
						|
              33:             TypeBool
 | 
						|
              37:    6(float) Constant 1067030938
 | 
						|
              40:    6(float) Constant 1083179008
 | 
						|
              48:    6(float) Constant 1081711002
 | 
						|
              52:             TypePointer Input 7(fvec4)
 | 
						|
   53(BaseColor):     52(ptr) Variable Input
 | 
						|
              59:             TypePointer Function 6(float)
 | 
						|
              64:             TypePointer Output 7(fvec4)
 | 
						|
65(gl_FragColor):     64(ptr) Variable Output
 | 
						|
              71:             TypePointer UniformConstant 7(fvec4)
 | 
						|
    72(bigColor):     71(ptr) Variable UniformConstant
 | 
						|
         4(main):           2 Function None 3
 | 
						|
               5:             Label
 | 
						|
       51(color):      8(ptr) Variable Function
 | 
						|
       54(param):      8(ptr) Variable Function
 | 
						|
           60(f):     59(ptr) Variable Function
 | 
						|
           62(g):     59(ptr) Variable Function
 | 
						|
                              Store 21(h) 22
 | 
						|
              55:    7(fvec4) Load 53(BaseColor)
 | 
						|
                              Store 54(param) 55
 | 
						|
              56:    6(float) FunctionCall 11(foo(vf4;) 54(param)
 | 
						|
              57:    7(fvec4) CompositeConstruct 56 56 56 56
 | 
						|
                              Store 51(color) 57
 | 
						|
              58:           2 FunctionCall 13(bar()
 | 
						|
              61:    6(float) FunctionCall 16(unreachableReturn()
 | 
						|
                              Store 60(f) 61
 | 
						|
              63:    6(float) FunctionCall 18(missingReturn()
 | 
						|
                              Store 62(g) 63
 | 
						|
              66:    7(fvec4) Load 51(color)
 | 
						|
              67:    6(float) Load 60(f)
 | 
						|
              68:    7(fvec4) VectorTimesScalar 66 67
 | 
						|
              69:    6(float) Load 21(h)
 | 
						|
              70:    7(fvec4) VectorTimesScalar 68 69
 | 
						|
                              Store 65(gl_FragColor) 70
 | 
						|
                              Return
 | 
						|
                              FunctionEnd
 | 
						|
    11(foo(vf4;):    6(float) Function None 9
 | 
						|
         10(bar):      8(ptr) FunctionParameter
 | 
						|
              12:             Label
 | 
						|
              23:    7(fvec4) Load 10(bar)
 | 
						|
              24:    6(float) CompositeExtract 23 0
 | 
						|
              25:    7(fvec4) Load 10(bar)
 | 
						|
              26:    6(float) CompositeExtract 25 1
 | 
						|
              27:    6(float) FAdd 24 26
 | 
						|
                              ReturnValue 27
 | 
						|
                              FunctionEnd
 | 
						|
        13(bar():           2 Function None 3
 | 
						|
              14:             Label
 | 
						|
                              Return
 | 
						|
                              FunctionEnd
 | 
						|
16(unreachableReturn():    6(float) Function None 15
 | 
						|
              17:             Label
 | 
						|
              31:    6(float) Load 30(d)
 | 
						|
              34:    33(bool) FOrdLessThan 31 32
 | 
						|
                              SelectionMerge 36 None
 | 
						|
                              BranchConditional 34 35 39
 | 
						|
              35:               Label
 | 
						|
                                ReturnValue 37
 | 
						|
              39:               Label
 | 
						|
                                ReturnValue 40
 | 
						|
              36:             Label
 | 
						|
              42:    6(float) Undef
 | 
						|
                              ReturnValue 42
 | 
						|
                              FunctionEnd
 | 
						|
18(missingReturn():    6(float) Function None 15
 | 
						|
              19:             Label
 | 
						|
              43:    6(float) Load 30(d)
 | 
						|
              44:    33(bool) FOrdLessThan 43 40
 | 
						|
                              SelectionMerge 46 None
 | 
						|
                              BranchConditional 44 45 46
 | 
						|
              45:               Label
 | 
						|
              47:    6(float)   Load 30(d)
 | 
						|
                                Store 21(h) 47
 | 
						|
                                ReturnValue 48
 | 
						|
              46:             Label
 | 
						|
              50:    6(float) Undef
 | 
						|
                              ReturnValue 50
 | 
						|
                              FunctionEnd
 |