From 9c8f27ba1366da07e20e86a0d48341ea97f5cda4 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 28 Feb 2008 13:18:12 -0800 Subject: [965] Bug #9151: make fragment.position return window coords not screen coords. --- src/mesa/drivers/dri/i965/brw_wm_glsl.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'src/mesa/drivers/dri/i965/brw_wm_glsl.c') 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)); } } -- cgit v1.2.3