summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Whitwell <[email protected]>2008-01-03 17:21:22 +0000
committerKeith Whitwell <[email protected]>2008-01-04 01:20:41 +0000
commit65426b144e9c3f6c8c1e6d0c0dce0ae955f7d1c3 (patch)
treeab8841a6861262bd16257d98f0ea34f152407a2f
parent25c9728644becd6342d025bdf355f311d00d5cb5 (diff)
965: always perform SF parameter setup for position
Match behaviour of DRI driver. Fix fragment shader to find the other parameters one slot further on. Will need more work to cope with FP's that actually reference position.
-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 c04234ecf48..362196a0d1d 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 5b1abb9d489..b45a333a2e9 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.