From 584697a2231ac782f362a925e1489c15483a8791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Sun, 29 Apr 2007 23:49:09 +0200 Subject: [PATCH] EXA: SolidBoxClipped improvements. * Centralize handling of fallbacks and damage tracking. * Always migrate for fallbacks. --- exa/exa_accel.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/exa/exa_accel.c b/exa/exa_accel.c index 800c4f0fb..4aa2d63d8 100644 --- a/exa/exa_accel.c +++ b/exa/exa_accel.c @@ -826,20 +826,19 @@ exaSolidBoxClipped (DrawablePtr pDrawable, pPixmap->drawable.width > pExaScr->info->maxX || pPixmap->drawable.height > pExaScr->info->maxY) { - exaDoMigration (pixmaps, 1, FALSE); - goto fallback; + fallback = TRUE; } else { exaDoMigration (pixmaps, 1, TRUE); } - pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff); + exaGetDrawableDeltas (pDrawable, pPixmap, &xoff, &yoff); - if (!pPixmap || + if (fallback || !exaPixmapIsOffscreen(pPixmap) || !(*pExaScr->info->PrepareSolid) (pPixmap, GXcopy, pm, fg)) { -fallback: EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable))); + exaDoMigration (pixmaps, 1, FALSE); fallback = TRUE; exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); fg = fbReplicatePixel (fg, pDrawable->bitsPerPixel); @@ -878,10 +877,10 @@ fallback: (*pExaScr->info->Solid) (pPixmap, partX1 + xoff, partY1 + yoff, partX2 + xoff, partY2 + yoff); - exaPixmapDirty (pPixmap, partX1 + xoff, partY1 + yoff, - partX2 + xoff, partY2 + yoff); - } else - exaDrawableDirty (pDrawable, partX1, partY1, partX2, partY2); + } + + exaPixmapDirty (pPixmap, partX1 + xoff, partY1 + yoff, partX2 + xoff, + partY2 + yoff); } if (fallback)