EXA: SolidBoxClipped improvements.
* Centralize handling of fallbacks and damage tracking. * Always migrate for fallbacks.
This commit is contained in:
parent
982d7c2c0b
commit
584697a223
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue