Date: Saturday, April 5, 2014 @ 15:04:07
  Author: lcarlier
Revision: 209827

upgpkg: xf86-video-intel 2.99.911-1

Fix corruption in firefox with SNA (FS#39747)

Added:
  xf86-video-intel/trunk/sna-avoid-discarding-damage.patch
Modified:
  xf86-video-intel/trunk/PKGBUILD

-----------------------------------+
 PKGBUILD                          |   12 +++-
 sna-avoid-discarding-damage.patch |  103 ++++++++++++++++++++++++++++++++++++
 2 files changed, 113 insertions(+), 2 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2014-04-05 11:12:23 UTC (rev 209826)
+++ PKGBUILD    2014-04-05 13:04:07 UTC (rev 209827)
@@ -23,9 +23,17 @@
 conflicts=('xorg-server<1.15.0' 'X-ABI-VIDEODRV_VERSION<15' 
'X-ABI-VIDEODRV_VERSION>=16'
            'xf86-video-intel-sna' 'xf86-video-intel-uxa' 'xf86-video-i810' 
'xf86-video-intel-legacy')
 groups=('xorg-drivers' 'xorg')
-source=(${url}/archive/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha256sums=('4e7a68491bcc4d49912c5ec3ee688badce3f929ce1b7618ede9d8001827270d6')
+source=(${url}/archive/individual/driver/${pkgname}-${pkgver}.tar.bz2
+        sna-avoid-discarding-damage.patch)
+sha256sums=('4e7a68491bcc4d49912c5ec3ee688badce3f929ce1b7618ede9d8001827270d6'
+            '122637d66a70d40b098b0bb732000c8227ea1dd155af0c71f605f87934822dcb')
 
+prepare() {
+  cd ${pkgname}-${pkgver}
+  # Fix FS#39747 (merged upstream)
+  patch -Np1 -i ../sna-avoid-discarding-damage.patch
+}
+
 build() {
   cd ${pkgname}-${pkgver}
   ./configure --prefix=/usr \

Added: sna-avoid-discarding-damage.patch
===================================================================
--- sna-avoid-discarding-damage.patch                           (rev 0)
+++ sna-avoid-discarding-damage.patch   2014-04-05 13:04:07 UTC (rev 209827)
@@ -0,0 +1,103 @@
+From 3310ee89c1f1a663de5f5b12b8125809a213996f Mon Sep 17 00:00:00 2001
+From: Chris Wilson <[email protected]>
+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 <[email protected]>
+Date:   Thu Feb 27 08:33:52 2014 +0000
+
+    sna: Avoid promoting region-to-whole migration and discarding damage
+
+Reported-by: [email protected]
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=77063
+Signed-off-by: Chris Wilson <[email protected]>
+---
+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
+

Reply via email to