If a window background is a 1x1 pixmap, read the value out and go to
exaFillRegionSolid rather than sending piles and piles of Copies to the hardware.
This commit is contained in:
parent
fce11fdf03
commit
55efb41f6c
27
exa/exa.c
27
exa/exa.c
|
@ -1220,6 +1220,33 @@ exaFillRegionTiled (DrawablePtr pDrawable,
|
|||
goto fallback;
|
||||
}
|
||||
|
||||
/* If we're filling with a solid color, grab it out and go to
|
||||
* FillRegionSolid, saving numerous copies.
|
||||
*/
|
||||
if (pDrawable->width == 1 && pDrawable->height == 1) {
|
||||
CARD32 pixel;
|
||||
|
||||
exaDrawableUseMemory(&pTile->drawable);
|
||||
exaPrepareAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
switch (pTile->drawable.bitsPerPixel) {
|
||||
case 8:
|
||||
pixel = *(CARD8 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
case 16:
|
||||
pixel = *(CARD16 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
case 32:
|
||||
pixel = *(CARD32 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
default:
|
||||
exaFinishAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
goto fallback;
|
||||
}
|
||||
exaFinishAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
exaFillRegionSolid(pDrawable, pRegion, pixel);
|
||||
return;
|
||||
}
|
||||
|
||||
pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
|
||||
if (!pPixmap)
|
||||
goto fallback;
|
||||
|
|
|
@ -1220,6 +1220,33 @@ exaFillRegionTiled (DrawablePtr pDrawable,
|
|||
goto fallback;
|
||||
}
|
||||
|
||||
/* If we're filling with a solid color, grab it out and go to
|
||||
* FillRegionSolid, saving numerous copies.
|
||||
*/
|
||||
if (pDrawable->width == 1 && pDrawable->height == 1) {
|
||||
CARD32 pixel;
|
||||
|
||||
exaDrawableUseMemory(&pTile->drawable);
|
||||
exaPrepareAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
switch (pTile->drawable.bitsPerPixel) {
|
||||
case 8:
|
||||
pixel = *(CARD8 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
case 16:
|
||||
pixel = *(CARD16 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
case 32:
|
||||
pixel = *(CARD32 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
default:
|
||||
exaFinishAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
goto fallback;
|
||||
}
|
||||
exaFinishAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
exaFillRegionSolid(pDrawable, pRegion, pixel);
|
||||
return;
|
||||
}
|
||||
|
||||
pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
|
||||
if (!pPixmap)
|
||||
goto fallback;
|
||||
|
|
|
@ -1220,6 +1220,33 @@ exaFillRegionTiled (DrawablePtr pDrawable,
|
|||
goto fallback;
|
||||
}
|
||||
|
||||
/* If we're filling with a solid color, grab it out and go to
|
||||
* FillRegionSolid, saving numerous copies.
|
||||
*/
|
||||
if (pDrawable->width == 1 && pDrawable->height == 1) {
|
||||
CARD32 pixel;
|
||||
|
||||
exaDrawableUseMemory(&pTile->drawable);
|
||||
exaPrepareAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
switch (pTile->drawable.bitsPerPixel) {
|
||||
case 8:
|
||||
pixel = *(CARD8 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
case 16:
|
||||
pixel = *(CARD16 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
case 32:
|
||||
pixel = *(CARD32 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
default:
|
||||
exaFinishAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
goto fallback;
|
||||
}
|
||||
exaFinishAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
exaFillRegionSolid(pDrawable, pRegion, pixel);
|
||||
return;
|
||||
}
|
||||
|
||||
pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
|
||||
if (!pPixmap)
|
||||
goto fallback;
|
||||
|
|
|
@ -1220,6 +1220,33 @@ exaFillRegionTiled (DrawablePtr pDrawable,
|
|||
goto fallback;
|
||||
}
|
||||
|
||||
/* If we're filling with a solid color, grab it out and go to
|
||||
* FillRegionSolid, saving numerous copies.
|
||||
*/
|
||||
if (pDrawable->width == 1 && pDrawable->height == 1) {
|
||||
CARD32 pixel;
|
||||
|
||||
exaDrawableUseMemory(&pTile->drawable);
|
||||
exaPrepareAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
switch (pTile->drawable.bitsPerPixel) {
|
||||
case 8:
|
||||
pixel = *(CARD8 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
case 16:
|
||||
pixel = *(CARD16 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
case 32:
|
||||
pixel = *(CARD32 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
default:
|
||||
exaFinishAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
goto fallback;
|
||||
}
|
||||
exaFinishAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
exaFillRegionSolid(pDrawable, pRegion, pixel);
|
||||
return;
|
||||
}
|
||||
|
||||
pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
|
||||
if (!pPixmap)
|
||||
goto fallback;
|
||||
|
|
|
@ -1220,6 +1220,33 @@ exaFillRegionTiled (DrawablePtr pDrawable,
|
|||
goto fallback;
|
||||
}
|
||||
|
||||
/* If we're filling with a solid color, grab it out and go to
|
||||
* FillRegionSolid, saving numerous copies.
|
||||
*/
|
||||
if (pDrawable->width == 1 && pDrawable->height == 1) {
|
||||
CARD32 pixel;
|
||||
|
||||
exaDrawableUseMemory(&pTile->drawable);
|
||||
exaPrepareAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
switch (pTile->drawable.bitsPerPixel) {
|
||||
case 8:
|
||||
pixel = *(CARD8 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
case 16:
|
||||
pixel = *(CARD16 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
case 32:
|
||||
pixel = *(CARD32 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
default:
|
||||
exaFinishAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
goto fallback;
|
||||
}
|
||||
exaFinishAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
exaFillRegionSolid(pDrawable, pRegion, pixel);
|
||||
return;
|
||||
}
|
||||
|
||||
pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
|
||||
if (!pPixmap)
|
||||
goto fallback;
|
||||
|
|
|
@ -1220,6 +1220,33 @@ exaFillRegionTiled (DrawablePtr pDrawable,
|
|||
goto fallback;
|
||||
}
|
||||
|
||||
/* If we're filling with a solid color, grab it out and go to
|
||||
* FillRegionSolid, saving numerous copies.
|
||||
*/
|
||||
if (pDrawable->width == 1 && pDrawable->height == 1) {
|
||||
CARD32 pixel;
|
||||
|
||||
exaDrawableUseMemory(&pTile->drawable);
|
||||
exaPrepareAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
switch (pTile->drawable.bitsPerPixel) {
|
||||
case 8:
|
||||
pixel = *(CARD8 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
case 16:
|
||||
pixel = *(CARD16 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
case 32:
|
||||
pixel = *(CARD32 *)(pTile->devPrivate.ptr);
|
||||
break;
|
||||
default:
|
||||
exaFinishAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
goto fallback;
|
||||
}
|
||||
exaFinishAccess(&pTile->drawable, EXA_PREPARE_SRC);
|
||||
exaFillRegionSolid(pDrawable, pRegion, pixel);
|
||||
return;
|
||||
}
|
||||
|
||||
pPixmap = exaGetOffscreenPixmap (pDrawable, &xoff, &yoff);
|
||||
if (!pPixmap)
|
||||
goto fallback;
|
||||
|
|
Loading…
Reference in New Issue