i915g: implement TGSI_OPCODE_SEQ.
authorStéphane Marchesin <marcheu@chromium.org>
Sat, 4 Jun 2011 01:57:16 +0000 (18:57 -0700)
committerStéphane Marchesin <marcheu@chromium.org>
Mon, 6 Jun 2011 19:36:00 +0000 (12:36 -0700)
src/gallium/drivers/i915/i915_fpc_translate.c

index 9f3c766cb81a0c77b42d1fed3fae3d1a499817ff..695a3966bbb0bf944f0bfbbcf7b9c26a2bc00939 100644 (file)
@@ -852,6 +852,34 @@ i915_translate_instruction(struct i915_fp_compile *p,
       emit_simple_arith_swap2(p, inst, A0_SLT, 2);
       break;
 
+   case TGSI_OPCODE_SEQ:
+      /* if we're both >= and <= then we're == */
+      src0 = src_vector(p, &inst->Src[0]);
+      src1 = src_vector(p, &inst->Src[1]);
+      tmp = i915_get_utemp(p);
+
+      i915_emit_arith(p,
+                      A0_SGE,
+                      tmp, A0_DEST_CHANNEL_ALL, 0,
+                      src0,
+                      src1, 0);
+
+      i915_emit_arith(p,
+                      A0_SGE,
+                      get_result_vector(p, &inst->Dst[0]),
+                      A0_DEST_CHANNEL_ALL, 0,
+                      src1,
+                      src0, 0);
+
+      i915_emit_arith(p,
+                      A0_MUL,
+                      get_result_vector(p, &inst->Dst[0]),
+                      A0_DEST_CHANNEL_ALL, 0,
+                      get_result_vector(p, &inst->Dst[0]),
+                      tmp, 0);
+
+      break;
+
    case TGSI_OPCODE_SUB:
       src0 = src_vector(p, &inst->Src[0]);
       src1 = src_vector(p, &inst->Src[1]);