summaryrefslogtreecommitdiff
path: root/extra/xorg-server
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2012-05-14 00:02:14 +0000
committerroot <root@rshg054.dnsready.net>2012-05-14 00:02:14 +0000
commitd3af8dc0117dc1ce4fea3d05c7a2d7786bd78986 (patch)
tree31feb3c3623dd48f13ce1cdbdf10d870ea5b5678 /extra/xorg-server
parente8aea505d7f36277edd02ef965bc3f8e1c81ee5d (diff)
Mon May 14 00:02:13 UTC 2012
Diffstat (limited to 'extra/xorg-server')
-rw-r--r--extra/xorg-server/EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff116
-rw-r--r--extra/xorg-server/PKGBUILD11
2 files changed, 125 insertions, 2 deletions
diff --git a/extra/xorg-server/EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff b/extra/xorg-server/EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff
new file mode 100644
index 000000000..12c110151
--- /dev/null
+++ b/extra/xorg-server/EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff
@@ -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 */
diff --git a/extra/xorg-server/PKGBUILD b/extra/xorg-server/PKGBUILD
index dd14c2e75..0ab1942fa 100644
--- a/extra/xorg-server/PKGBUILD
+++ b/extra/xorg-server/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 156103 2012-04-14 07:35:46Z andyrtr $
+# $Id: PKGBUILD 158860 2012-05-12 13:09:37Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
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 @@ options=('!libtool')
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 @@ source=(${url}/releases/individual/xserver/${pkgbase}-${pkgver}.tar.bz2
sha1sums=('922b963901f4711449b53fb32ce3e14f5b642766'
'63836e5cfb4ae7353fb2e31239a544409c7ead32'
'175de5630b43dbc97778adfba5563b7fdd77f11f'
+ '4acb39587f73bcbb9a331377d6ef99cb73eb95a8'
'c94f742d3f9cabf958ae58e4015d9dd185aabedc'
'6838fc00ef4618c924a77e0fb03c05346080908a'
'993798f3d22ad672d769dae5f48d1fa068d5578f')
@@ -36,6 +38,11 @@ build() {
# 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"