EXA: Fix migration avoidance for 1x1 pixmaps.
Signed-off-by: Michel Dänzer <daenzer@vmware.com> Acked-by: Maarten Maathuis <madman2003@gmail.com> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
0bd8f0cd7f
commit
08bf26c28f
|
@ -1043,6 +1043,7 @@ exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion, Pixel pixel,
|
||||||
pDrawable->width == 1 && pDrawable->height == 1 &&
|
pDrawable->width == 1 && pDrawable->height == 1 &&
|
||||||
pDrawable->bitsPerPixel != 24) {
|
pDrawable->bitsPerPixel != 24) {
|
||||||
ExaPixmapPriv(pPixmap);
|
ExaPixmapPriv(pPixmap);
|
||||||
|
RegionPtr pending_damage = DamagePendingRegion(pExaPixmap->pDamage);
|
||||||
|
|
||||||
switch (pDrawable->bitsPerPixel) {
|
switch (pDrawable->bitsPerPixel) {
|
||||||
case 32:
|
case 32:
|
||||||
|
@ -1057,6 +1058,9 @@ exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion, Pixel pixel,
|
||||||
|
|
||||||
REGION_UNION(pScreen, &pExaPixmap->validSys, &pExaPixmap->validSys,
|
REGION_UNION(pScreen, &pExaPixmap->validSys, &pExaPixmap->validSys,
|
||||||
pRegion);
|
pRegion);
|
||||||
|
REGION_UNION(pScreen, &pExaPixmap->validFB, &pExaPixmap->validFB,
|
||||||
|
pRegion);
|
||||||
|
REGION_SUBTRACT(pScreen, pending_damage, pending_damage, pRegion);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
|
|
|
@ -94,9 +94,25 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
|
||||||
if (!w || !h) {
|
if (!w || !h) {
|
||||||
exaCreateDriverPixmap_mixed(pPixmap);
|
exaCreateDriverPixmap_mixed(pPixmap);
|
||||||
pExaPixmap->use_gpu_copy = exaPixmapHasGpuCopy(pPixmap);
|
pExaPixmap->use_gpu_copy = exaPixmapHasGpuCopy(pPixmap);
|
||||||
} else
|
} else {
|
||||||
pExaPixmap->use_gpu_copy = FALSE;
|
pExaPixmap->use_gpu_copy = FALSE;
|
||||||
|
|
||||||
|
if (w == 1 && h == 1) {
|
||||||
|
pExaPixmap->sys_ptr = malloc((pPixmap->drawable.bitsPerPixel + 7) / 8);
|
||||||
|
|
||||||
|
/* Set up damage tracking */
|
||||||
|
pExaPixmap->pDamage = DamageCreate(NULL, NULL,
|
||||||
|
DamageReportNonEmpty, TRUE,
|
||||||
|
pPixmap->drawable.pScreen,
|
||||||
|
pPixmap);
|
||||||
|
|
||||||
|
DamageRegister(&pPixmap->drawable, pExaPixmap->pDamage);
|
||||||
|
/* This ensures that pending damage reflects the current operation. */
|
||||||
|
/* This is used by exa to optimize migration. */
|
||||||
|
DamageSetReportAfterOp(pExaPixmap->pDamage, TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* During a fallback we must prepare access. */
|
/* During a fallback we must prepare access. */
|
||||||
if (pExaScr->fallback_counter)
|
if (pExaScr->fallback_counter)
|
||||||
exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_AUX_DEST);
|
exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_AUX_DEST);
|
||||||
|
|
Loading…
Reference in New Issue