EXA: exaAssertNotDirty improvements.
* Return early if the valid region is empty or the pixmap is pinned. * Fix loop for several cliprects.
This commit is contained in:
parent
d3f8667341
commit
e869573b52
|
@ -464,12 +464,10 @@ exaAssertNotDirty (PixmapPtr pPixmap)
|
||||||
BoxPtr pBox = REGION_RECTS(pValidReg);
|
BoxPtr pBox = REGION_RECTS(pValidReg);
|
||||||
Bool ret = TRUE;
|
Bool ret = TRUE;
|
||||||
|
|
||||||
if (pExaPixmap == NULL || pExaPixmap->fb_ptr == NULL)
|
if (!nbox || exaPixmapIsPinned(pPixmap) || pExaPixmap->fb_ptr == NULL)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
dst = pExaPixmap->sys_ptr;
|
|
||||||
dst_pitch = pExaPixmap->sys_pitch;
|
dst_pitch = pExaPixmap->sys_pitch;
|
||||||
src = pExaPixmap->fb_ptr;
|
|
||||||
src_pitch = pExaPixmap->fb_pitch;
|
src_pitch = pExaPixmap->fb_pitch;
|
||||||
cpp = pPixmap->drawable.bitsPerPixel / 8;
|
cpp = pPixmap->drawable.bitsPerPixel / 8;
|
||||||
|
|
||||||
|
@ -486,21 +484,18 @@ exaAssertNotDirty (PixmapPtr pPixmap)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
rowbytes = (pBox->x2 - pBox->x1) * cpp;
|
rowbytes = (pBox->x2 - pBox->x1) * cpp;
|
||||||
src += pBox->y1 * src_pitch + pBox->x1 * cpp;
|
src = pExaPixmap->fb_ptr + pBox->y1 * src_pitch + pBox->x1 * cpp;
|
||||||
dst += pBox->y1 * dst_pitch + pBox->x1 * cpp;
|
dst = pExaPixmap->sys_ptr + pBox->y1 * dst_pitch + pBox->x1 * cpp;
|
||||||
|
|
||||||
for (y = pBox->y2 - pBox->y1; y; y--) {
|
for (y = pBox->y1; y < pBox->y2;
|
||||||
if (memcmp(dst + pBox->y1 * dst_pitch + pBox->x1 * cpp,
|
y++, src += src_pitch, dst += dst_pitch) {
|
||||||
src + pBox->y1 * src_pitch + pBox->x1 * cpp,
|
if (memcmp(dst, src, rowbytes) != 0) {
|
||||||
(pBox->x2 - pBox->x1) * cpp) != 0) {
|
|
||||||
ret = FALSE;
|
ret = FALSE;
|
||||||
|
exaPixmapDirty(pPixmap, pBox->x1, pBox->y1, pBox->x2,
|
||||||
|
pBox->y2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
src += src_pitch;
|
|
||||||
dst += dst_pitch;
|
|
||||||
}
|
}
|
||||||
src -= pBox->y1 * src_pitch + pBox->x1 * cpp;
|
|
||||||
dst -= pBox->y1 * dst_pitch + pBox->x1 * cpp;
|
|
||||||
}
|
}
|
||||||
exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
|
exaFinishAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue