i965/fs: Don't generate saturates over existing variable values.
authorEric Anholt <eric@anholt.net>
Mon, 26 Nov 2012 22:22:12 +0000 (14:22 -0800)
committerEric Anholt <eric@anholt.net>
Wed, 28 Nov 2012 19:26:34 +0000 (11:26 -0800)
Fixes a crash in http://workshop.chromeexperiments.com/stars/ on i965,
and the new piglit test glsl-fs-clamp-5.
We were trying to emit a saturating move into a uniform, which the code
generator appropriately choked on.  This was broken in the change in
32ae8d3b321185a85b73ff703d8fc26bd5f48fa7.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=57166
NOTE: This is a candidate for the 9.0 branch.
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp

index d5487093dc75dd5335375d64c537c961c39f1b79..571489c1db803a143699d21dcb5c60283b9e6e5e 100644 (file)
@@ -217,6 +217,7 @@ fs_visitor::try_emit_saturate(ir_expression *ir)
     */
    fs_inst *modify = get_instruction_generating_reg(pre_inst, last_inst, src);
    if (!modify || modify->regs_written() != 1) {
+      this->result = fs_reg(this, ir->type);
       fs_inst *inst = emit(MOV(this->result, src));
       inst->saturate = true;
    } else {