i965: don't do calculation for delta_xy on sandybridge
authorZhenyu Wang <zhenyuw@linux.intel.com>
Sat, 25 Sep 2010 02:48:52 +0000 (10:48 +0800)
committerZhenyu Wang <zhenyuw@linux.intel.com>
Tue, 28 Sep 2010 07:58:21 +0000 (15:58 +0800)
Sandybridge doesn't have Xstart/Ystart in payload header.

src/mesa/drivers/dri/i965/brw_wm_emit.c

index a9ebc2689ceb5ed01814c4bab86ff9be709e82ab..d5219a3d116a26609e2bfc8b3e2987af361ff098 100644 (file)
@@ -173,6 +173,7 @@ void emit_delta_xy(struct brw_compile *p,
                   GLuint mask,
                   const struct brw_reg *arg0)
 {
+   struct intel_context *intel = &p->brw->intel;
    struct brw_reg r1 = brw_vec1_grf(1, 0);
 
    if (mask == 0)
@@ -180,6 +181,21 @@ void emit_delta_xy(struct brw_compile *p,
 
    assert(mask == WRITEMASK_XY);
 
+   if (intel->gen >= 6) {
+       /* XXX Gen6 WM doesn't have Xstart/Ystart in payload r1.0/r1.1.
+         Just add them with 0.0 for dst reg.. */
+       r1 = brw_imm_v(0x00000000);
+       brw_ADD(p,
+              dst[0],
+              retype(arg0[0], BRW_REGISTER_TYPE_UW),
+              r1);
+       brw_ADD(p,
+              dst[1],
+              retype(arg0[1], BRW_REGISTER_TYPE_UW),
+              r1);
+       return;
+   }
+
    /* Calc delta X,Y by subtracting origin in r1 from the pixel
     * centers produced by emit_pixel_xy().
     */