summaryrefslogtreecommitdiff
path: root/exa
diff options
context:
space:
mode:
authorMichel Dänzer <daenzer@vmware.com>2009-07-10 20:06:02 +0200
committerMichel Dänzer <michel@daenzer.net>2009-07-10 20:06:02 +0200
commit35758544813f156eaac28844e693b2a28f6de316 (patch)
treefddfb90cff60d9cf69e0557424a5549046bc28f0 /exa
parent2638e9899e57d9b25a2cade3247083a6e101dee2 (diff)
EXA: Only pass CT_YXBANDED to RECTS_TO_REGION() if that is really true.
Fixes http://bugs.freedesktop.org/show_bug.cgi?id=22642 .
Diffstat (limited to 'exa')
-rw-r--r--exa/exa_accel.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index 39f343784..001a4f0e2 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -394,6 +394,7 @@ exaHWCopyNtoN (DrawablePtr pSrcDrawable,
if (rects) {
int i;
+ int ordering;
for (i = 0; i < nbox; i++) {
rects[i].x = pbox[i].x1 + dx + src_off_x;
@@ -402,7 +403,16 @@ exaHWCopyNtoN (DrawablePtr pSrcDrawable,
rects[i].height = pbox[i].y2 - pbox[i].y1;
}
- srcregion = RECTS_TO_REGION(pScreen, nbox, rects, CT_YXBANDED);
+ /* This must match the miRegionCopy() logic for reversing rect order */
+ if (nbox == 1 || (dx > 0 && dy > 0) ||
+ (pDstDrawable != pSrcDrawable &&
+ (pDstDrawable->type != DRAWABLE_WINDOW ||
+ pSrcDrawable->type != DRAWABLE_WINDOW)))
+ ordering = CT_YXBANDED;
+ else
+ ordering = CT_UNSORTED;
+
+ srcregion = RECTS_TO_REGION(pScreen, nbox, rects, ordering);
xfree(rects);
if (!pGC || !exaGCReadsDestination(pDstDrawable, pGC->planemask,