#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); | |
} |