diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 4dab391..f6b423c 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -19,7 +19,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.7.0 -Release: 4%{dist} +Release: 5%{dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -76,6 +76,7 @@ Patch6045: xserver-1.7.0-randr-gamma-restore.patch Patch6046: xserver-1.7.0-exa-looping-forever-is-evil.patch Patch6047: xserver-1.7.0-glx-versioning.patch +Patch6048: xserver-1.7.0-exa-fix-mixed.patch %define moduledir %{_libdir}/xorg/modules %define drimoduledir %{_libdir}/dri @@ -504,6 +505,9 @@ rm -rf $RPM_BUILD_ROOT %{xserver_source_dir} %changelog +* Sat Oct 24 2009 Ben Skeggs 1.7.0-5 +- Fix unbalancing of Prepare/FinishAccess in EXA mixed pixmaps (rh#528005) + * Fri Oct 16 2009 Dave Airlie 1.7.0-4 - update GLX for 1.4 version reporting diff --git a/xserver-1.7.0-exa-fix-mixed.patch b/xserver-1.7.0-exa-fix-mixed.patch new file mode 100644 index 0000000..ecb26ad --- /dev/null +++ b/xserver-1.7.0-exa-fix-mixed.patch @@ -0,0 +1,48 @@ +From 7efbe71629d31d79ab95cc1dae93f0fa742e9533 Mon Sep 17 00:00:00 2001 +From: Ben Skeggs +Date: Thu, 22 Oct 2009 11:31:22 +1000 +Subject: [PATCH] EXA: fix mixed-pixmaps issue where we could do accel with pixmap mapped +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The problem occurs in the following situation: + +1. Create Pixmap +2. Software fallback on pixmap: pExaPixmap->pDamage created +3. Accel to pixmap: driver pixmap created, exaPixmapIsOffscreen() now true +4. Software fallback on pixmap +4.1: PrepareAccess() from driver succeeds, so no DFS to system memory copy +4.2: Software rendering... +4.3: (pExaPixmap->pDamage && exaPixmapIsOffscreen()) is true, so we try + to (incorrectly) UTS the data back to the driver pixmap, when we + should just call the driver's FinishAccess() hook. +4.4: fail + +The patch adds an additional check on pExaPixmap->offscreen, which should +(for the cases exaPixmapIsOffscreen() will return true) only be FALSE +when we haven't used PrepareAccess() on the pixmap. + +Signed-off-by: Ben Skeggs +Acked-By: Michel Dänzer +--- + exa/exa_migration_mixed.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c +index f42c9c2..52b18b4 100644 +--- a/exa/exa_migration_mixed.c ++++ b/exa/exa_migration_mixed.c +@@ -202,7 +202,8 @@ void exaFinishAccess_mixed(PixmapPtr pPixmap, int index) + { + ExaPixmapPriv(pPixmap); + +- if (pExaPixmap->pDamage && exaPixmapIsOffscreen(pPixmap)) { ++ if (pExaPixmap->pDamage && exaPixmapIsOffscreen(pPixmap) && ++ !pExaPixmap->offscreen) { + DamageRegionProcessPending(&pPixmap->drawable); + exaMoveInPixmap_mixed(pPixmap); + } +-- +1.6.5.rc2 +