i965: Clear some undefined fields of g0 when using them for gen6 FB writes.
authorEric Anholt <eric@anholt.net>
Tue, 26 Oct 2010 17:31:08 +0000 (10:31 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 26 Oct 2010 17:34:14 +0000 (10:34 -0700)
This doesn't appear to help any testcases I'm looking at, but it looks
like it's required.

src/mesa/drivers/dri/i965/brw_fs.cpp

index c687fde87384142573c4bed90e727cd4a544a70e..fc30ffc67444fd3463f6509e750e63c43e2d98a6 100644 (file)
@@ -1961,6 +1961,20 @@ fs_visitor::generate_fb_write(fs_inst *inst)
         brw_MOV(p,
                 brw_message_reg(inst->base_mrf),
                 brw_vec8_grf(0, 0));
+
+        if (inst->target > 0) {
+           /* Set the render target index for choosing BLEND_STATE. */
+           brw_MOV(p, retype(brw_vec1_reg(BRW_MESSAGE_REGISTER_FILE, 0, 2),
+                             BRW_REGISTER_TYPE_UD),
+                   brw_imm_ud(inst->target));
+        }
+
+        /* Clear viewport index, render target array index. */
+        brw_AND(p, retype(brw_vec1_reg(BRW_MESSAGE_REGISTER_FILE, 0, 0),
+                          BRW_REGISTER_TYPE_UD),
+                retype(brw_vec1_grf(0, 0), BRW_REGISTER_TYPE_UD),
+                brw_imm_ud(0xf7ff));
+
         implied_header = brw_null_reg();
       } else {
         implied_header = retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UW);