EXA: SolidBoxClipped improvements.

* Centralize handling of fallbacks and damage tracking.
* Always migrate for fallbacks.
This commit is contained in:
Michel Dänzer 2007-04-29 23:49:09 +02:00
parent 982d7c2c0b
commit 584697a223

View File

@ -826,20 +826,19 @@ exaSolidBoxClipped (DrawablePtr pDrawable,
pPixmap->drawable.width > pExaScr->info->maxX || pPixmap->drawable.width > pExaScr->info->maxX ||
pPixmap->drawable.height > pExaScr->info->maxY) pPixmap->drawable.height > pExaScr->info->maxY)
{ {
exaDoMigration (pixmaps, 1, FALSE); fallback = TRUE;
goto fallback;
} else { } else {
exaDoMigration (pixmaps, 1, TRUE); 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)) !(*pExaScr->info->PrepareSolid) (pPixmap, GXcopy, pm, fg))
{ {
fallback:
EXA_FALLBACK(("to %p (%c)\n", pDrawable, EXA_FALLBACK(("to %p (%c)\n", pDrawable,
exaDrawableLocation(pDrawable))); exaDrawableLocation(pDrawable)));
exaDoMigration (pixmaps, 1, FALSE);
fallback = TRUE; fallback = TRUE;
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
fg = fbReplicatePixel (fg, pDrawable->bitsPerPixel); fg = fbReplicatePixel (fg, pDrawable->bitsPerPixel);
@ -878,10 +877,10 @@ fallback:
(*pExaScr->info->Solid) (pPixmap, (*pExaScr->info->Solid) (pPixmap,
partX1 + xoff, partY1 + yoff, partX1 + xoff, partY1 + yoff,
partX2 + xoff, partY2 + yoff); partX2 + xoff, partY2 + yoff);
exaPixmapDirty (pPixmap, partX1 + xoff, partY1 + yoff, }
partX2 + xoff, partY2 + yoff);
} else exaPixmapDirty (pPixmap, partX1 + xoff, partY1 + yoff, partX2 + xoff,
exaDrawableDirty (pDrawable, partX1, partY1, partX2, partY2); partY2 + yoff);
} }
if (fallback) if (fallback)