Previously, when we had a switch statement with a uniform switch condition but a 'break' statement that was under varying control flow inside the switch, we'd promote the switch condition to be varying so that the break would work correctly. Now, we leave the condition as uniform and are thus able to use the more-efficient LLVM switch instruction in this case. Issue #156.
29 lines
549 B
Plaintext
29 lines
549 B
Plaintext
|
|
export uniform int width() { return programCount; }
|
|
|
|
int switchit(int a, uniform int b) {
|
|
int r = -1;
|
|
switch (b) {
|
|
case 5:
|
|
if (a & 1) {
|
|
r=3;
|
|
break;
|
|
}
|
|
r= 2;
|
|
break;
|
|
default:
|
|
r= 3;
|
|
}
|
|
return r;
|
|
}
|
|
|
|
export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) {
|
|
int a = aFOO[programIndex];
|
|
int x = switchit(a, b);
|
|
RET[programIndex] = x;
|
|
}
|
|
|
|
export void result(uniform float RET[]) {
|
|
RET[programIndex] = (programIndex & 1) ? 2 : 3;
|
|
}
|