SPV return from main: Simplify a legacy design such returns are not jumps to exit block.

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.
This commit is contained in:
John Kessenich 2015-09-14 20:58:02 -06:00
parent 5f5b205ce9
commit e770b3e6cf
74 changed files with 9648 additions and 9816 deletions

View file

@ -5,7 +5,7 @@ Linked fragment stage:
// Module Version 99
// Generated by (magic number): 51a00bb
// Id's are bound by 37
// Id's are bound by 36
Source GLSL 110
Capability Shader
@ -14,53 +14,51 @@ Linked fragment stage:
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginLowerLeft
Name 4 "main"
Name 10 "white"
Name 13 "black"
Name 16 "color"
Name 19 "x"
Name 22 "tex_coord"
Name 28 "y"
Name 35 "gl_FragColor"
Decorate 22(tex_coord) Smooth
Decorate 35(gl_FragColor) BuiltIn FragColor
Name 9 "white"
Name 12 "black"
Name 15 "color"
Name 18 "x"
Name 21 "tex_coord"
Name 27 "y"
Name 34 "gl_FragColor"
Decorate 21(tex_coord) Smooth
Decorate 34(gl_FragColor) BuiltIn FragColor
2: TypeVoid
3: TypeFunction 2
7: TypeFloat 32
8: TypeVector 7(float) 4
9: TypePointer Function 8(fvec4)
11: 7(float) Constant 1065353216
12: 8(fvec4) ConstantComposite 11 11 11 11
14: 7(float) Constant 1045220557
15: 8(fvec4) ConstantComposite 14 14 14 14
18: TypePointer Function 7(float)
20: TypeVector 7(float) 2
21: TypePointer Input 20(fvec2)
22(tex_coord): 21(ptr) Variable Input
25: 7(float) Constant 1073741824
34: TypePointer Output 8(fvec4)
35(gl_FragColor): 34(ptr) Variable Output
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Function 7(fvec4)
10: 6(float) Constant 1065353216
11: 7(fvec4) ConstantComposite 10 10 10 10
13: 6(float) Constant 1045220557
14: 7(fvec4) ConstantComposite 13 13 13 13
17: TypePointer Function 6(float)
19: TypeVector 6(float) 2
20: TypePointer Input 19(fvec2)
21(tex_coord): 20(ptr) Variable Input
24: 6(float) Constant 1073741824
33: TypePointer Output 7(fvec4)
34(gl_FragColor): 33(ptr) Variable Output
4(main): 2 Function None 3
5: Label
10(white): 9(ptr) Variable Function
13(black): 9(ptr) Variable Function
16(color): 9(ptr) Variable Function
19(x): 18(ptr) Variable Function
28(y): 18(ptr) Variable Function
Store 10(white) 12
Store 13(black) 15
17: 8(fvec4) Load 10(white)
Store 16(color) 17
23: 20(fvec2) Load 22(tex_coord)
24: 7(float) CompositeExtract 23 0
26: 7(float) FMul 24 25
27: 7(float) FSub 26 11
Store 19(x) 27
29: 20(fvec2) Load 22(tex_coord)
30: 7(float) CompositeExtract 29 1
31: 7(float) FMul 30 25
32: 7(float) FSub 31 11
Store 28(y) 32
9(white): 8(ptr) Variable Function
12(black): 8(ptr) Variable Function
15(color): 8(ptr) Variable Function
18(x): 17(ptr) Variable Function
27(y): 17(ptr) Variable Function
Store 9(white) 11
Store 12(black) 14
16: 7(fvec4) Load 9(white)
Store 15(color) 16
22: 19(fvec2) Load 21(tex_coord)
23: 6(float) CompositeExtract 22 0
25: 6(float) FMul 23 24
26: 6(float) FSub 25 10
Store 18(x) 26
28: 19(fvec2) Load 21(tex_coord)
29: 6(float) CompositeExtract 28 1
30: 6(float) FMul 29 24
31: 6(float) FSub 30 10
Store 27(y) 31
Kill
6: Label
Return
FunctionEnd