#version 300 es precision mediump float; uniform int c, d; in float x; out float color; uniform vec4 v; vec4 foo1(vec4 v1, vec4 v2, int i1) { switch (i1) { case 0: return v1; case 2: case 1: return v2; case 3: return v1 * v2; } return vec4(0.0); } vec4 foo2(vec4 v1, vec4 v2, int i1) { switch (i1) { case 0: return v1; case 2: return vec4(1.0); case 1: return v2; case 3: return v1 * v2; } return vec4(0.0); } void main() { float f; int a[2]; int local = c; switch(++local) { } switch (c) { case 1: f = sin(x); break; case 2: f = cos(x); break; default: f = tan(x); } switch (c) { case 1: f += sin(x); case 2: f += cos(x); break; default: f += tan(x); } switch (c) { case 1: f += sin(x); break; case 2: f += cos(x); break; } switch (c) { case 1: f += sin(x); break; case 2: switch (d) { case 1: f += x * x * x; break; case 2: f += x * x; break; } break; default: f += tan(x); } for (int i = 0; i < 10; ++i) { switch (c) { case 1: f += sin(x); for (int j = 20; j < 30; ++j) { ++f; if (f < 100.2) break; } break; case 2: f += cos(x); break; break; default: f += tan(x); } if (f < 3.43) break; } switch (c) { case 1: f += sin(x); break; case 2: // test no statements at end } color = f + float(local); color += foo1(v,v,c).y; color += foo2(v,v,c).z; }