Move the front.offset setting above a check to shortcut reallocating buffers if
authorEric Anholt <anholt@FreeBSD.org>
Tue, 25 Oct 2005 21:10:28 +0000 (21:10 +0000)
committerEric Anholt <anholt@FreeBSD.org>
Tue, 25 Oct 2005 21:10:28 +0000 (21:10 +0000)
width and height stayed the same.  Rely on front.offset pointing at the origin
in the window (rather than the origin of the front buffer), and fix the coords
in swapbuffers, which were wrong.  This is different from other drivers because
we've got a back buffer with a 0,0 origin at the window's origin, which makes it
more convenient to have the front buffer match it.

src/mesa/drivers/dri/sis/sis_dd.c
src/mesa/drivers/dri/sis/sis_screen.c

index 6cabe5c383b31a04242f798b8e26a9da7c7aa27b..4e73f562b028c6e7904175672bacf239dd70cb18 100644 (file)
@@ -215,6 +215,11 @@ sisUpdateBufferSize(sisContextPtr smesa)
       assert(smesa->depth.Base.AllocStorage);
    }
 
+   /* XXX Should get the base offset of the frontbuffer from the X Server */
+   smesa->front.offset = smesa->driDrawable->x * smesa->bytesPerPixel +
+                        smesa->driDrawable->y * smesa->front.pitch;
+   smesa->front.map = (char *) smesa->driScreen->pFB + smesa->front.offset;
+
    if ( smesa->width == smesa->driDrawable->w &&
        smesa->height == smesa->driDrawable->h )
    {
@@ -224,10 +229,6 @@ sisUpdateBufferSize(sisContextPtr smesa)
    smesa->front.bpp = smesa->bytesPerPixel * 8;
    /* Front pitch set on context create */
    smesa->front.size = smesa->front.pitch * smesa->driDrawable->h;
-   /* XXX Should get the base offset of the frontbuffer from the X Server */
-   smesa->front.offset = smesa->driDrawable->x * smesa->bytesPerPixel +
-                        smesa->driDrawable->y * smesa->front.pitch;
-   smesa->front.map = (char *) smesa->driScreen->pFB + smesa->front.offset;
 
    smesa->width = smesa->driDrawable->w;
    smesa->height = smesa->driDrawable->h;
index d1ceb68d0c86a15d1e86490700dab3ef915351bc..d4395a9cddfaee694db18a240b58ac41db876735 100644 (file)
@@ -253,7 +253,7 @@ static void sisCopyBuffer( __DRIdrawablePrivate *dPriv )
       MMIO(REG_SRC_PITCH, smesa->back.pitch | ((smesa->bytesPerPixel == 4) ? 
                           BLIT_DEPTH_32 : BLIT_DEPTH_16));
       MMIO(REG_SRC_X_Y, ((box->x1 - dPriv->x) << 16) | (box->y1 - dPriv->y));
-      MMIO(REG_DST_X_Y, (box->x1 << 16) | box->y1);
+      MMIO(REG_DST_X_Y, ((box->x1 - dPriv->x) << 16) | (box->y1 - dPriv->y));
       MMIO(REG_DST_ADDR, smesa->front.offset);
       MMIO(REG_DST_PITCH_HEIGHT, (smesa->virtualY << 16) | smesa->front.pitch);
       MMIO(REG_WIDTH_HEIGHT, ((box->y2 - box->y1) << 16) | (box->x2 - box->x1));