summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Stakenvicius <axs@gentoo.org>2014-05-14 16:41:08 +0000
committerIan Stakenvicius <axs@gentoo.org>2014-05-14 16:41:08 +0000
commit67af248b3e4f50c38eb504824ca0635d6da5f911 (patch)
tree7cb6656b7d7d894c24dd29da4c04019545fa7b67 /x11-drivers
parentRemove old. (diff)
downloadgentoo-2-67af248b3e4f50c38eb504824ca0635d6da5f911.tar.gz
gentoo-2-67af248b3e4f50c38eb504824ca0635d6da5f911.tar.bz2
gentoo-2-67af248b3e4f50c38eb504824ca0635d6da5f911.zip
fixed sna acceleration issue affecting gstreamer-0.10, upstream bug https://bugs.freedesktop.org/show_bug.cgi?id=77063 , fixes bug 506542
(Portage version: 2.2.8-r1/cvs/Linux x86_64, signed Manifest commit with key 2B6559ED)
Diffstat (limited to 'x11-drivers')
-rw-r--r--x11-drivers/xf86-video-intel/ChangeLog10
-rw-r--r--x11-drivers/xf86-video-intel/files/xf86-video-intel-2.99.911-sna-pixmap-migration.patch102
-rw-r--r--x11-drivers/xf86-video-intel/xf86-video-intel-2.99.911-r1.ebuild (renamed from x11-drivers/xf86-video-intel/xf86-video-intel-2.99.911.ebuild)6
3 files changed, 116 insertions, 2 deletions
diff --git a/x11-drivers/xf86-video-intel/ChangeLog b/x11-drivers/xf86-video-intel/ChangeLog
index 7c9d2b9c3e77..dd403ce43628 100644
--- a/x11-drivers/xf86-video-intel/ChangeLog
+++ b/x11-drivers/xf86-video-intel/ChangeLog
@@ -1,6 +1,14 @@
# ChangeLog for x11-drivers/xf86-video-intel
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/x11-drivers/xf86-video-intel/ChangeLog,v 1.159 2014/03/26 15:26:03 remi Exp $
+# $Header: /var/cvsroot/gentoo-x86/x11-drivers/xf86-video-intel/ChangeLog,v 1.160 2014/05/14 16:41:08 axs Exp $
+
+*xf86-video-intel-2.99.911-r1 (14 May 2014)
+
+ 14 May 2014; Ian Stakenvicius (_AxS_) <axs@gentoo.org>
+ +files/xf86-video-intel-2.99.911-sna-pixmap-migration.patch,
+ +xf86-video-intel-2.99.911-r1.ebuild, -xf86-video-intel-2.99.911.ebuild:
+ fixed sna acceleration issue affecting gstreamer-0.10, upstream bug
+ https://bugs.freedesktop.org/show_bug.cgi?id=77063 , fixes bug 506542
*xf86-video-intel-2.99.911 (26 Mar 2014)
diff --git a/x11-drivers/xf86-video-intel/files/xf86-video-intel-2.99.911-sna-pixmap-migration.patch b/x11-drivers/xf86-video-intel/files/xf86-video-intel-2.99.911-sna-pixmap-migration.patch
new file mode 100644
index 000000000000..a69e0a213270
--- /dev/null
+++ b/x11-drivers/xf86-video-intel/files/xf86-video-intel-2.99.911-sna-pixmap-migration.patch
@@ -0,0 +1,102 @@
+From 3310ee89c1f1a663de5f5b12b8125809a213996f Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Sat, 05 Apr 2014 11:18:31 +0000
+Subject: sna: Avoid discarding damage when applying WHOLE hint to pixmap migration
+
+Once again, we must be careful when promoting from a region to whole
+pixmap migration that we do not discard required damage.
+
+Fixes regression from
+commit 27ac9f574f65cbd535751c925e9b2e2d7c8a6b3a [2.99.911]
+Author: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Thu Feb 27 08:33:52 2014 +0000
+
+ sna: Avoid promoting region-to-whole migration and discarding damage
+
+Reported-by: gedgon@gmail.com
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=77063
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+---
+diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
+index 0116d54..71ba34d 100644
+--- a/src/sna/sna_accel.c
++++ b/src/sna/sna_accel.c
+@@ -2500,7 +2500,10 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
+ flags |= MOVE_INPLACE_HINT;
+ }
+
+- if (flags & MOVE_WHOLE_HINT && priv->gpu_damage == NULL)
++ if ((flags & (MOVE_WHOLE_HINT | MOVE_READ)) == (MOVE_WHOLE_HINT | MOVE_READ))
++ return _sna_pixmap_move_to_cpu(pixmap, flags);
++
++ if (flags & MOVE_WHOLE_HINT && priv->gpu_damage == NULL && priv->cpu_damage == NULL)
+ return _sna_pixmap_move_to_cpu(pixmap, flags);
+
+ if (priv->gpu_damage == NULL &&
+@@ -2527,22 +2530,18 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
+ return _sna_pixmap_move_to_cpu(pixmap, flags);
+ }
+
+- if ((flags & MOVE_READ) == 0 &&
+- priv->gpu_damage &&
+- region_subsumes_damage(region, priv->gpu_damage)) {
+- DBG(("%s: region [(%d, %d), (%d, %d)] subsumes damage [(%d,%d), (%d, %d)]\n",
++ if (flags & MOVE_WHOLE_HINT) {
++ DBG(("%s: region (%d, %d), (%d, %d) marked with WHOLE hint, pixmap %dx%d\n",
+ __FUNCTION__,
+ region->extents.x1,
+ region->extents.y1,
+ region->extents.x2,
+ region->extents.y2,
+- priv->gpu_damage->extents.x1,
+- priv->gpu_damage->extents.y1,
+- priv->gpu_damage->extents.x2,
+- priv->gpu_damage->extents.y2));
++ pixmap->drawable.width,
++ pixmap->drawable.height));
+ if (dx | dy)
+ RegionTranslate(region, -dx, -dy);
+- return _sna_pixmap_move_to_cpu(pixmap, flags);
++ return _sna_pixmap_move_to_cpu(pixmap, flags | MOVE_READ);
+ }
+
+ if (priv->move_to_gpu && !priv->move_to_gpu(sna, priv, MOVE_READ)) {
+@@ -4471,17 +4470,19 @@ try_upload_tiled_x(PixmapPtr pixmap, RegionRec *region,
+ if (wedged(sna))
+ return false;
+
+- DBG(("%s: bo? %d, can map? %d\n", __FUNCTION__,
+- priv->gpu_bo != NULL,
+- priv->gpu_bo ? kgem_bo_can_map__cpu(&sna->kgem, priv->gpu_bo, true) : 0));
+-
+ replaces = region->data == NULL &&
+ w >= pixmap->drawable.width &&
+ h >= pixmap->drawable.height;
+
++ DBG(("%s: bo? %d, can map? %d, replaces? %d\n", __FUNCTION__,
++ priv->gpu_bo != NULL,
++ priv->gpu_bo ? kgem_bo_can_map__cpu(&sna->kgem, priv->gpu_bo, true) : 0,
++ replaces));
++
+ if (priv->gpu_bo && (replaces || priv->gpu_bo->proxy)) {
+ DBG(("%s: discarding cached upload proxy\n", __FUNCTION__));
+ sna_pixmap_free_gpu(sna, priv);
++ replaces = true; /* Mark it all GPU damaged afterwards */
+ }
+ assert(priv->gpu_bo == NULL || priv->gpu_bo->proxy == NULL);
+
+@@ -4616,8 +4617,11 @@ sna_put_zpixmap_blt(DrawablePtr drawable, GCPtr gc, RegionPtr region,
+ return true;
+
+ hint = MOVE_WRITE;
+- if (w == pixmap->drawable.width && h*stride > 4096)
++ if (w == pixmap->drawable.width && (h+1)*stride > 65536) {
++ DBG(("%s: large upload (%d bytes), marking WHOLE_HINT\n",
++ __FUNCTION__, h*stride));
+ hint |= MOVE_WHOLE_HINT;
++ }
+
+ if (!sna_drawable_move_region_to_cpu(&pixmap->drawable, region, hint))
+ return false;
+--
+cgit v0.9.0.2-2-gbebe
diff --git a/x11-drivers/xf86-video-intel/xf86-video-intel-2.99.911.ebuild b/x11-drivers/xf86-video-intel/xf86-video-intel-2.99.911-r1.ebuild
index 7d1713c011ea..4f892c66a6f9 100644
--- a/x11-drivers/xf86-video-intel/xf86-video-intel-2.99.911.ebuild
+++ b/x11-drivers/xf86-video-intel/xf86-video-intel-2.99.911-r1.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/x11-drivers/xf86-video-intel/xf86-video-intel-2.99.911.ebuild,v 1.1 2014/03/26 15:26:03 remi Exp $
+# $Header: /var/cvsroot/gentoo-x86/x11-drivers/xf86-video-intel/xf86-video-intel-2.99.911-r1.ebuild,v 1.1 2014/05/14 16:41:08 axs Exp $
EAPI=5
@@ -40,6 +40,10 @@ DEPEND="${RDEPEND}
>=x11-proto/dri2proto-2.6
x11-proto/resourceproto"
+PATCHES=(
+ "${FILESDIR}"/${P}-sna-pixmap-migration.patch
+)
+
src_configure() {
XORG_CONFIGURE_OPTIONS=(
$(use_enable debug)