i915g: Implement KILP.
authorStéphane Marchesin <marcheu@chromium.org>
Thu, 15 Dec 2011 20:31:36 +0000 (12:31 -0800)
committerStéphane Marchesin <marcheu@chromium.org>
Tue, 20 Dec 2011 02:24:39 +0000 (18:24 -0800)
src/gallium/drivers/i915/i915_fpc_translate.c

index 887721574fa93b4941804e8c2bcb6d7cf424dce6..beb0e0d6390014d95fd33aa05eab5c28c0aba0df 100644 (file)
@@ -510,9 +510,9 @@ i915_translate_instruction(struct i915_fp_compile *p,
       src0 = src_vector(p, &inst->Src[0], fs);
       src1 = src_vector(p, &inst->Src[1], fs);
       src2 = src_vector(p, &inst->Src[2], fs);
-      i915_emit_arith(p, A0_CMP, 
+      i915_emit_arith(p, A0_CMP,
                       get_result_vector(p, &inst->Dst[0]),
-                      get_result_flags(inst), 
+                      get_result_flags(inst),
                       0, src0, src2, src1);   /* NOTE: order of src2, src1 */
       break;
 
@@ -655,7 +655,16 @@ i915_translate_instruction(struct i915_fp_compile *p,
       break;
 
    case TGSI_OPCODE_KILP:
-      assert(0); /* not tested yet */
+      /* We emit an unconditional kill; we may want to revisit
+       * if we ever implement conditionals.
+       */
+      i915_emit_texld(p,
+                      tmp,                                   /* dest reg: a dummy reg */
+                      A0_DEST_CHANNEL_ALL,                   /* dest writemask */
+                      0,                                     /* sampler */
+                      negate(swizzle(0, ONE, ONE, ONE, ONE), 1, 1, 1, 1), /* coord */
+                      T0_TEXKILL,                            /* opcode */
+                      1);                                    /* num_coord */
       break;
 
    case TGSI_OPCODE_LG2: