radeon: Fix scissors for r600 KMS.
authorPauli Nieminen <suokkos@gmail.com>
Thu, 24 Sep 2009 16:58:09 +0000 (19:58 +0300)
committerPauli Nieminen <suokkos@gmail.com>
Thu, 24 Sep 2009 17:37:55 +0000 (20:37 +0300)
Radeon generic scissors code had problem that some of code was using exclusive
and some inclusive bottom right corner. Only r600 driver is using exclusive
coordinate so changed generic code to pass inclusive coordinate and r600 driver
changes BR coordinate to be exclusive.

src/mesa/drivers/dri/r600/r700_state.c
src/mesa/drivers/dri/radeon/radeon_common.c

index 8571563149e57ee9bf664f2c50cc58ba93dbfe44..124469b5a6953b6cbc2d773d3266aba6ca3344a7 100644 (file)
@@ -1269,10 +1269,11 @@ void r700SetScissor(context_t *context) //---------------
                return;
        }
        if (context->radeon.state.scissor.enabled) {
+               /* r600 has exclusive scissors */
                x1 = context->radeon.state.scissor.rect.x1;
                y1 = context->radeon.state.scissor.rect.y1;
-               x2 = context->radeon.state.scissor.rect.x2;
-               y2 = context->radeon.state.scissor.rect.y2;
+               x2 = context->radeon.state.scissor.rect.x2 + 1;
+               y2 = context->radeon.state.scissor.rect.y2 + 1;
        } else {
                if (context->radeon.radeonScreen->driScreen->dri2.enabled) {
                        x1 = 0;
index a4c7b40798aef10746958dd6260a292467e15f26..9817ff856b94f9becb34feaf492c6986c8484e4c 100644 (file)
@@ -232,13 +232,13 @@ void radeonUpdateScissor( GLcontext *ctx )
 
           __DRIdrawablePrivate *dPriv = radeon_get_drawable(rmesa);
           x1 += dPriv->x;
-          x2 += dPriv->x + 1;
+          x2 += dPriv->x;
           min_x += dPriv->x;
-          max_x += dPriv->x + 1;
+          max_x += dPriv->x;
           y1 += dPriv->y;
-          y2 += dPriv->y + 1;
+          y2 += dPriv->y;
           min_y += dPriv->y;
-          max_y += dPriv->y + 1;
+          max_y += dPriv->y;
        }
 
        rmesa->state.scissor.rect.x1 = CLAMP(x1,  min_x, max_x);