pkgsrc-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Strange firefox behaviour



On 10/27/2012 12:45 PM, Rhialto wrote:

Ok.  So maybe the problem does come from EXA.  It's a long shot,
but the bug report I mentioned previously has a fix that could help:

https://bugs.freedesktop.org/show_bug.cgi?id=47266#c157

The example images attached to that bug report has exactly the
sort of corruption that I'm seeing. So that also points in this
direction. However the attached Radeon patches aren't the correct fix
(for me) since I have Intel graphics. Somebody else in the responses
remarks that too (comment 79).

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(&reg, &box, 1);
     RegionUnion(dst, dst, &reg);
     RegionUninit(&reg);
@@ -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,


Home | Main Index | Thread Index | Old Index