| #version 450 | |
| struct S { | |
| int a; | |
| }; | |
| uniform ubuf { | |
| S s; | |
| }; | |
| uniform sampler2D s2d; | |
| layout(location = 0) in vec4 inv; | |
| layout(location = 0) out vec4 outv; | |
| vec4 foo(S s) | |
| { | |
| vec4 r = s.a * inv; | |
| ++r; | |
| if (r.x > 3.0) | |
| --r; | |
| else | |
| r *= 2; | |
| return r; | |
| } | |
| float testBranch(float x, float y) | |
| { | |
| float result = 0; | |
| bool b = x > 0; | |
| // branch with load | |
| if (b) { | |
| result += 1; | |
| } | |
| else { | |
| result -= 1; | |
| } | |
| // branch with expression | |
| if (x > y) { | |
| result += x - y; | |
| } | |
| // selection with load | |
| result += b ? | |
| 1 : -1; | |
| // selection with expression | |
| result += x < y ? | |
| y : | |
| float(b); | |
| return result; | |
| } | |
| void main() | |
| { | |
| outv = foo(s); | |
| outv += testBranch(inv.x, inv.y); | |
| outv += texture(s2d, vec2(0.5)); | |
| switch (s.a) { | |
| case 10: | |
| ++outv; | |
| break; | |
| case 20: | |
| outv = 2 * outv; | |
| ++outv; | |
| break; | |
| default: | |
| --outv; | |
| break; | |
| } | |
| for (int i = 0; i < 10; ++i) | |
| outv *= 3.0; | |
| outv.x < 10.0 ? | |
| outv = sin(outv) : | |
| outv = cos(outv); | |
| } |