From b8c9598294eaa16e0d1578ad98896f6ec5ba37cf Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Mon, 7 Jan 2013 13:57:21 +1000 Subject: sna: fixup damage posting to be done correctly around slave pixmap Copied from commit c789d06cf8a0debc67058d7be1483f5b542e2baa Author: Dave Airlie Date: Mon Jan 7 13:57:21 2013 +1000 This fixes the damage posting to happen in the correct ordering, not sure if this fixes anything, but it should make things more consistent. --- src/sna/sna_accel.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index 227db7be..c8268150 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -13948,6 +13948,8 @@ static void sna_accel_post_damage(struct sna *sna) region.extents.x2, region.extents.y2)); RegionIntersect(®ion, ®ion, damage); + RegionTranslate(®ion, -dirty->x, -dirty->y); + DamageRegionAppend(&dirty->slave_dst->drawable, ®ion); box = REGION_RECTS(®ion); n = REGION_NUM_RECTS(®ion); @@ -13963,30 +13965,31 @@ fallback: do { DBG(("%s: copy box (%d, %d)->(%d, %d)x(%d, %d)\n", __FUNCTION__, + box->x1 + dirty->x, box->y1 + dirty->y, box->x1, box->y1, - box->x1 - dirty->x, box->y1 - dirty->y, box->x2 - box->x1, box->y2 - box->y1)); assert(box->x2 > box->x1); assert(box->y2 > box->y1); + assert(box->x1 + dirty->x >= 0); + assert(box->y1 + dirty->y >= 0); + assert(box->x2 + dirty->x <= src->drawable.width); + assert(box->y2 + dirty->y <= src->drawable.height); + assert(box->x1 >= 0); assert(box->y1 >= 0); assert(box->x2 <= src->drawable.width); assert(box->y2 <= src->drawable.height); - assert(box->x1 - dirty->x >= 0); - assert(box->y1 - dirty->y >= 0); - assert(box->x2 - dirty->x <= src->drawable.width); - assert(box->y2 - dirty->y <= src->drawable.height); - memcpy_blt(src->devPrivate.ptr, dst->devPrivate.ptr, src->drawable.bitsPerPixel, src->devKind, dst->devKind, - box->x1, box->y1, - box->x1 - dirty->x, - box->y1 - dirty->y, + box->x1 + dirty->x, + box->y1 + dirty->y, + box->x1, + box->y1, box->x2 - box->x1, box->y2 - box->y1); box++; @@ -13999,17 +14002,15 @@ fallback: goto fallback; if (!sna->render.copy_boxes(sna, GXcopy, - src, sna_pixmap_get_bo(src), 0, 0, - dst, sna_pixmap_get_bo(dst), -dirty->x, -dirty->y, + src, sna_pixmap_get_bo(src), dirty->x, dirty->y, + dst, sna_pixmap_get_bo(dst),0, 0, box, n, COPY_LAST)) goto fallback; flush = true; } - RegionTranslate(®ion, -dirty->x, -dirty->y); - DamageRegionAppend(&dirty->slave_dst->drawable, ®ion); - + DamageRegionProcessPending(&dirty->slave_dst->drawable); skip: RegionUninit(®ion); DamageEmpty(dirty->damage); -- cgit v1.2.3