Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=xorgtesting.git;a=commitdiff;h=5ca495b8022f878fd380b62329ecbb986e9aeb82

commit 5ca495b8022f878fd380b62329ecbb986e9aeb82
Author: James Buren <r...@frugalware.org>
Date:   Thu May 3 02:38:32 2012 -0500

xorg-server-1.12.1-2-x86_64
* apply patch from ARCH that works around gfx corruption related to cairo

diff --git a/source/x11/xorg-server/FrugalBuild 
b/source/x11/xorg-server/FrugalBuild
index cba53cc..9349b13 100644
--- a/source/x11/xorg-server/FrugalBuild
+++ b/source/x11/xorg-server/FrugalBuild
@@ -9,7 +9,7 @@ USE_SERVERDMX=${USE_SERVERDMX:-"y"}

pkgname=xorg-server
pkgver=1.12.1
-pkgrel=1
+pkgrel=2
pkgdesc="Modular X.Org X Server"
groups=('x11' 'xorg-core')
archs=('i686' 'x86_64' 'arm')
@@ -46,11 +46,13 @@ fi

source=("${source[@]}" \
desktop \
-       10-evdev.conf)
+       10-evdev.conf \
+       exa-gfx-corruption-workaround.patch)

sha1sums=("${sha1sums[@]}" \
'905cc57547421ff3ca77ec1c8e6898a7a414346f' \
-         '3fa8d717bce03296e6b097279a410d9672000b08')
+         '3fa8d717bce03296e6b097279a410d9672000b08' \
+         'b174513367cc854e4d4440e3394161d1d0222491')

Fconfopts="${Fconfopts[@]}
--disable-static \
diff --git a/source/x11/xorg-server/exa-gfx-corruption-workaround.patch 
b/source/x11/xorg-server/exa-gfx-corruption-workaround.patch
new file mode 100644
index 0000000..fb30467
--- /dev/null
+++ b/source/x11/xorg-server/exa-gfx-corruption-workaround.patch
@@ -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 */
_______________________________________________
Frugalware-git mailing list
Frugalware-git@frugalware.org
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to