summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/cell/spu
diff options
context:
space:
mode:
authorMichal Krol <michal@tungstengraphics.com>2008-08-13 11:10:58 +0200
committerMichal Krol <michal@tungstengraphics.com>2008-08-13 11:10:58 +0200
commite8e75c8c865bb5bbff9db2682b130c8d147f3a38 (patch)
tree7ed162e89d40da3c257e06a02b831c406087dea4 /src/gallium/drivers/cell/spu
parentf0874d1a6b832e1bb29256661cb8beab3ddeb528 (diff)
cell: KILP is a predicated discard, KIL is a conditional discard.
Diffstat (limited to 'src/gallium/drivers/cell/spu')
-rw-r--r--src/gallium/drivers/cell/spu/spu_exec.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/gallium/drivers/cell/spu/spu_exec.c b/src/gallium/drivers/cell/spu/spu_exec.c
index 96393732ed..42e5022f30 100644
--- a/src/gallium/drivers/cell/spu/spu_exec.c
+++ b/src/gallium/drivers/cell/spu/spu_exec.c
@@ -603,8 +603,8 @@ store_dest(
* Kill fragment if any of the four values is less than zero.
*/
static void
-exec_kilp(struct spu_exec_machine *mach,
- const struct tgsi_full_instruction *inst)
+exec_kil(struct spu_exec_machine *mach,
+ const struct tgsi_full_instruction *inst)
{
uint uniquemask;
uint chan_index;
@@ -640,6 +640,20 @@ exec_kilp(struct spu_exec_machine *mach,
mach->Temps[TEMP_KILMASK_I].xyzw[TEMP_KILMASK_C].u[0] |= kilmask;
}
+/**
+ * Execute NVIDIA-style KIL which is predicated by a condition code.
+ * Kill fragment if the condition code is TRUE.
+ */
+static void
+exec_kilp(struct tgsi_exec_machine *mach,
+ const struct tgsi_full_instruction *inst)
+{
+ uint kilmask = 0; /* bit 0 = pixel 0, bit 1 = pixel 1, etc */
+
+ /* TODO: build kilmask from CC mask */
+
+ mach->Temps[TEMP_KILMASK_I].xyzw[TEMP_KILMASK_C].u[0] |= kilmask;
+}
/*
* Fetch a texel using STR texture coordinates.
@@ -1336,8 +1350,7 @@ exec_instruction(
break;
case TGSI_OPCODE_KIL:
- /* for enabled ExecMask bits, set the killed bit */
- mach->Temps[TEMP_KILMASK_I].xyzw[TEMP_KILMASK_C].u[0] |= mach->ExecMask;
+ exec_kil (mach, inst);
break;
case TGSI_OPCODE_PK2H: