From: Ian Romanick Date: Wed, 1 Dec 2010 19:57:33 +0000 (-0800) Subject: i915: Correctly generate unconditional KIL instructions X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c92550be64abd454560556599cd95b237f4375b1;p=mesa.git i915: Correctly generate unconditional KIL instructions Fixes piglit test glsl-fs-discard-03. NOTE: This is a candidate for the 7.9 branch. --- diff --git a/src/mesa/drivers/dri/i915/i915_fragprog.c b/src/mesa/drivers/dri/i915/i915_fragprog.c index c00ee415b6b..7a9fb7f088b 100644 --- a/src/mesa/drivers/dri/i915/i915_fragprog.c +++ b/src/mesa/drivers/dri/i915/i915_fragprog.c @@ -569,10 +569,14 @@ upload_program(struct i915_fragment_program *p) if (inst->DstReg.CondMask == COND_TR) { tmp = i915_get_utemp(p); + /* The KIL instruction discards the fragment if any component of + * the source is < 0. Emit an immediate operand of {-1}.xywz. + */ i915_emit_texld(p, get_live_regs(p, inst), tmp, A0_DEST_CHANNEL_ALL, 0, /* use a dummy dest reg */ - swizzle(tmp, ONE, ONE, ONE, ONE), /* always */ + negate(swizzle(tmp, ONE, ONE, ONE, ONE), + 1, 1, 1, 1), T0_TEXKILL); } else { p->error = 1;