summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/i965/brw_wm_glsl.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2008-02-28 13:18:12 -0800
committerEric Anholt <eric@anholt.net>2008-02-28 13:18:48 -0800
commit9c8f27ba1366da07e20e86a0d48341ea97f5cda4 (patch)
tree91715a7dfa5ade8e0a85f494eec63a033625c44c /src/mesa/drivers/dri/i965/brw_wm_glsl.c
parent3f0301d7bc90b05914e201e366d7f3189d9248e3 (diff)
[965] Bug #9151: make fragment.position return window coords not screen coords.
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_wm_glsl.c')
-rw-r--r--src/mesa/drivers/dri/i965/brw_wm_glsl.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_wm_glsl.c b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
index 0a93d06081..fd237ee028 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_glsl.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
@@ -967,21 +967,23 @@ static void emit_wpos_xy(struct brw_wm_compile *c,
src0[0] = get_src_reg(c, &inst->SrcReg[0], 0, 1);
src0[1] = get_src_reg(c, &inst->SrcReg[0], 1, 1);
- /* Calc delta X,Y by subtracting origin in r1 from the pixel
- * centers.
+ /* Calculate the pixel offset from window bottom left into destination
+ * X and Y channels.
*/
if (mask & WRITEMASK_X) {
- brw_MOV(p,
+ /* X' = X - origin_x */
+ brw_ADD(p,
dst[0],
- retype(src0[0], BRW_REGISTER_TYPE_UW));
+ retype(src0[0], BRW_REGISTER_TYPE_W),
+ brw_imm_d(- c->key.origin_x));
}
if (mask & WRITEMASK_Y) {
- /* TODO -- window_height - Y */
- brw_MOV(p,
+ /* Y' = height - (Y - origin_y) = height + origin_y - Y */
+ brw_ADD(p,
dst[1],
- retype(src0[1], BRW_REGISTER_TYPE_UW));
-
+ negate(retype(src0[1], BRW_REGISTER_TYPE_W)),
+ brw_imm_d(c->key.origin_y + c->key.drawable_height));
}
}