[arch-commits] Commit in xorg-server/trunk (2 files)

andyrtr at archlinux.org andyrtr at archlinux.org
Sun Apr 15 06:02:51 EDT 2012


    Date: Sunday, April 15, 2012 @ 06:02:51
  Author: andyrtr
Revision: 156177

upgpkg: xorg-server 1.12.1-2

add a testing patch to fix EXA issues with cairo 1.12

Added:
  xorg-server/trunk/EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff
Modified:
  xorg-server/trunk/PKGBUILD

-----------------------------------------------------------------+
 EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff |  116 ++++++++++
 PKGBUILD                                                        |    9 
 2 files changed, 124 insertions(+), 1 deletion(-)

Added: EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff
===================================================================
--- EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff	                        (rev 0)
+++ EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff	2012-04-15 10:02:51 UTC (rev 156177)
@@ -0,0 +1,116 @@
+--- xorg-server-1.12.1/exa/exa_glyphs.c	2012-03-30 04:57:25.000000000 +0200
++++ xorg-server-1.12.1/exa_glyphs.c.new	2012-04-15 11:48:51.683214230 +0200
+@@ -686,6 +686,7 @@
+     PixmapPtr pMaskPixmap = 0;
+     PicturePtr pMask = NULL;
+     ScreenPtr pScreen = pDst->pDrawable->pScreen;
++    ExaScreenPriv(pScreen);
+     int width = 0, height = 0;
+     int x, y;
+     int first_xOff = list->xOff, first_yOff = list->yOff;
+@@ -697,7 +698,6 @@
+     ExaGlyphBuffer buffer;
+ 
+     if (maskFormat) {
+-        ExaScreenPriv(pScreen);
+         GCPtr pGC;
+         xRectangle rect;
+ 
+@@ -719,22 +719,20 @@
+                                                 maskFormat->depth,
+                                                 CREATE_PIXMAP_USAGE_SCRATCH);
+         if (!pMaskPixmap)
+-            return;
++	    goto fallback;
+         component_alpha = NeedsComponent(maskFormat->format);
+         pMask = CreatePicture(0, &pMaskPixmap->drawable,
+                               maskFormat, CPComponentAlpha, &component_alpha,
+                               serverClient, &error);
+-        if (!pMask ||
+-            (!component_alpha && pExaScr->info->CheckComposite &&
+-             !(*pExaScr->info->CheckComposite) (PictOpAdd, pSrc, NULL, pMask)))
++        (*pScreen->DestroyPixmap) (pMaskPixmap);
++	if (!pMask)
++	    goto fallback;
++
++	if (!component_alpha && pExaScr->info->CheckComposite &&
++	    !(*pExaScr->info->CheckComposite) (PictOpAdd, pSrc, NULL, pMask))
+         {
+             PictFormatPtr argbFormat;
+ 
+-            (*pScreen->DestroyPixmap) (pMaskPixmap);
+-
+-            if (!pMask)
+-                return;
+-
+             /* The driver can't seem to composite to a8, let's try argb (but
+              * without component-alpha) */
+             FreePicture((pointer) pMask, (XID) 0);
+@@ -748,15 +746,25 @@
+                                                     maskFormat->depth,
+                                                     CREATE_PIXMAP_USAGE_SCRATCH);
+             if (!pMaskPixmap)
+-                return;
++	    goto fallback;
+ 
+             pMask = CreatePicture(0, &pMaskPixmap->drawable, maskFormat, 0, 0,
+                                   serverClient, &error);
+-            if (!pMask) {
+-                (*pScreen->DestroyPixmap) (pMaskPixmap);
+-                return;
+-            }
++            (*pScreen->DestroyPixmap) (pMaskPixmap);
++	    if (!pMask)
++	    goto fallback;
+         }
++	  
++	if (pExaScr->info->CheckComposite &&
++	    (!(*pExaScr->info->CheckComposite) (PictOpAdd, pSrc, NULL, pMask) ||
++	     (!(*pExaScr->info->CheckComposite) (op, pSrc, pMask, pDst) &&
++	      (op != PictOpOver ||
++	       !(*pExaScr->info->CheckComposite) (PictOpOutReverse, pSrc, pMask, pDst) ||
++	       !(*pExaScr->info->CheckComposite) (PictOpOver, pSrc, pMask, pDst))))) {
++	    FreePicture ((pointer) pMask, (XID) 0);
++	    goto fallback;
++	}
++
+         pGC = GetScratchGC(pMaskPixmap->drawable.depth, pScreen);
+         ValidateGC(&pMaskPixmap->drawable, pGC);
+         rect.x = 0;
+@@ -769,6 +777,13 @@
+         y = -extents.y1;
+     }
+     else {
++    	if (pExaScr->info->CheckComposite &&
++	    !(*pExaScr->info->CheckComposite) (op, pSrc, NULL, pDst) &&
++	    (op != PictOpOver ||
++	     !(*pExaScr->info->CheckComposite) (PictOpOutReverse, pSrc, NULL, pDst) ||
++	     !(*pExaScr->info->CheckComposite) (PictOpOver, pSrc, NULL, pDst)))
++	    goto fallback;
++
+         x = 0;
+         y = 0;
+     }
+@@ -834,6 +849,10 @@
+                          xSrc + x - first_xOff,
+                          ySrc + y - first_yOff, 0, 0, x, y, width, height);
+         FreePicture((pointer) pMask, (XID) 0);
+-        (*pScreen->DestroyPixmap) (pMaskPixmap);
+     }
++    
++    return;
++
++fallback:
++    ExaCheckGlyphs(op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
+ }
+--- xorg-server-1.12.1/exa/exa_render.c	2012-03-30 04:57:25.000000000 +0200
++++ xorg-server-1.12.1/exa_render.c.new	2012-04-15 11:50:35.272482047 +0200
+@@ -878,7 +878,7 @@
+     Bool saveMaskRepeat = pMask ? pMask->repeat : 0;
+     RegionRec region;
+ 
+-    if (pExaScr->swappedOut)
++    if (pExaScr->fallback_counter || pExaScr->swappedOut)
+         goto fallback;
+ 
+     /* Remove repeat in source if useless */

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2012-04-15 09:27:34 UTC (rev 156176)
+++ PKGBUILD	2012-04-15 10:02:51 UTC (rev 156177)
@@ -4,7 +4,7 @@
 pkgbase=xorg-server
 pkgname=('xorg-server' 'xorg-server-xephyr' 'xorg-server-xdmx' 'xorg-server-xvfb' 'xorg-server-xnest' 'xorg-server-common' 'xorg-server-devel')
 pkgver=1.12.1
