Implement TGSI_OPCODE_SNE with micro_ne()
authorBrian <brian.paul@tungstengraphics.com>
Tue, 2 Oct 2007 23:13:06 +0000 (17:13 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Tue, 2 Oct 2007 23:13:06 +0000 (17:13 -0600)
src/mesa/pipe/tgsi/exec/tgsi_exec.c

index b88620d71df69ceb97b434a80155ccedb54bb85d..158abba270be302eb48f893ea72489c4b0f0bdc1 100644 (file)
@@ -698,6 +698,20 @@ micro_movc(
    dst->u[3] = src0->u[3] ? src1->u[3] : src2->u[3];
 }
 
+static void
+micro_ne(
+   union tgsi_exec_channel *dst,
+   const union tgsi_exec_channel *src0,
+   const union tgsi_exec_channel *src1,
+   const union tgsi_exec_channel *src2,
+   const union tgsi_exec_channel *src3 )
+{
+   dst->f[0] = src0->f[0] != src1->f[0] ? src2->f[0] : src3->f[0];
+   dst->f[1] = src0->f[1] != src1->f[1] ? src2->f[1] : src3->f[1];
+   dst->f[2] = src0->f[2] != src1->f[2] ? src2->f[2] : src3->f[2];
+   dst->f[3] = src0->f[3] != src1->f[3] ? src2->f[3] : src3->f[3];
+}
+
 static void
 micro_neg(
    union tgsi_exec_channel *dst,
@@ -1862,7 +1876,12 @@ exec_instruction(
       break;
 
    case TGSI_OPCODE_SNE:
-      assert (0);
+      FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
+         FETCH( &r[0], 0, chan_index );
+         FETCH( &r[1], 1, chan_index );
+         micro_ne( &r[0], &r[0], &r[1], &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C], &mach->Temps[TEMP_1_I].xyzw[TEMP_1_C] );
+         STORE( &r[0], 0, chan_index );
+      }
       break;
 
    case TGSI_OPCODE_STR: