diff options
author | Corbin Simpson <[email protected]> | 2009-03-20 00:15:03 -0700 |
---|---|---|
committer | Corbin Simpson <[email protected]> | 2009-03-20 14:53:20 -0700 |
commit | 04fe31cd5efc5703b9cd975391a992866432f59d (patch) | |
tree | 89e68332b7c0dafce2c88694aeb484159d7f776a /src/gallium/drivers/r300/r300_surface.c | |
parent | adb40a94b0d8a023cfa900017dc17e26179c1cfd (diff) |
r300-gallium: Properly offset scissors.
As per r300_reg, classic Mesa, and xf86-video-ati.
Diffstat (limited to 'src/gallium/drivers/r300/r300_surface.c')
-rw-r--r-- | src/gallium/drivers/r300/r300_surface.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/gallium/drivers/r300/r300_surface.c b/src/gallium/drivers/r300/r300_surface.c index 2cc0677e52c..3672f60b1b8 100644 --- a/src/gallium/drivers/r300/r300_surface.c +++ b/src/gallium/drivers/r300/r300_surface.c @@ -80,8 +80,16 @@ static void r300_surface_fill(struct pipe_context* pipe, /* Pixel scissors */ OUT_CS_REG_SEQ(R300_SC_SCISSORS_TL, 2); - OUT_CS((x << R300_SCISSORS_X_SHIFT) | (y << R300_SCISSORS_Y_SHIFT)); - OUT_CS((w << R300_SCISSORS_X_SHIFT) | (h << R300_SCISSORS_Y_SHIFT)); + if (caps->is_r500) { + OUT_CS((x << R300_SCISSORS_X_SHIFT) | (y << R300_SCISSORS_Y_SHIFT)); + OUT_CS((w << R300_SCISSORS_X_SHIFT) | (h << R300_SCISSORS_Y_SHIFT)); + } else { + /* Non-R500 chipsets have an offset of 1440 in their scissors. */ + OUT_CS(((x + 1440) << R300_SCISSORS_X_SHIFT) | + ((y + 1440) << R300_SCISSORS_Y_SHIFT)); + OUT_CS(((w + 1440) << R300_SCISSORS_X_SHIFT) | + ((h + 1440) << R300_SCISSORS_Y_SHIFT)); + } /* The size of the point we're about to draw, in sixths of pixels */ OUT_CS_REG(R300_GA_POINT_SIZE, |