-pkgrel=1
+pkgrel=2
 arch=('i686' 'x86_64')
 license=('custom')
 url="http://xorg.freedesktop.org"
@@ -16,6 +16,7 @@
 source=(${url}/releases/individual/xserver/${pkgbase}-${pkgver}.tar.bz2
         autoconfig-nvidia.patch
         autoconfig-sis.patch
+        EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff
         #git-fixes.patch
         xvfb-run
         xvfb-run.1
@@ -23,6 +24,7 @@
 sha1sums=('922b963901f4711449b53fb32ce3e14f5b642766'
           '63836e5cfb4ae7353fb2e31239a544409c7ead32'
           '175de5630b43dbc97778adfba5563b7fdd77f11f'
+          '4acb39587f73bcbb9a331377d6ef99cb73eb95a8'
           'c94f742d3f9cabf958ae58e4015d9dd185aabedc'
           '6838fc00ef4618c924a77e0fb03c05346080908a'
           '993798f3d22ad672d769dae5f48d1fa068d5578f')
@@ -36,6 +38,11 @@
   # Use unofficial imedia SiS driver for supported SiS devices
   patch -Np0 -i "${srcdir}/autoconfig-sis.patch"
 
+  # fix glitches and crashes with EXA and cairo 1.12
+  # taken from https://bugs.freedesktop.org/show_bug.cgi?id=47266
+  # and reworked for 1.12.1 changes
+  patch -Np1 -i ${srcdir}/EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff
+
   # Add post-release patches from 1.11 branch
 #  patch -Np1 -i "${srcdir}/git-fixes.patch"
 



More information about the arch-commits mailing list