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