diff options
author | Ian Romanick <[email protected]> | 2010-12-01 11:57:33 -0800 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2010-12-01 12:01:13 -0800 |
commit | c92550be64abd454560556599cd95b237f4375b1 (patch) | |
tree | 0680d3dfa2560a57bf0a08d824a06b10ebb981fc | |
parent | b6dbc06742af4cbd86869243640c35aa7025766c (diff) |
i915: Correctly generate unconditional KIL instructions
Fixes piglit test glsl-fs-discard-03.
NOTE: This is a candidate for the 7.9 branch.
-rw-r--r-- | src/mesa/drivers/dri/i915/i915_fragprog.c | 6 |
1 files changed, 5 insertions, 1 deletions
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; |