GLSL/SPV: Propagaet precision qualifier from function to return value.
When a return value's type has no precision qualification (e.g., the return expression is formed from a constructor), and the formal function return type has a precision qualification, back propagate that from the return type to the type of the return value's expression.
This commit is contained in:
parent
4f72970ed3
commit
3d2391fb25
@ -61,7 +61,7 @@ ERROR: node is still EOpNull!
|
||||
0:49 Constant:
|
||||
0:49 0.000000
|
||||
0:50 Branch: Return with expression
|
||||
0:50 Construct float ( temp 4-element array of 7-element array of float)
|
||||
0:50 Construct float ( temp 4-element array of 7-element array of highp float)
|
||||
0:50 direct index ( temp 7-element array of highp float)
|
||||
0:50 'a' ( in 5-element array of 7-element array of highp float)
|
||||
0:50 Constant:
|
||||
@ -76,7 +76,7 @@ ERROR: node is still EOpNull!
|
||||
0:50 Constant:
|
||||
0:50 3 (const int)
|
||||
0:51 Branch: Return with expression
|
||||
0:51 Construct float ( temp 4-element array of 7-element array of float)
|
||||
0:51 Construct float ( temp 4-element array of 7-element array of highp float)
|
||||
0:51 direct index ( temp 7-element array of highp float)
|
||||
0:51 'a' ( in 5-element array of 7-element array of highp float)
|
||||
0:51 Constant:
|
||||
@ -91,7 +91,7 @@ ERROR: node is still EOpNull!
|
||||
0:51 Constant:
|
||||
0:51 3 (const int)
|
||||
0:52 Branch: Return with expression
|
||||
0:52 Construct float ( temp 4-element array of 7-element array of float)
|
||||
0:52 Construct float ( temp 4-element array of 7-element array of highp float)
|
||||
0:52 direct index ( temp 7-element array of highp float)
|
||||
0:52 'a' ( in 5-element array of 7-element array of highp float)
|
||||
0:52 Constant:
|
||||
|
@ -31,7 +31,7 @@ ERROR: node is still EOpNull!
|
||||
0:9 'a' ( in 5-element array of mediump float)
|
||||
0:11 Sequence
|
||||
0:11 Branch: Return with expression
|
||||
0:11 Construct float ( temp 4-element array of float)
|
||||
0:11 Construct float ( temp 4-element array of mediump float)
|
||||
0:11 direct index ( temp mediump float)
|
||||
0:11 'a' ( in 5-element array of mediump float)
|
||||
0:11 Constant:
|
||||
@ -168,7 +168,7 @@ ERROR: node is still EOpNull!
|
||||
0:9 'a' ( in 5-element array of mediump float)
|
||||
0:11 Sequence
|
||||
0:11 Branch: Return with expression
|
||||
0:11 Construct float ( temp 4-element array of float)
|
||||
0:11 Construct float ( temp 4-element array of mediump float)
|
||||
0:11 direct index ( temp mediump float)
|
||||
0:11 'a' ( in 5-element array of mediump float)
|
||||
0:11 Constant:
|
||||
|
@ -1,12 +1,12 @@
|
||||
spv.forwardFun.frag
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 8000a
|
||||
// Id's are bound by 64
|
||||
// Id's are bound by 60
|
||||
|
||||
Capability Shader
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint Fragment 4 "main" 20 30 36 63
|
||||
EntryPoint Fragment 4 "main" 20 30 36 59
|
||||
ExecutionMode 4 OriginUpperLeft
|
||||
Source GLSL 140
|
||||
Name 4 "main"
|
||||
@ -20,7 +20,7 @@ spv.forwardFun.frag
|
||||
Name 27 "f"
|
||||
Name 30 "gl_FragColor"
|
||||
Name 36 "d"
|
||||
Name 63 "bigColor"
|
||||
Name 59 "bigColor"
|
||||
Decorate 10(unreachableReturn() RelaxedPrecision
|
||||
Decorate 16(foo(vf4;) RelaxedPrecision
|
||||
Decorate 15(bar) RelaxedPrecision
|
||||
@ -41,15 +41,11 @@ spv.forwardFun.frag
|
||||
Decorate 36(d) RelaxedPrecision
|
||||
Decorate 36(d) Location 2
|
||||
Decorate 37 RelaxedPrecision
|
||||
Decorate 44 RelaxedPrecision
|
||||
Decorate 45 RelaxedPrecision
|
||||
Decorate 49 RelaxedPrecision
|
||||
Decorate 50 RelaxedPrecision
|
||||
Decorate 52 RelaxedPrecision
|
||||
Decorate 55 RelaxedPrecision
|
||||
Decorate 56 RelaxedPrecision
|
||||
Decorate 59 RelaxedPrecision
|
||||
Decorate 60 RelaxedPrecision
|
||||
Decorate 63(bigColor) RelaxedPrecision
|
||||
Decorate 63(bigColor) Location 0
|
||||
Decorate 59(bigColor) RelaxedPrecision
|
||||
Decorate 59(bigColor) Location 0
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
8: TypeFloat 32
|
||||
@ -67,11 +63,11 @@ spv.forwardFun.frag
|
||||
38: 8(float) Constant 1082549862
|
||||
39: TypeBool
|
||||
43: 8(float) Constant 1067030938
|
||||
48: 8(float) Constant 1083179008
|
||||
53: TypeInt 32 0
|
||||
54: 53(int) Constant 0
|
||||
57: 53(int) Constant 1
|
||||
63(bigColor): 19(ptr) Variable Input
|
||||
46: 8(float) Constant 1083179008
|
||||
49: TypeInt 32 0
|
||||
50: 49(int) Constant 0
|
||||
53: 49(int) Constant 1
|
||||
59(bigColor): 19(ptr) Variable Input
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
18(color): 13(ptr) Variable Function
|
||||
@ -97,31 +93,25 @@ spv.forwardFun.frag
|
||||
FunctionEnd
|
||||
10(unreachableReturn(): 8(float) Function None 9
|
||||
11: Label
|
||||
44: 26(ptr) Variable Function
|
||||
49: 26(ptr) Variable Function
|
||||
34: 2 FunctionCall 6(bar()
|
||||
37: 8(float) Load 36(d)
|
||||
40: 39(bool) FOrdLessThan 37 38
|
||||
SelectionMerge 42 None
|
||||
BranchConditional 40 41 47
|
||||
BranchConditional 40 41 45
|
||||
41: Label
|
||||
Store 44 43
|
||||
45: 8(float) Load 44
|
||||
ReturnValue 45
|
||||
47: Label
|
||||
Store 49 48
|
||||
50: 8(float) Load 49
|
||||
ReturnValue 50
|
||||
ReturnValue 43
|
||||
45: Label
|
||||
ReturnValue 46
|
||||
42: Label
|
||||
Unreachable
|
||||
FunctionEnd
|
||||
16(foo(vf4;): 8(float) Function None 14
|
||||
15(bar): 13(ptr) FunctionParameter
|
||||
17: Label
|
||||
55: 26(ptr) AccessChain 15(bar) 54
|
||||
56: 8(float) Load 55
|
||||
58: 26(ptr) AccessChain 15(bar) 57
|
||||
59: 8(float) Load 58
|
||||
60: 8(float) FAdd 56 59
|
||||
ReturnValue 60
|
||||
51: 26(ptr) AccessChain 15(bar) 50
|
||||
52: 8(float) Load 51
|
||||
54: 26(ptr) AccessChain 15(bar) 53
|
||||
55: 8(float) Load 54
|
||||
56: 8(float) FAdd 52 55
|
||||
ReturnValue 56
|
||||
FunctionEnd
|
||||
|
@ -5,12 +5,12 @@ WARNING: 0:139: 'switch' : last case/default label not followed by statements
|
||||
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 8000a
|
||||
// Id's are bound by 275
|
||||
// Id's are bound by 269
|
||||
|
||||
Capability Shader
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint Fragment 4 "main" 68 81 135 233 239
|
||||
EntryPoint Fragment 4 "main" 62 75 129 227 233
|
||||
ExecutionMode 4 OriginUpperLeft
|
||||
Source ESSL 310
|
||||
Name 4 "main"
|
||||
@ -22,21 +22,21 @@ WARNING: 0:139: 'switch' : last case/default label not followed by statements
|
||||
Name 17 "v1"
|
||||
Name 18 "v2"
|
||||
Name 19 "i1"
|
||||
Name 66 "local"
|
||||
Name 68 "c"
|
||||
Name 79 "f"
|
||||
Name 81 "x"
|
||||
Name 135 "d"
|
||||
Name 161 "i"
|
||||
Name 181 "j"
|
||||
Name 233 "color"
|
||||
Name 239 "v"
|
||||
Name 240 "param"
|
||||
Name 242 "param"
|
||||
Name 244 "param"
|
||||
Name 252 "param"
|
||||
Name 254 "param"
|
||||
Name 256 "param"
|
||||
Name 60 "local"
|
||||
Name 62 "c"
|
||||
Name 73 "f"
|
||||
Name 75 "x"
|
||||
Name 129 "d"
|
||||
Name 155 "i"
|
||||
Name 175 "j"
|
||||
Name 227 "color"
|
||||
Name 233 "v"
|
||||
Name 234 "param"
|
||||
Name 236 "param"
|
||||
Name 238 "param"
|
||||
Name 246 "param"
|
||||
Name 248 "param"
|
||||
Name 250 "param"
|
||||
Decorate 15(foo1(vf4;vf4;i1;) RelaxedPrecision
|
||||
Decorate 12(v1) RelaxedPrecision
|
||||
Decorate 13(v2) RelaxedPrecision
|
||||
@ -51,142 +51,136 @@ WARNING: 0:139: 'switch' : last case/default label not followed by statements
|
||||
Decorate 31 RelaxedPrecision
|
||||
Decorate 32 RelaxedPrecision
|
||||
Decorate 33 RelaxedPrecision
|
||||
Decorate 38 RelaxedPrecision
|
||||
Decorate 39 RelaxedPrecision
|
||||
Decorate 42 RelaxedPrecision
|
||||
Decorate 48 RelaxedPrecision
|
||||
Decorate 52 RelaxedPrecision
|
||||
Decorate 40 RelaxedPrecision
|
||||
Decorate 46 RelaxedPrecision
|
||||
Decorate 51 RelaxedPrecision
|
||||
Decorate 53 RelaxedPrecision
|
||||
Decorate 54 RelaxedPrecision
|
||||
Decorate 55 RelaxedPrecision
|
||||
Decorate 57 RelaxedPrecision
|
||||
Decorate 58 RelaxedPrecision
|
||||
Decorate 59 RelaxedPrecision
|
||||
Decorate 62 RelaxedPrecision
|
||||
Decorate 60(local) RelaxedPrecision
|
||||
Decorate 62(c) RelaxedPrecision
|
||||
Decorate 62(c) Flat
|
||||
Decorate 62(c) Location 0
|
||||
Decorate 63 RelaxedPrecision
|
||||
Decorate 66(local) RelaxedPrecision
|
||||
Decorate 68(c) RelaxedPrecision
|
||||
Decorate 68(c) Flat
|
||||
Decorate 68(c) Location 0
|
||||
Decorate 69 RelaxedPrecision
|
||||
Decorate 70 RelaxedPrecision
|
||||
Decorate 72 RelaxedPrecision
|
||||
Decorate 73 RelaxedPrecision
|
||||
Decorate 79(f) RelaxedPrecision
|
||||
Decorate 81(x) RelaxedPrecision
|
||||
Decorate 81(x) Location 2
|
||||
Decorate 64 RelaxedPrecision
|
||||
Decorate 66 RelaxedPrecision
|
||||
Decorate 67 RelaxedPrecision
|
||||
Decorate 73(f) RelaxedPrecision
|
||||
Decorate 75(x) RelaxedPrecision
|
||||
Decorate 75(x) Location 2
|
||||
Decorate 76 RelaxedPrecision
|
||||
Decorate 77 RelaxedPrecision
|
||||
Decorate 79 RelaxedPrecision
|
||||
Decorate 80 RelaxedPrecision
|
||||
Decorate 82 RelaxedPrecision
|
||||
Decorate 83 RelaxedPrecision
|
||||
Decorate 85 RelaxedPrecision
|
||||
Decorate 86 RelaxedPrecision
|
||||
Decorate 88 RelaxedPrecision
|
||||
Decorate 89 RelaxedPrecision
|
||||
Decorate 90 RelaxedPrecision
|
||||
Decorate 91 RelaxedPrecision
|
||||
Decorate 92 RelaxedPrecision
|
||||
Decorate 93 RelaxedPrecision
|
||||
Decorate 94 RelaxedPrecision
|
||||
Decorate 95 RelaxedPrecision
|
||||
Decorate 96 RelaxedPrecision
|
||||
Decorate 97 RelaxedPrecision
|
||||
Decorate 98 RelaxedPrecision
|
||||
Decorate 99 RelaxedPrecision
|
||||
Decorate 100 RelaxedPrecision
|
||||
Decorate 101 RelaxedPrecision
|
||||
Decorate 102 RelaxedPrecision
|
||||
Decorate 103 RelaxedPrecision
|
||||
Decorate 105 RelaxedPrecision
|
||||
Decorate 106 RelaxedPrecision
|
||||
Decorate 107 RelaxedPrecision
|
||||
Decorate 104 RelaxedPrecision
|
||||
Decorate 108 RelaxedPrecision
|
||||
Decorate 109 RelaxedPrecision
|
||||
Decorate 110 RelaxedPrecision
|
||||
Decorate 111 RelaxedPrecision
|
||||
Decorate 113 RelaxedPrecision
|
||||
Decorate 114 RelaxedPrecision
|
||||
Decorate 115 RelaxedPrecision
|
||||
Decorate 116 RelaxedPrecision
|
||||
Decorate 117 RelaxedPrecision
|
||||
Decorate 119 RelaxedPrecision
|
||||
Decorate 120 RelaxedPrecision
|
||||
Decorate 121 RelaxedPrecision
|
||||
Decorate 122 RelaxedPrecision
|
||||
Decorate 124 RelaxedPrecision
|
||||
Decorate 125 RelaxedPrecision
|
||||
Decorate 126 RelaxedPrecision
|
||||
Decorate 127 RelaxedPrecision
|
||||
Decorate 129(d) RelaxedPrecision
|
||||
Decorate 129(d) Flat
|
||||
Decorate 129(d) Location 1
|
||||
Decorate 130 RelaxedPrecision
|
||||
Decorate 131 RelaxedPrecision
|
||||
Decorate 132 RelaxedPrecision
|
||||
Decorate 133 RelaxedPrecision
|
||||
Decorate 135(d) RelaxedPrecision
|
||||
Decorate 135(d) Flat
|
||||
Decorate 135(d) Location 1
|
||||
Decorate 134 RelaxedPrecision
|
||||
Decorate 135 RelaxedPrecision
|
||||
Decorate 136 RelaxedPrecision
|
||||
Decorate 137 RelaxedPrecision
|
||||
Decorate 138 RelaxedPrecision
|
||||
Decorate 139 RelaxedPrecision
|
||||
Decorate 140 RelaxedPrecision
|
||||
Decorate 141 RelaxedPrecision
|
||||
Decorate 142 RelaxedPrecision
|
||||
Decorate 143 RelaxedPrecision
|
||||
Decorate 144 RelaxedPrecision
|
||||
Decorate 145 RelaxedPrecision
|
||||
Decorate 146 RelaxedPrecision
|
||||
Decorate 148 RelaxedPrecision
|
||||
Decorate 149 RelaxedPrecision
|
||||
Decorate 150 RelaxedPrecision
|
||||
Decorate 151 RelaxedPrecision
|
||||
Decorate 152 RelaxedPrecision
|
||||
Decorate 156 RelaxedPrecision
|
||||
Decorate 157 RelaxedPrecision
|
||||
Decorate 158 RelaxedPrecision
|
||||
Decorate 159 RelaxedPrecision
|
||||
Decorate 161(i) RelaxedPrecision
|
||||
Decorate 168 RelaxedPrecision
|
||||
Decorate 153 RelaxedPrecision
|
||||
Decorate 155(i) RelaxedPrecision
|
||||
Decorate 162 RelaxedPrecision
|
||||
Decorate 166 RelaxedPrecision
|
||||
Decorate 171 RelaxedPrecision
|
||||
Decorate 172 RelaxedPrecision
|
||||
Decorate 177 RelaxedPrecision
|
||||
Decorate 178 RelaxedPrecision
|
||||
Decorate 179 RelaxedPrecision
|
||||
Decorate 180 RelaxedPrecision
|
||||
Decorate 181(j) RelaxedPrecision
|
||||
Decorate 188 RelaxedPrecision
|
||||
Decorate 191 RelaxedPrecision
|
||||
Decorate 192 RelaxedPrecision
|
||||
Decorate 173 RelaxedPrecision
|
||||
Decorate 174 RelaxedPrecision
|
||||
Decorate 175(j) RelaxedPrecision
|
||||
Decorate 182 RelaxedPrecision
|
||||
Decorate 185 RelaxedPrecision
|
||||
Decorate 186 RelaxedPrecision
|
||||
Decorate 187 RelaxedPrecision
|
||||
Decorate 193 RelaxedPrecision
|
||||
Decorate 194 RelaxedPrecision
|
||||
Decorate 196 RelaxedPrecision
|
||||
Decorate 197 RelaxedPrecision
|
||||
Decorate 198 RelaxedPrecision
|
||||
Decorate 199 RelaxedPrecision
|
||||
Decorate 200 RelaxedPrecision
|
||||
Decorate 202 RelaxedPrecision
|
||||
Decorate 203 RelaxedPrecision
|
||||
Decorate 204 RelaxedPrecision
|
||||
Decorate 205 RelaxedPrecision
|
||||
Decorate 208 RelaxedPrecision
|
||||
Decorate 209 RelaxedPrecision
|
||||
Decorate 210 RelaxedPrecision
|
||||
Decorate 211 RelaxedPrecision
|
||||
Decorate 207 RelaxedPrecision
|
||||
Decorate 213 RelaxedPrecision
|
||||
Decorate 214 RelaxedPrecision
|
||||
Decorate 215 RelaxedPrecision
|
||||
Decorate 219 RelaxedPrecision
|
||||
Decorate 220 RelaxedPrecision
|
||||
Decorate 221 RelaxedPrecision
|
||||
Decorate 225 RelaxedPrecision
|
||||
Decorate 226 RelaxedPrecision
|
||||
Decorate 227 RelaxedPrecision
|
||||
Decorate 222 RelaxedPrecision
|
||||
Decorate 227(color) RelaxedPrecision
|
||||
Decorate 227(color) Location 0
|
||||
Decorate 228 RelaxedPrecision
|
||||
Decorate 233(color) RelaxedPrecision
|
||||
Decorate 233(color) Location 0
|
||||
Decorate 234 RelaxedPrecision
|
||||
Decorate 229 RelaxedPrecision
|
||||
Decorate 230 RelaxedPrecision
|
||||
Decorate 231 RelaxedPrecision
|
||||
Decorate 233(v) RelaxedPrecision
|
||||
Decorate 233(v) Location 3
|
||||
Decorate 234(param) RelaxedPrecision
|
||||
Decorate 235 RelaxedPrecision
|
||||
Decorate 236 RelaxedPrecision
|
||||
Decorate 236(param) RelaxedPrecision
|
||||
Decorate 237 RelaxedPrecision
|
||||
Decorate 239(v) RelaxedPrecision
|
||||
Decorate 239(v) Location 3
|
||||
Decorate 240(param) RelaxedPrecision
|
||||
Decorate 241 RelaxedPrecision
|
||||
Decorate 242(param) RelaxedPrecision
|
||||
Decorate 238(param) RelaxedPrecision
|
||||
Decorate 239 RelaxedPrecision
|
||||
Decorate 240 RelaxedPrecision
|
||||
Decorate 243 RelaxedPrecision
|
||||
Decorate 244(param) RelaxedPrecision
|
||||
Decorate 244 RelaxedPrecision
|
||||
Decorate 245 RelaxedPrecision
|
||||
Decorate 246 RelaxedPrecision
|
||||
Decorate 246(param) RelaxedPrecision
|
||||
Decorate 247 RelaxedPrecision
|
||||
Decorate 248(param) RelaxedPrecision
|
||||
Decorate 249 RelaxedPrecision
|
||||
Decorate 250 RelaxedPrecision
|
||||
Decorate 250(param) RelaxedPrecision
|
||||
Decorate 251 RelaxedPrecision
|
||||
Decorate 252(param) RelaxedPrecision
|
||||
Decorate 253 RelaxedPrecision
|
||||
Decorate 254(param) RelaxedPrecision
|
||||
Decorate 252 RelaxedPrecision
|
||||
Decorate 254 RelaxedPrecision
|
||||
Decorate 255 RelaxedPrecision
|
||||
Decorate 256(param) RelaxedPrecision
|
||||
Decorate 256 RelaxedPrecision
|
||||
Decorate 257 RelaxedPrecision
|
||||
Decorate 258 RelaxedPrecision
|
||||
Decorate 260 RelaxedPrecision
|
||||
Decorate 261 RelaxedPrecision
|
||||
Decorate 262 RelaxedPrecision
|
||||
Decorate 263 RelaxedPrecision
|
||||
Decorate 270 RelaxedPrecision
|
||||
Decorate 264 RelaxedPrecision
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeFloat 32
|
||||
@ -197,295 +191,295 @@ WARNING: 0:139: 'switch' : last case/default label not followed by statements
|
||||
11: TypeFunction 7(fvec4) 8(ptr) 8(ptr) 10(ptr)
|
||||
36: 6(float) Constant 0
|
||||
37: 7(fvec4) ConstantComposite 36 36 36 36
|
||||
50: 6(float) Constant 1065353216
|
||||
51: 7(fvec4) ConstantComposite 50 50 50 50
|
||||
67: TypePointer Input 9(int)
|
||||
68(c): 67(ptr) Variable Input
|
||||
71: 9(int) Constant 1
|
||||
78: TypePointer Function 6(float)
|
||||
80: TypePointer Input 6(float)
|
||||
81(x): 80(ptr) Variable Input
|
||||
135(d): 67(ptr) Variable Input
|
||||
162: 9(int) Constant 0
|
||||
169: 9(int) Constant 10
|
||||
170: TypeBool
|
||||
182: 9(int) Constant 20
|
||||
189: 9(int) Constant 30
|
||||
194: 6(float) Constant 1120429670
|
||||
214: 6(float) Constant 1079739679
|
||||
232: TypePointer Output 6(float)
|
||||
233(color): 232(ptr) Variable Output
|
||||
238: TypePointer Input 7(fvec4)
|
||||
239(v): 238(ptr) Variable Input
|
||||
247: TypeInt 32 0
|
||||
248: 247(int) Constant 1
|
||||
259: 247(int) Constant 2
|
||||
48: 6(float) Constant 1065353216
|
||||
49: 7(fvec4) ConstantComposite 48 48 48 48
|
||||
61: TypePointer Input 9(int)
|
||||
62(c): 61(ptr) Variable Input
|
||||
65: 9(int) Constant 1
|
||||
72: TypePointer Function 6(float)
|
||||
74: TypePointer Input 6(float)
|
||||
75(x): 74(ptr) Variable Input
|
||||
129(d): 61(ptr) Variable Input
|
||||
156: 9(int) Constant 0
|
||||
163: 9(int) Constant 10
|
||||
164: TypeBool
|
||||
176: 9(int) Constant 20
|
||||
183: 9(int) Constant 30
|
||||
188: 6(float) Constant 1120429670
|
||||
208: 6(float) Constant 1079739679
|
||||
226: TypePointer Output 6(float)
|
||||
227(color): 226(ptr) Variable Output
|
||||
232: TypePointer Input 7(fvec4)
|
||||
233(v): 232(ptr) Variable Input
|
||||
241: TypeInt 32 0
|
||||
242: 241(int) Constant 1
|
||||
253: 241(int) Constant 2
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
66(local): 10(ptr) Variable Function
|
||||
79(f): 78(ptr) Variable Function
|
||||
161(i): 10(ptr) Variable Function
|
||||
181(j): 10(ptr) Variable Function
|
||||
240(param): 8(ptr) Variable Function
|
||||
242(param): 8(ptr) Variable Function
|
||||
244(param): 10(ptr) Variable Function
|
||||
252(param): 8(ptr) Variable Function
|
||||
254(param): 8(ptr) Variable Function
|
||||
256(param): 10(ptr) Variable Function
|
||||
69: 9(int) Load 68(c)
|
||||
Store 66(local) 69
|
||||
70: 9(int) Load 66(local)
|
||||
72: 9(int) IAdd 70 71
|
||||
Store 66(local) 72
|
||||
73: 9(int) Load 68(c)
|
||||
SelectionMerge 77 None
|
||||
Switch 73 76
|
||||
case 1: 74
|
||||
case 2: 75
|
||||
76: Label
|
||||
88: 6(float) Load 81(x)
|
||||
89: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 88
|
||||
Store 79(f) 89
|
||||
Branch 77
|
||||
74: Label
|
||||
82: 6(float) Load 81(x)
|
||||
83: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 82
|
||||
Store 79(f) 83
|
||||
Branch 77
|
||||
75: Label
|
||||
85: 6(float) Load 81(x)
|
||||
86: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 85
|
||||
Store 79(f) 86
|
||||
Branch 77
|
||||
77: Label
|
||||
91: 9(int) Load 68(c)
|
||||
SelectionMerge 95 None
|
||||
Switch 91 94
|
||||
case 1: 92
|
||||
case 2: 93
|
||||
94: Label
|
||||
105: 6(float) Load 81(x)
|
||||
106: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 105
|
||||
107: 6(float) Load 79(f)
|
||||
108: 6(float) FAdd 107 106
|
||||
Store 79(f) 108
|
||||
Branch 95
|
||||
92: Label
|
||||
96: 6(float) Load 81(x)
|
||||
97: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 96
|
||||
98: 6(float) Load 79(f)
|
||||
99: 6(float) FAdd 98 97
|
||||
Store 79(f) 99
|
||||
Branch 93
|
||||
93: Label
|
||||
100: 6(float) Load 81(x)
|
||||
101: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 100
|
||||
102: 6(float) Load 79(f)
|
||||
103: 6(float) FAdd 102 101
|
||||
Store 79(f) 103
|
||||
Branch 95
|
||||
95: Label
|
||||
110: 9(int) Load 68(c)
|
||||
SelectionMerge 113 None
|
||||
Switch 110 113
|
||||
case 1: 111
|
||||
case 2: 112
|
||||
111: Label
|
||||
114: 6(float) Load 81(x)
|
||||
115: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 114
|
||||
116: 6(float) Load 79(f)
|
||||
117: 6(float) FAdd 116 115
|
||||
Store 79(f) 117
|
||||
Branch 113
|
||||
112: Label
|
||||
119: 6(float) Load 81(x)
|
||||
120: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 119
|
||||
121: 6(float) Load 79(f)
|
||||
122: 6(float) FAdd 121 120
|
||||
Store 79(f) 122
|
||||
Branch 113
|
||||
113: Label
|
||||
125: 9(int) Load 68(c)
|
||||
SelectionMerge 129 None
|
||||
Switch 125 128
|
||||
case 1: 126
|
||||
case 2: 127
|
||||
128: Label
|
||||
156: 6(float) Load 81(x)
|
||||
157: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 156
|
||||
158: 6(float) Load 79(f)
|
||||
159: 6(float) FAdd 158 157
|
||||
Store 79(f) 159
|
||||
Branch 129
|
||||
126: Label
|
||||
130: 6(float) Load 81(x)
|
||||
131: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 130
|
||||
132: 6(float) Load 79(f)
|
||||
133: 6(float) FAdd 132 131
|
||||
Store 79(f) 133
|
||||
Branch 129
|
||||
127: Label
|
||||
136: 9(int) Load 135(d)
|
||||
SelectionMerge 139 None
|
||||
Switch 136 139
|
||||
case 1: 137
|
||||
case 2: 138
|
||||
137: Label
|
||||
140: 6(float) Load 81(x)
|
||||
141: 6(float) Load 81(x)
|
||||
142: 6(float) FMul 140 141
|
||||
143: 6(float) Load 81(x)
|
||||
60(local): 10(ptr) Variable Function
|
||||
73(f): 72(ptr) Variable Function
|
||||
155(i): 10(ptr) Variable Function
|
||||
175(j): 10(ptr) Variable Function
|
||||
234(param): 8(ptr) Variable Function
|
||||
236(param): 8(ptr) Variable Function
|
||||
238(param): 10(ptr) Variable Function
|
||||
246(param): 8(ptr) Variable Function
|
||||
248(param): 8(ptr) Variable Function
|
||||
250(param): 10(ptr) Variable Function
|
||||
63: 9(int) Load 62(c)
|
||||
Store 60(local) 63
|
||||
64: 9(int) Load 60(local)
|
||||
66: 9(int) IAdd 64 65
|
||||
Store 60(local) 66
|
||||
67: 9(int) Load 62(c)
|
||||
SelectionMerge 71 None
|
||||
Switch 67 70
|
||||
case 1: 68
|
||||
case 2: 69
|
||||
70: Label
|
||||
82: 6(float) Load 75(x)
|
||||
83: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 82
|
||||
Store 73(f) 83
|
||||
Branch 71
|
||||
68: Label
|
||||
76: 6(float) Load 75(x)
|
||||
77: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 76
|
||||
Store 73(f) 77
|
||||
Branch 71
|
||||
69: Label
|
||||
79: 6(float) Load 75(x)
|
||||
80: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 79
|
||||
Store 73(f) 80
|
||||
Branch 71
|
||||
71: Label
|
||||
85: 9(int) Load 62(c)
|
||||
SelectionMerge 89 None
|
||||
Switch 85 88
|
||||
case 1: 86
|
||||
case 2: 87
|
||||
88: Label
|
||||
99: 6(float) Load 75(x)
|
||||
100: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 99
|
||||
101: 6(float) Load 73(f)
|
||||
102: 6(float) FAdd 101 100
|
||||
Store 73(f) 102
|
||||
Branch 89
|
||||
86: Label
|
||||
90: 6(float) Load 75(x)
|
||||
91: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 90
|
||||
92: 6(float) Load 73(f)
|
||||
93: 6(float) FAdd 92 91
|
||||
Store 73(f) 93
|
||||
Branch 87
|
||||
87: Label
|
||||
94: 6(float) Load 75(x)
|
||||
95: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 94
|
||||
96: 6(float) Load 73(f)
|
||||
97: 6(float) FAdd 96 95
|
||||
Store 73(f) 97
|
||||
Branch 89
|
||||
89: Label
|
||||
104: 9(int) Load 62(c)
|
||||
SelectionMerge 107 None
|
||||
Switch 104 107
|
||||
case 1: 105
|
||||
case 2: 106
|
||||
105: Label
|
||||
108: 6(float) Load 75(x)
|
||||
109: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 108
|
||||
110: 6(float) Load 73(f)
|
||||
111: 6(float) FAdd 110 109
|
||||
Store 73(f) 111
|
||||
Branch 107
|
||||
106: Label
|
||||
113: 6(float) Load 75(x)
|
||||
114: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 113
|
||||
115: 6(float) Load 73(f)
|
||||
116: 6(float) FAdd 115 114
|
||||
Store 73(f) 116
|
||||
Branch 107
|
||||
107: Label
|
||||
119: 9(int) Load 62(c)
|
||||
SelectionMerge 123 None
|
||||
Switch 119 122
|
||||
case 1: 120
|
||||
case 2: 121
|
||||
122: Label
|
||||
150: 6(float) Load 75(x)
|
||||
151: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 150
|
||||
152: 6(float) Load 73(f)
|
||||
153: 6(float) FAdd 152 151
|
||||
Store 73(f) 153
|
||||
Branch 123
|
||||
120: Label
|
||||
124: 6(float) Load 75(x)
|
||||
125: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 124
|
||||
126: 6(float) Load 73(f)
|
||||
127: 6(float) FAdd 126 125
|
||||
Store 73(f) 127
|
||||
Branch 123
|
||||
121: Label
|
||||
130: 9(int) Load 129(d)
|
||||
SelectionMerge 133 None
|
||||
Switch 130 133
|
||||
case 1: 131
|
||||
case 2: 132
|
||||
131: Label
|
||||
134: 6(float) Load 75(x)
|
||||
135: 6(float) Load 75(x)
|
||||
136: 6(float) FMul 134 135
|
||||
137: 6(float) Load 75(x)
|
||||
138: 6(float) FMul 136 137
|
||||
139: 6(float) Load 73(f)
|
||||
140: 6(float) FAdd 139 138
|
||||
Store 73(f) 140
|
||||
Branch 133
|
||||
132: Label
|
||||
142: 6(float) Load 75(x)
|
||||
143: 6(float) Load 75(x)
|
||||
144: 6(float) FMul 142 143
|
||||
145: 6(float) Load 79(f)
|
||||
145: 6(float) Load 73(f)
|
||||
146: 6(float) FAdd 145 144
|
||||
Store 79(f) 146
|
||||
Branch 139
|
||||
138: Label
|
||||
148: 6(float) Load 81(x)
|
||||
149: 6(float) Load 81(x)
|
||||
150: 6(float) FMul 148 149
|
||||
151: 6(float) Load 79(f)
|
||||
152: 6(float) FAdd 151 150
|
||||
Store 79(f) 152
|
||||
Branch 139
|
||||
139: Label
|
||||
Branch 129
|
||||
129: Label
|
||||
Store 161(i) 162
|
||||
Branch 163
|
||||
163: Label
|
||||
LoopMerge 165 166 None
|
||||
Branch 167
|
||||
167: Label
|
||||
168: 9(int) Load 161(i)
|
||||
171: 170(bool) SLessThan 168 169
|
||||
BranchConditional 171 164 165
|
||||
164: Label
|
||||
172: 9(int) Load 68(c)
|
||||
SelectionMerge 176 None
|
||||
Switch 172 175
|
||||
case 1: 173
|
||||
case 2: 174
|
||||
175: Label
|
||||
208: 6(float) Load 81(x)
|
||||
209: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 208
|
||||
210: 6(float) Load 79(f)
|
||||
211: 6(float) FAdd 210 209
|
||||
Store 79(f) 211
|
||||
Branch 176
|
||||
173: Label
|
||||
177: 6(float) Load 81(x)
|
||||
178: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 177
|
||||
179: 6(float) Load 79(f)
|
||||
180: 6(float) FAdd 179 178
|
||||
Store 79(f) 180
|
||||
Store 181(j) 182
|
||||
Branch 183
|
||||
183: Label
|
||||
LoopMerge 185 186 None
|
||||
Branch 187
|
||||
187: Label
|
||||
188: 9(int) Load 181(j)
|
||||
190: 170(bool) SLessThan 188 189
|
||||
BranchConditional 190 184 185
|
||||
184: Label
|
||||
191: 6(float) Load 79(f)
|
||||
192: 6(float) FAdd 191 50
|
||||
Store 79(f) 192
|
||||
193: 6(float) Load 79(f)
|
||||
195: 170(bool) FOrdLessThan 193 194
|
||||
SelectionMerge 197 None
|
||||
BranchConditional 195 196 197
|
||||
196: Label
|
||||
Branch 185
|
||||
197: Label
|
||||
Branch 186
|
||||
186: Label
|
||||
199: 9(int) Load 181(j)
|
||||
200: 9(int) IAdd 199 71
|
||||
Store 181(j) 200
|
||||
Branch 183
|
||||
185: Label
|
||||
Branch 176
|
||||
174: Label
|
||||
202: 6(float) Load 81(x)
|
||||
203: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 202
|
||||
204: 6(float) Load 79(f)
|
||||
Store 73(f) 146
|
||||
Branch 133
|
||||
133: Label
|
||||
Branch 123
|
||||
123: Label
|
||||
Store 155(i) 156
|
||||
Branch 157
|
||||
157: Label
|
||||
LoopMerge 159 160 None
|
||||
Branch 161
|
||||
161: Label
|
||||
162: 9(int) Load 155(i)
|
||||
165: 164(bool) SLessThan 162 163
|
||||
BranchConditional 165 158 159
|
||||
158: Label
|
||||
166: 9(int) Load 62(c)
|
||||
SelectionMerge 170 None
|
||||
Switch 166 169
|
||||
case 1: 167
|
||||
case 2: 168
|
||||
169: Label
|
||||
202: 6(float) Load 75(x)
|
||||
203: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 202
|
||||
204: 6(float) Load 73(f)
|
||||
205: 6(float) FAdd 204 203
|
||||
Store 79(f) 205
|
||||
Branch 176
|
||||
176: Label
|
||||
213: 6(float) Load 79(f)
|
||||
215: 170(bool) FOrdLessThan 213 214
|
||||
SelectionMerge 217 None
|
||||
BranchConditional 215 216 217
|
||||
216: Label
|
||||
Branch 165
|
||||
Store 73(f) 205
|
||||
Branch 170
|
||||
167: Label
|
||||
171: 6(float) Load 75(x)
|
||||
172: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 171
|
||||
173: 6(float) Load 73(f)
|
||||
174: 6(float) FAdd 173 172
|
||||
Store 73(f) 174
|
||||
Store 175(j) 176
|
||||
Branch 177
|
||||
177: Label
|
||||
LoopMerge 179 180 None
|
||||
Branch 181
|
||||
181: Label
|
||||
182: 9(int) Load 175(j)
|
||||
184: 164(bool) SLessThan 182 183
|
||||
BranchConditional 184 178 179
|
||||
178: Label
|
||||
185: 6(float) Load 73(f)
|
||||
186: 6(float) FAdd 185 48
|
||||
Store 73(f) 186
|
||||
187: 6(float) Load 73(f)
|
||||
189: 164(bool) FOrdLessThan 187 188
|
||||
SelectionMerge 191 None
|
||||
BranchConditional 189 190 191
|
||||
190: Label
|
||||
Branch 179
|
||||
191: Label
|
||||
Branch 180
|
||||
180: Label
|
||||
193: 9(int) Load 175(j)
|
||||
194: 9(int) IAdd 193 65
|
||||
Store 175(j) 194
|
||||
Branch 177
|
||||
179: Label
|
||||
Branch 170
|
||||
168: Label
|
||||
196: 6(float) Load 75(x)
|
||||
197: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 196
|
||||
198: 6(float) Load 73(f)
|
||||
199: 6(float) FAdd 198 197
|
||||
Store 73(f) 199
|
||||
Branch 170
|
||||
170: Label
|
||||
207: 6(float) Load 73(f)
|
||||
209: 164(bool) FOrdLessThan 207 208
|
||||
SelectionMerge 211 None
|
||||
BranchConditional 209 210 211
|
||||
210: Label
|
||||
Branch 159
|
||||
211: Label
|
||||
Branch 160
|
||||
160: Label
|
||||
213: 9(int) Load 155(i)
|
||||
214: 9(int) IAdd 213 65
|
||||
Store 155(i) 214
|
||||
Branch 157
|
||||
159: Label
|
||||
215: 9(int) Load 62(c)
|
||||
SelectionMerge 218 None
|
||||
Switch 215 218
|
||||
case 1: 216
|
||||
case 2: 217
|
||||
216: Label
|
||||
219: 6(float) Load 75(x)
|
||||
220: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 219
|
||||
221: 6(float) Load 73(f)
|
||||
222: 6(float) FAdd 221 220
|
||||
Store 73(f) 222
|
||||
Branch 218
|
||||
217: Label
|
||||
Branch 166
|
||||
166: Label
|
||||
219: 9(int) Load 161(i)
|
||||
220: 9(int) IAdd 219 71
|
||||
Store 161(i) 220
|
||||
Branch 163
|
||||
165: Label
|
||||
221: 9(int) Load 68(c)
|
||||
SelectionMerge 224 None
|
||||
Switch 221 224
|
||||
case 1: 222
|
||||
case 2: 223
|
||||
222: Label
|
||||
225: 6(float) Load 81(x)
|
||||
226: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 225
|
||||
227: 6(float) Load 79(f)
|
||||
228: 6(float) FAdd 227 226
|
||||
Store 79(f) 228
|
||||
Branch 224
|
||||
223: Label
|
||||
Branch 224
|
||||
224: Label
|
||||
234: 6(float) Load 79(f)
|
||||
235: 9(int) Load 66(local)
|
||||
236: 6(float) ConvertSToF 235
|
||||
237: 6(float) FAdd 234 236
|
||||
Store 233(color) 237
|
||||
241: 7(fvec4) Load 239(v)
|
||||
Store 240(param) 241
|
||||
243: 7(fvec4) Load 239(v)
|
||||
Store 242(param) 243
|
||||
245: 9(int) Load 68(c)
|
||||
Store 244(param) 245
|
||||
246: 7(fvec4) FunctionCall 15(foo1(vf4;vf4;i1;) 240(param) 242(param) 244(param)
|
||||
249: 6(float) CompositeExtract 246 1
|
||||
250: 6(float) Load 233(color)
|
||||
251: 6(float) FAdd 250 249
|
||||
Store 233(color) 251
|
||||
253: 7(fvec4) Load 239(v)
|
||||
Store 252(param) 253
|
||||
255: 7(fvec4) Load 239(v)
|
||||
Store 254(param) 255
|
||||
257: 9(int) Load 68(c)
|
||||
Store 256(param) 257
|
||||
258: 7(fvec4) FunctionCall 20(foo2(vf4;vf4;i1;) 252(param) 254(param) 256(param)
|
||||
260: 6(float) CompositeExtract 258 2
|
||||
261: 6(float) Load 233(color)
|
||||
262: 6(float) FAdd 261 260
|
||||
Store 233(color) 262
|
||||
263: 9(int) Load 68(c)
|
||||
Branch 218
|
||||
218: Label
|
||||
228: 6(float) Load 73(f)
|
||||
229: 9(int) Load 60(local)
|
||||
230: 6(float) ConvertSToF 229
|
||||
231: 6(float) FAdd 228 230
|
||||
Store 227(color) 231
|
||||
235: 7(fvec4) Load 233(v)
|
||||
Store 234(param) 235
|
||||
237: 7(fvec4) Load 233(v)
|
||||
Store 236(param) 237
|
||||
239: 9(int) Load 62(c)
|
||||
Store 238(param) 239
|
||||
240: 7(fvec4) FunctionCall 15(foo1(vf4;vf4;i1;) 234(param) 236(param) 238(param)
|
||||
243: 6(float) CompositeExtract 240 1
|
||||
244: 6(float) Load 227(color)
|
||||
245: 6(float) FAdd 244 243
|
||||
Store 227(color) 245
|
||||
247: 7(fvec4) Load 233(v)
|
||||
Store 246(param) 247
|
||||
249: 7(fvec4) Load 233(v)
|
||||
Store 248(param) 249
|
||||
251: 9(int) Load 62(c)
|
||||
Store 250(param) 251
|
||||
252: 7(fvec4) FunctionCall 20(foo2(vf4;vf4;i1;) 246(param) 248(param) 250(param)
|
||||
254: 6(float) CompositeExtract 252 2
|
||||
255: 6(float) Load 227(color)
|
||||
256: 6(float) FAdd 255 254
|
||||
Store 227(color) 256
|
||||
257: 9(int) Load 62(c)
|
||||
SelectionMerge 260 None
|
||||
Switch 257 259
|
||||
case 0: 258
|
||||
259: Label
|
||||
Branch 260
|
||||
258: Label
|
||||
Branch 260
|
||||
260: Label
|
||||
264: 9(int) Load 62(c)
|
||||
SelectionMerge 266 None
|
||||
Switch 263 265
|
||||
case 0: 264
|
||||
Switch 264 265
|
||||
265: Label
|
||||
Branch 266
|
||||
264: Label
|
||||
Branch 266
|
||||
266: Label
|
||||
270: 9(int) Load 68(c)
|
||||
SelectionMerge 272 None
|
||||
Switch 270 271
|
||||
271: Label
|
||||
Branch 272
|
||||
272: Label
|
||||
Return
|
||||
FunctionEnd
|
||||
15(foo1(vf4;vf4;i1;): 7(fvec4) Function None 11
|
||||
@ -493,7 +487,6 @@ WARNING: 0:139: 'switch' : last case/default label not followed by statements
|
||||
13(v2): 8(ptr) FunctionParameter
|
||||
14(i1): 10(ptr) FunctionParameter
|
||||
16: Label
|
||||
38: 8(ptr) Variable Function
|
||||
22: 9(int) Load 14(i1)
|
||||
SelectionMerge 26 None
|
||||
Switch 22 26
|
||||
@ -513,41 +506,33 @@ WARNING: 0:139: 'switch' : last case/default label not followed by statements
|
||||
33: 7(fvec4) FMul 31 32
|
||||
ReturnValue 33
|
||||
26: Label
|
||||
Store 38 37
|
||||
39: 7(fvec4) Load 38
|
||||
ReturnValue 39
|
||||
ReturnValue 37
|
||||
FunctionEnd
|
||||
20(foo2(vf4;vf4;i1;): 7(fvec4) Function None 11
|
||||
17(v1): 8(ptr) FunctionParameter
|
||||
18(v2): 8(ptr) FunctionParameter
|
||||
19(i1): 10(ptr) FunctionParameter
|
||||
21: Label
|
||||
52: 8(ptr) Variable Function
|
||||
62: 8(ptr) Variable Function
|
||||
42: 9(int) Load 19(i1)
|
||||
SelectionMerge 47 None
|
||||
Switch 42 47
|
||||
case 0: 43
|
||||
case 2: 44
|
||||
case 1: 45
|
||||
case 3: 46
|
||||
40: 9(int) Load 19(i1)
|
||||
SelectionMerge 45 None
|
||||
Switch 40 45
|
||||
case 0: 41
|
||||
case 2: 42
|
||||
case 1: 43
|
||||
case 3: 44
|
||||
41: Label
|
||||
46: 7(fvec4) Load 17(v1)
|
||||
ReturnValue 46
|
||||
42: Label
|
||||
ReturnValue 49
|
||||
43: Label
|
||||
48: 7(fvec4) Load 17(v1)
|
||||
ReturnValue 48
|
||||
51: 7(fvec4) Load 18(v2)
|
||||
ReturnValue 51
|
||||
44: Label
|
||||
Store 52 51
|
||||
53: 7(fvec4) Load 52
|
||||
ReturnValue 53
|
||||
45: Label
|
||||
55: 7(fvec4) Load 18(v2)
|
||||
53: 7(fvec4) Load 17(v1)
|
||||
54: 7(fvec4) Load 18(v2)
|
||||
55: 7(fvec4) FMul 53 54
|
||||
ReturnValue 55
|
||||
46: Label
|
||||
57: 7(fvec4) Load 17(v1)
|
||||
58: 7(fvec4) Load 18(v2)
|
||||
59: 7(fvec4) FMul 57 58
|
||||
ReturnValue 59
|
||||
47: Label
|
||||
Store 62 37
|
||||
63: 7(fvec4) Load 62
|
||||
ReturnValue 63
|
||||
45: Label
|
||||
ReturnValue 37
|
||||
FunctionEnd
|
||||
|
@ -1231,6 +1231,7 @@ public:
|
||||
TOperator getFlowOp() const { return flowOp; }
|
||||
TIntermTyped* getExpression() const { return expression; }
|
||||
void setExpression(TIntermTyped* pExpression) { expression = pExpression; }
|
||||
void updatePrecision(TPrecisionQualifier parentPrecision);
|
||||
protected:
|
||||
TOperator flowOp;
|
||||
TIntermTyped* expression;
|
||||
|
@ -2777,6 +2777,22 @@ TIntermBranch* TIntermediate::addBranch(TOperator branchOp, TIntermTyped* expres
|
||||
return node;
|
||||
}
|
||||
|
||||
// Propagate precision from formal function return type to actual return type,
|
||||
// and on to its subtree.
|
||||
void TIntermBranch::updatePrecision(TPrecisionQualifier parentPrecision)
|
||||
{
|
||||
TIntermTyped* exp = getExpression();
|
||||
if (exp == nullptr)
|
||||
return;
|
||||
|
||||
if (exp->getBasicType() == EbtInt || exp->getBasicType() == EbtUint ||
|
||||
exp->getBasicType() == EbtFloat || exp->getBasicType() == EbtFloat16) {
|
||||
if (parentPrecision != EpqNone && exp->getQualifier().precision == EpqNone) {
|
||||
exp->propagatePrecision(parentPrecision);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// This is to be executed after the final root is put on top by the parsing
|
||||
// process.
|
||||
@ -3284,9 +3300,11 @@ bool TIntermediate::promoteUnary(TIntermUnary& node)
|
||||
return true;
|
||||
}
|
||||
|
||||
// Propagate precision qualifiers *up* from children to parent.
|
||||
void TIntermUnary::updatePrecision()
|
||||
{
|
||||
if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
|
||||
if (getBasicType() == EbtInt || getBasicType() == EbtUint ||
|
||||
getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
|
||||
if (operand->getQualifier().precision > getQualifier().precision)
|
||||
getQualifier().precision = operand->getQualifier().precision;
|
||||
}
|
||||
@ -3782,9 +3800,12 @@ bool TIntermediate::promoteAggregate(TIntermAggregate& node)
|
||||
return false;
|
||||
}
|
||||
|
||||
// Propagate precision qualifiers *up* from children to parent, and then
|
||||
// back *down* again to the children's subtrees.
|
||||
void TIntermBinary::updatePrecision()
|
||||
{
|
||||
if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
|
||||
if (getBasicType() == EbtInt || getBasicType() == EbtUint ||
|
||||
getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
|
||||
getQualifier().precision = std::max(right->getQualifier().precision, left->getQualifier().precision);
|
||||
if (getQualifier().precision != EpqNone) {
|
||||
left->propagatePrecision(getQualifier().precision);
|
||||
@ -3793,9 +3814,14 @@ void TIntermBinary::updatePrecision()
|
||||
}
|
||||
}
|
||||
|
||||
// Recursively propagate precision qualifiers *down* the subtree of the current node,
|
||||
// until reaching a node that already has a precision qualifier or otherwise does
|
||||
// not participate in precision propagation.
|
||||
void TIntermTyped::propagatePrecision(TPrecisionQualifier newPrecision)
|
||||
{
|
||||
if (getQualifier().precision != EpqNone || (getBasicType() != EbtInt && getBasicType() != EbtUint && getBasicType() != EbtFloat && getBasicType() != EbtFloat16))
|
||||
if (getQualifier().precision != EpqNone ||
|
||||
(getBasicType() != EbtInt && getBasicType() != EbtUint &&
|
||||
getBasicType() != EbtFloat && getBasicType() != EbtFloat16))
|
||||
return;
|
||||
|
||||
getQualifier().precision = newPrecision;
|
||||
|
@ -1415,23 +1415,28 @@ TIntermNode* TParseContext::handleReturnValue(const TSourceLoc& loc, TIntermType
|
||||
#endif
|
||||
|
||||
functionReturnsValue = true;
|
||||
TIntermBranch* branch = nullptr;
|
||||
if (currentFunctionType->getBasicType() == EbtVoid) {
|
||||
error(loc, "void function cannot return a value", "return", "");
|
||||
return intermediate.addBranch(EOpReturn, loc);
|
||||
branch = intermediate.addBranch(EOpReturn, loc);
|
||||
} else if (*currentFunctionType != value->getType()) {
|
||||
TIntermTyped* converted = intermediate.addConversion(EOpReturn, *currentFunctionType, value);
|
||||
if (converted) {
|
||||
if (*currentFunctionType != converted->getType())
|
||||
error(loc, "cannot convert return value to function return type", "return", "");
|
||||
if (version < 420)
|
||||
warn(loc, "type conversion on return values was not explicitly allowed until version 420", "return", "");
|
||||
return intermediate.addBranch(EOpReturn, converted, loc);
|
||||
warn(loc, "type conversion on return values was not explicitly allowed until version 420",
|
||||
"return", "");
|
||||
branch = intermediate.addBranch(EOpReturn, converted, loc);
|
||||
} else {
|
||||
error(loc, "type does not match, or is not convertible to, the function's return type", "return", "");
|
||||
return intermediate.addBranch(EOpReturn, value, loc);
|
||||
branch = intermediate.addBranch(EOpReturn, value, loc);
|
||||
}
|
||||
} else
|
||||
return intermediate.addBranch(EOpReturn, value, loc);
|
||||
branch = intermediate.addBranch(EOpReturn, value, loc);
|
||||
|
||||
branch->updatePrecision(currentFunctionType->getQualifier().precision);
|
||||
return branch;
|
||||
}
|
||||
|
||||
// See if the operation is being done in an illegal location.
|
||||
|
Loading…
x
Reference in New Issue
Block a user