Fix bug in &&/|| short-circuiting.

Use full mask, not internal mask when checking "any lanes running"
before evaluating expressions.

Added some more tests to try to cover this case.
This commit is contained in:
Matt Pharr
2012-02-01 08:17:25 -08:00
parent 0432f97555
commit fdb4eaf437
5 changed files with 117 additions and 8 deletions

View File

@@ -0,0 +1,25 @@
export uniform int width() { return programCount; }
uniform int * uniform ptr;
float foo(uniform float a[]) {
int index = (programIndex & 1) * 10000;
if (a[programIndex] < 10000 && a[index] == 1)
return 1;
else
return 1234;
}
export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) {
float a = aFOO[programIndex];
float a0 = aFOO[0], a1 = aFOO[1];
if ((programIndex & 1) == 0)
RET[programIndex] = foo(aFOO);
else
RET[programIndex] = 2;
}
export void result(uniform float RET[]) {
RET[programIndex] = (programIndex & 1) ? 2 : 1;
}