summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mesa/pipe/i965simple/brw_sf.c10
-rw-r--r--src/mesa/pipe/i965simple/brw_wm_decl.c8
2 files changed, 16 insertions, 2 deletions
diff --git a/src/mesa/pipe/i965simple/brw_sf.c b/src/mesa/pipe/i965simple/brw_sf.c
index c04234ecf4..362196a0d1 100644
--- a/src/mesa/pipe/i965simple/brw_sf.c
+++ b/src/mesa/pipe/i965simple/brw_sf.c
@@ -58,7 +58,7 @@ static void compile_sf_prog( struct brw_context *brw,
c.nr_attrs = c.key.vp_output_count;
c.nr_attr_regs = (c.nr_attrs+1)/2;
- c.nr_setup_attrs = c.key.fp_input_count;
+ c.nr_setup_attrs = c.key.fp_input_count + 1; /* +1 for position */
c.nr_setup_regs = (c.nr_setup_attrs+1)/2;
c.prog_data.urb_read_length = c.nr_attr_regs;
@@ -205,6 +205,14 @@ static void upload_sf_prog( struct brw_context *brw )
}
}
+ /* Hack: Adjust for position. Optimize away when not required (ie
+ * for perspective interpolation).
+ */
+ key.persp_mask <<= 1;
+ key.linear_mask <<= 1;
+ key.linear_mask |= 1;
+ key.const_mask <<= 1;
+
_mesa_printf("key.persp_mask: %x\n", key.persp_mask);
_mesa_printf("key.linear_mask: %x\n", key.linear_mask);
_mesa_printf("key.const_mask: %x\n", key.const_mask);
diff --git a/src/mesa/pipe/i965simple/brw_wm_decl.c b/src/mesa/pipe/i965simple/brw_wm_decl.c
index 5b1abb9d48..b45a333a2e 100644
--- a/src/mesa/pipe/i965simple/brw_wm_decl.c
+++ b/src/mesa/pipe/i965simple/brw_wm_decl.c
@@ -273,6 +273,12 @@ static void prealloc_reg(struct brw_wm_compile *c)
c->reg_index += nr_curbe_regs;
}
+ /* Adjust for parameter coefficients for position, which are
+ * currently always provided.
+ */
+// c->position_coef[i] = brw_vec8_grf(c->reg_index, 0);
+ c->reg_index += 2;
+
/* Next we receive the plane coefficients for parameter
* interpolation:
*/
@@ -282,7 +288,7 @@ static void prealloc_reg(struct brw_wm_compile *c)
}
c->prog_data.first_curbe_grf = c->key.nr_depth_regs * 2;
- c->prog_data.urb_read_length = c->fp->program.num_inputs * 2;
+ c->prog_data.urb_read_length = (c->fp->program.num_inputs + 1) * 2;
c->prog_data.curb_read_length = nr_curbe_regs;
/* That's the end of the payload, now we can start allocating registers.