summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Paul <brian.paul@tungstengraphics.com>2008-08-13 17:20:40 -0600
committerBrian Paul <brian.paul@tungstengraphics.com>2008-08-13 17:26:58 -0600
commit19ff2326e94a7a773bcb1dd9bfd22197b999daf9 (patch)
treea7db14645ff85892bb32fd3683928ea2a5d58764
parentf3048ad90ed2e4583f0f7aaf35a0f4aa581942dd (diff)
gallium: fix exec_kilp(), fix Exec/FuncMask test for TGSI_OPCODE_RET
Fixes a few glean glsl regressions.
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_exec.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c
index df2a7cc4b3..a96209db1a 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
@@ -1234,10 +1234,13 @@ static void
exec_kilp(struct tgsi_exec_machine *mach,
const struct tgsi_full_instruction *inst)
{
+ uint kilmask; /* bit 0 = pixel 0, bit 1 = pixel 1, etc */
+
if (inst->InstructionExtNv.CondFlowEnable) {
uint swizzle[4];
uint chan_index;
- uint kilmask = 0; /* bit 0 = pixel 0, bit 1 = pixel 1, etc */
+
+ kilmask = 0x0;
swizzle[0] = inst->InstructionExtNv.CondSwizzleX;
swizzle[1] = inst->InstructionExtNv.CondSwizzleY;
@@ -1254,9 +1257,12 @@ exec_kilp(struct tgsi_exec_machine *mach,
kilmask |= 1 << i;
}
}
-
- mach->Temps[TEMP_KILMASK_I].xyzw[TEMP_KILMASK_C].u[0] |= kilmask;
}
+ else {
+ /* "unconditional" kil */
+ kilmask = mach->ExecMask;
+ }
+ mach->Temps[TEMP_KILMASK_I].xyzw[TEMP_KILMASK_C].u[0] |= kilmask;
}
@@ -2176,7 +2182,7 @@ exec_instruction(
mach->FuncMask &= ~mach->ExecMask;
UPDATE_EXEC_MASK(mach);
- if (mach->ExecMask == 0x0) {
+ if (mach->FuncMask == 0x0) {
/* really return now (otherwise, keep executing */
if (mach->CallStackTop == 0) {