summaryrefslogtreecommitdiff
path: root/exa/exa_unaccel.c
diff options
context:
space:
mode:
Diffstat (limited to 'exa/exa_unaccel.c')
-rw-r--r--exa/exa_unaccel.c36
1 files changed, 10 insertions, 26 deletions
diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c
index 7713a08c9..708d1eac6 100644
--- a/exa/exa_unaccel.c
+++ b/exa/exa_unaccel.c
@@ -88,10 +88,15 @@ ExaCheckPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth,
int x, int y, int w, int h, int leftPad, int format,
char *bits)
{
+ PixmapPtr pPixmap = exaGetDrawablePixmap(pDrawable);
+ int xoff, yoff;
+
EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
fbPutImage (pDrawable, pGC, depth, x, y, w, h, leftPad, format, bits);
exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
+ exaGetDrawableDeltas(pDrawable, pPixmap, &xoff, &yoff);
+ exaPixmapDirty(pPixmap, x + xoff, y + yoff, x + xoff + w, y + yoff + h);
}
RegionPtr
@@ -201,32 +206,11 @@ ExaCheckPolyFillRect (DrawablePtr pDrawable, GCPtr pGC,
{
EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
- if (nrect) {
- int x1 = max(prect->x, 0), y1 = max(prect->y, 0);
- int x2 = min(prect->x + prect->width, pDrawable->width);
- int y2 = min(prect->y + prect->height, pDrawable->height);
-
- exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
- exaPrepareAccessGC (pGC);
- fbPolyFillRect (pDrawable, pGC, nrect, prect);
- exaFinishAccessGC (pGC);
- exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
-
- /* Only track bounding box of damage, as this path can degenerate to
- * zillions of damage boxes
- */
- while (--nrect)
- {
- prect++;
- x1 = min(x1, prect->x);
- x2 = max(x2, prect->x + prect->width);
- y1 = min(y1, prect->y);
- y2 = max(y2, prect->y + prect->height);
- }
-
- exaDrawableDirty (pDrawable, pDrawable->x + x1, pDrawable->y + y1,
- pDrawable->x + x2, pDrawable->y + y2);
- }
+ exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
+ exaPrepareAccessGC (pGC);
+ fbPolyFillRect (pDrawable, pGC, nrect, prect);
+ exaFinishAccessGC (pGC);
+ exaFinishAccess (pDrawable, EXA_PREPARE_DEST);
}
void