I'm talking about the patch mentioned in comment 157, i.e., the
patch:
https://bugs.freedesktop.org/attachment.cgi?id=68718
This patch is not hardware-specific, as it fixes a problem in EXA.
But the patch does not apply cleanly against NetBSD -current xsrc
sources, though. I regenerated the patch so that it will apply
cleanly, see attachment. I've only build-tested it.
Grégoire
Index: exa/exa_priv.h
===================================================================
RCS file: /cvsroot/xsrc/external/mit/xorg-server/dist/exa/exa_priv.h,v
retrieving revision 1.1.1.4
diff -u -r1.1.1.4 exa_priv.h
--- exa/exa_priv.h 23 Nov 2010 05:21:03 -0000 1.1.1.4
+++ exa/exa_priv.h 27 Oct 2012 11:29:35 -0000
@@ -206,6 +206,7 @@
RegionRec srcReg;
RegionRec maskReg;
PixmapPtr srcPix;
+ PixmapPtr maskPix;
} ExaScreenPrivRec, *ExaScreenPrivPtr;
Index: exa/exa_unaccel.c
===================================================================
RCS file: /cvsroot/xsrc/external/mit/xorg-server/dist/exa/exa_unaccel.c,v
retrieving revision 1.1.1.6
diff -u -r1.1.1.6 exa_unaccel.c
--- exa/exa_unaccel.c 2 Aug 2011 06:56:46 -0000 1.1.1.6
+++ exa/exa_unaccel.c 27 Oct 2012 11:29:35 -0000
@@ -449,6 +449,13 @@
RegionPtr dst;
int xoff, yoff;
+ if (pExaScr->srcPix == pPix)
+ dst = &pExaScr->srcReg;
+ else if (pExaScr->maskPix == pPix)
+ dst = &pExaScr->maskReg;
+ else
+ return;
+
exaGetDrawableDeltas(pDrawable, pPix, &xoff, &yoff);
box.x1 = x + xoff;
@@ -456,9 +463,6 @@
box.x2 = box.x1 + width;
box.y2 = box.y1 + height;
- dst = (pExaScr->srcPix == pPix) ? &pExaScr->srcReg :
- &pExaScr->maskReg;
-
RegionInit(®, &box, 1);
RegionUnion(dst, dst, ®);
RegionUninit(®);
@@ -507,17 +511,20 @@
RegionTranslate(pSrc->pCompositeClip,
-pSrc->pDrawable->x,
-pSrc->pDrawable->y);
- }
+ } else
+ pExaScr->srcPix = NULL;
if (pMask && pMask->pDrawable) {
pMaskPix = exaGetDrawablePixmap(pMask->pDrawable);
RegionNull(&pExaScr->maskReg);
maskReg = &pExaScr->maskReg;
+ pExaScr->maskPix = pMaskPix;
if (pMask != pDst && pMask != pSrc)
RegionTranslate(pMask->pCompositeClip,
-pMask->pDrawable->x,
-pMask->pDrawable->y);
- }
+ } else
+ pExaScr->maskPix = NULL;
RegionTranslate(pDst->pCompositeClip,
-pDst->pDrawable->x,