tgsi: Swap meanings of KIL and KILP opcodes.
authorMichal Krol <michal@tungstengraphics.com>
Wed, 13 Aug 2008 09:09:20 +0000 (11:09 +0200)
committerMichal Krol <michal@tungstengraphics.com>
Wed, 13 Aug 2008 09:09:20 +0000 (11:09 +0200)
src/gallium/auxiliary/tgsi/tgsi_exec.c
src/gallium/auxiliary/tgsi/tgsi_sse2.c

index b93f3d5222a5c6a0789ae075629eb901b2271b4e..c4ba667d32a604322c221cdfd9da6be3c8404fb1 100644 (file)
@@ -1189,8 +1189,8 @@ store_dest(
  * Kill fragment if any of the four values is less than zero.
  */
 static void
-exec_kilp(struct tgsi_exec_machine *mach,
-          const struct tgsi_full_instruction *inst)
+exec_kil(struct tgsi_exec_machine *mach,
+         const struct tgsi_full_instruction *inst)
 {
    uint uniquemask;
    uint chan_index;
@@ -1226,6 +1226,21 @@ exec_kilp(struct tgsi_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.
@@ -1971,8 +1986,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:
index f3a202ae89e3959312c3d71615ee6168f1c73930..47dc06faf6d8242fd524ae6c3d8b754cd462e0e8 100644 (file)
@@ -1002,7 +1002,7 @@ emit_store(
  */
 
 static void
-emit_kilp(
+emit_kil(
    struct x86_function *func,
    const struct tgsi_full_src_register *reg )
 {
@@ -1098,7 +1098,7 @@ emit_kilp(
 
 
 static void
-emit_kil(
+emit_kilp(
    struct x86_function *func )
 {
    /* XXX todo / fix me */
@@ -1620,13 +1620,13 @@ emit_instruction(
 
    case TGSI_OPCODE_KILP:
       /* predicated kill */
-      emit_kilp( func, &inst->FullSrcRegisters[0] );
+      emit_kilp( func );
+      return 0; /* XXX fix me */
       break;
 
    case TGSI_OPCODE_KIL:
-      /* unconditional kill */
-      emit_kil( func );
-      return 0; /* XXX fix me */
+      /* conditional kill */
+      emit_kil( func, &inst->FullSrcRegisters[0] );
       break;
 
    case TGSI_OPCODE_PK2H: