summaryrefslogtreecommitdiff
path: root/extra
diff options
context:
space:
mode:
authorNicolás Reynolds <fauno@endefensadelsl.org>2014-04-06 03:44:19 +0000
committerNicolás Reynolds <fauno@endefensadelsl.org>2014-04-06 03:44:19 +0000
commit38eab99b0f820f0d7720c7bc4c1dab4a7d5eaeab (patch)
tree45f0da5464a9e95bb5fbbf579094741cf6c66317 /extra
parent12c37e7b5594be3af3c03e543648b2a1c430bdcc (diff)
Sun Apr 6 03:39:50 UTC 2014
Diffstat (limited to 'extra')
-rw-r--r--extra/hwloc/PKGBUILD8
-rw-r--r--extra/perl-dbd-sqlite/PKGBUILD6
-rw-r--r--extra/xf86-video-intel/PKGBUILD16
-rw-r--r--extra/xf86-video-intel/git_fixes.diff327
-rw-r--r--extra/xf86-video-intel/sna-avoid-discarding-damage.patch103
5 files changed, 122 insertions, 338 deletions
diff --git a/extra/hwloc/PKGBUILD b/extra/hwloc/PKGBUILD
index d6e7ea7bd..9f52a5ae2 100644
--- a/extra/hwloc/PKGBUILD
+++ b/extra/hwloc/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 208140 2014-03-18 07:41:23Z eric $
+# $Id: PKGBUILD 209842 2014-04-05 18:40:31Z eric $
# Maintainer : Stéphane Gaudreault <stephane@archlinux.org>
# Contributor: Sylvain HENRY <hsyl20@yahoo.fr>
# Contributor: Hervé YVIQUEL <elldekaa@gmail.com>
pkgname=hwloc
-pkgver=1.8.1
+pkgver=1.9
pkgrel=1
pkgdesc="Portable Hardware Locality is a portable abstraction of hierarchical architectures"
arch=('i686' 'x86_64')
@@ -12,8 +12,8 @@ url="http://www.open-mpi.org/projects/hwloc/"
license=('BSD')
depends=('sh' 'pciutils' 'cairo' 'libxml2')
options=('!docs')
-source=(http://www.open-mpi.org/software/hwloc/v${pkgver%.*}/downloads/${pkgname}-${pkgver}.tar.bz2)
-sha1sums=('fe465bc02da7b4a96b362ea73bdc0b8e4cf80040')
+source=(http://www.open-mpi.org/software/hwloc/v${pkgver}/downloads/${pkgname}-${pkgver}.tar.bz2)
+sha1sums=('99646446502e0f9952170bf1082be63361d99b6d')
build() {
cd ${pkgname}-${pkgver}
diff --git a/extra/perl-dbd-sqlite/PKGBUILD b/extra/perl-dbd-sqlite/PKGBUILD
index 70f9ee742..4ebb56f6d 100644
--- a/extra/perl-dbd-sqlite/PKGBUILD
+++ b/extra/perl-dbd-sqlite/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 192099 2013-08-05 20:52:00Z eric $
+# $Id: PKGBUILD 209840 2014-04-05 17:56:16Z eric $
# Maintainer:
pkgname=perl-dbd-sqlite
-pkgver=1.40
+pkgver=1.42
pkgrel=1
pkgdesc="Self-contained RDBMS in a DBI driver"
arch=('i686' 'x86_64')
@@ -11,7 +11,7 @@ license=('GPL' 'PerlArtistic')
depends=('perl-dbi' 'sqlite')
options=('!emptydirs')
source=(http://www.cpan.org/authors/id/I/IS/ISHIGAKI/DBD-SQLite-${pkgver}.tar.gz)
-md5sums=('b9876882186499583428b14cf5c0e29c')
+md5sums=('86cfaf477cb9ddc39508f74f4268fc79')
build() {
cd DBD-SQLite-${pkgver}
diff --git a/extra/xf86-video-intel/PKGBUILD b/extra/xf86-video-intel/PKGBUILD
index cea87f2d6..a72065549 100644
--- a/extra/xf86-video-intel/PKGBUILD
+++ b/extra/xf86-video-intel/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 208571 2014-03-24 15:08:58Z andyrtr $
+# $Id: PKGBUILD 209836 2014-04-05 17:16:44Z lcarlier $
# Maintainer: AndyRTR <andyrtr@archlinux.org>
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-intel
pkgver=2.99.911
-pkgrel=1
+pkgrel=2
arch=(i686 x86_64)
url="http://xorg.freedesktop.org/"
license=('custom')
@@ -23,8 +23,16 @@ provides=('xf86-video-intel-uxa' 'xf86-video-intel-sna')
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}
diff --git a/extra/xf86-video-intel/git_fixes.diff b/extra/xf86-video-intel/git_fixes.diff
deleted file mode 100644
index dfc33928f..000000000
--- a/extra/xf86-video-intel/git_fixes.diff
+++ /dev/null
@@ -1,327 +0,0 @@
-From 699b4fd3139d1d6d02911d6c8f193ead3445f613 Mon Sep 17 00:00:00 2001
-From: Chris Wilson <chris@chris-wilson.co.uk>
-Date: Sat, 01 Feb 2014 20:13:53 +0000
-Subject: sna: Undo region translation before returning
-
-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 aecae51..d654660 100644
---- a/src/sna/sna_accel.c
-+++ b/src/sna/sna_accel.c
-@@ -2433,6 +2433,9 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
- sna_damage_add(&priv->cpu_damage, region);
- discard_gpu = false;
- }
-+
-+ if (dx | dy)
-+ RegionTranslate(region, -dx, -dy);
- } else
- sna_pixmap_free_cpu(sna, priv, false);
- }
---
-cgit v0.9.0.2-2-gbebe
-From 26613b046012f0ad968a15ab6bdfa8f6a6652e77 Mon Sep 17 00:00:00 2001
-From: Chris Wilson <chris@chris-wilson.co.uk>
-Date: Sat, 01 Feb 2014 21:37:41 +0000
-Subject: sna: Allow more inplace promotions of CPU to GPU bo
-
-If the CPU bo is wholly damaged, then it makes an ideal candidate for
-simply converting into the GPU bo.
-
-Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
----
-diff --git a/src/sna/kgem.c b/src/sna/kgem.c
-index f7404df..788b710 100644
---- a/src/sna/kgem.c
-+++ b/src/sna/kgem.c
-@@ -6743,14 +6743,19 @@ kgem_replace_bo(struct kgem *kgem,
- return dst;
- }
-
--bool kgem_bo_convert_to_gpu(struct kgem *kgem, struct kgem_bo *bo)
-+bool kgem_bo_convert_to_gpu(struct kgem *kgem,
-+ struct kgem_bo *bo,
-+ unsigned flags)
- {
-- DBG(("%s: converting handle=%d from CPU to GPU\n", __FUNCTION__, bo->handle));
-+ DBG(("%s: converting handle=%d from CPU to GPU, flags=%x\n", __FUNCTION__, bo->handle));
- assert(bo->tiling == I915_TILING_NONE);
-
- if (kgem->has_llc)
- return true;
-
-+ if (flags & MOVE_ASYNC_HINT && __kgem_bo_is_busy(kgem, bo))
-+ return false;
-+
- assert(bo->snoop);
-
- kgem_bo_submit(kgem, bo);
-diff --git a/src/sna/kgem.h b/src/sna/kgem.h
-index f670b60..4c4996f 100644
---- a/src/sna/kgem.h
-+++ b/src/sna/kgem.h
-@@ -301,7 +301,9 @@ struct kgem_bo *kgem_create_cpu_2d(struct kgem *kgem,
- int bpp,
- uint32_t flags);
-
--bool kgem_bo_convert_to_gpu(struct kgem *kgem, struct kgem_bo *bo);
-+bool kgem_bo_convert_to_gpu(struct kgem *kgem,
-+ struct kgem_bo *bo,
-+ unsigned flags);
-
- uint32_t kgem_bo_get_binding(struct kgem_bo *bo, uint32_t format);
- void kgem_bo_set_binding(struct kgem_bo *bo, uint32_t format, uint16_t offset);
-diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
-index d654660..9d7dec4 100644
---- a/src/sna/sna_accel.c
-+++ b/src/sna/sna_accel.c
-@@ -3868,7 +3868,7 @@ sna_pixmap_move_to_gpu(PixmapPtr pixmap, unsigned flags)
-
- if (tiling == I915_TILING_NONE &&
- priv->cpu_bo && !priv->shm &&
-- kgem_bo_convert_to_gpu(&sna->kgem, priv->cpu_bo)) {
-+ kgem_bo_convert_to_gpu(&sna->kgem, priv->cpu_bo, flags)) {
- assert(!priv->mapped);
- assert(!IS_STATIC_PTR(priv->ptr));
- #ifdef DEBUG_MEMORY
-@@ -3933,6 +3933,28 @@ sna_pixmap_move_to_gpu(PixmapPtr pixmap, unsigned flags)
- if (priv->cpu_damage == NULL)
- goto done;
-
-+ if (DAMAGE_IS_ALL(priv->cpu_damage) &&
-+ priv->gpu_bo->tiling == I915_TILING_NONE &&
-+ priv->cpu_bo && !priv->shm &&
-+ kgem_bo_convert_to_gpu(&sna->kgem, priv->cpu_bo, flags)) {
-+ assert(!priv->mapped);
-+ assert(!IS_STATIC_PTR(priv->ptr));
-+#ifdef DEBUG_MEMORY
-+ sna->debug_memory.cpu_bo_allocs--;
-+ sna->debug_memory.cpu_bo_bytes -= kgem_bo_size(priv->cpu_bo);
-+#endif
-+ sna_pixmap_free_gpu(sna, priv);
-+ priv->gpu_bo = priv->cpu_bo;
-+ priv->cpu_bo = NULL;
-+ priv->ptr = NULL;
-+ pixmap->devPrivate.ptr = NULL;
-+ sna_damage_all(&priv->gpu_damage,
-+ pixmap->drawable.width,
-+ pixmap->drawable.height);
-+ sna_damage_destroy(&priv->cpu_damage);
-+ goto done;
-+ }
-+
- if (priv->shm) {
- assert(!priv->flush);
- sna_add_flush_pixmap(sna, priv, priv->cpu_bo);
---
-cgit v0.9.0.2-2-gbebe
-From ed8d4f0ce3bff662d02063528df64d478ac0dc00 Mon Sep 17 00:00:00 2001
-From: Chris Wilson <chris@chris-wilson.co.uk>
-Date: Sat, 01 Feb 2014 21:38:47 +0000
-Subject: sna: Skip discarding CPU bo when using as a render target
-
-The issue with unwanted serialisation does not affect the async
-move-to-cpu of a render target.
-
-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 9d7dec4..4221a55 100644
---- a/src/sna/sna_accel.c
-+++ b/src/sna/sna_accel.c
-@@ -2420,19 +2420,45 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
-
- sna_damage_destroy(&priv->gpu_damage);
-
-- if ((flags & MOVE_READ) == 0 &&
-+ if ((flags & (MOVE_READ | MOVE_ASYNC_HINT)) == 0 &&
- priv->cpu_bo && !priv->cpu_bo->flush &&
- __kgem_bo_is_busy(&sna->kgem, priv->cpu_bo)) {
-+ DBG(("%s: active CPU bo replacing\n", __FUNCTION__));
-+ assert(!priv->shm);
-+ assert(!IS_STATIC_PTR(priv->ptr));
-+
- if (!region_subsumes_pixmap(region, pixmap)) {
-+ DBG(("%s: partial replacement\n", __FUNCTION__));
- if (get_drawable_deltas(drawable, pixmap, &dx, &dy))
- RegionTranslate(region, dx, dy);
-
-- sna_damage_subtract(&priv->cpu_damage, region);
-- if (sna_pixmap_move_to_gpu(pixmap, MOVE_READ | MOVE_ASYNC_HINT)) {
-- sna_pixmap_free_cpu(sna, priv, false);
-- sna_damage_add(&priv->cpu_damage, region);
-- discard_gpu = false;
-+ if (sna->kgem.has_llc &&
-+ sna_pixmap_choose_tiling(pixmap,
-+ DEFAULT_TILING) == I915_TILING_NONE) {
-+#ifdef DEBUG_MEMORY
-+ sna->debug_memory.cpu_bo_allocs--;
-+ sna->debug_memory.cpu_bo_bytes -= kgem_bo_size(priv->cpu_bo);
-+#endif
-+ DBG(("%s: promoting CPU bo to GPU bo\n", __FUNCTION__));
-+ sna_pixmap_free_gpu(sna, priv);
-+ priv->gpu_bo = priv->cpu_bo;
-+ priv->cpu_bo = NULL;
-+ priv->ptr = NULL;
-+ pixmap->devPrivate.ptr = NULL;
-+
-+ sna_damage_destroy(&priv->cpu_damage);
-+ } else {
-+ DBG(("%s: pushing surrounding damage to GPU bo\n", __FUNCTION__));
-+ sna_damage_subtract(&priv->cpu_damage, region);
-+ assert(priv->cpu_damage);
-+ if (sna_pixmap_move_to_gpu(pixmap, MOVE_READ | MOVE_ASYNC_HINT)) {
-+ sna_pixmap_free_cpu(sna, priv, false);
-+ if (priv->flush)
-+ sna_add_flush_pixmap(sna, priv, priv->gpu_bo);
-+ discard_gpu = false;
-+ }
- }
-+ sna_damage_add(&priv->cpu_damage, region);
-
- if (dx | dy)
- RegionTranslate(region, -dx, -dy);
---
-cgit v0.9.0.2-2-gbebe
-From 8b0748c57ee4c38ea98c4b6ca18cb2b99f8f9ed4 Mon Sep 17 00:00:00 2001
-From: Chris Wilson <chris@chris-wilson.co.uk>
-Date: Sat, 01 Feb 2014 21:54:43 +0000
-Subject: sna: Add some more DBG for choosing render targets
-
-Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
----
-diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
-index 08c9f78..aadc6f7 100644
---- a/src/sna/gen6_render.c
-+++ b/src/sna/gen6_render.c
-@@ -1831,6 +1831,8 @@ gen6_composite_set_target(struct sna *sna,
- BoxRec box;
- unsigned int hint;
-
-+ DBG(("%s: (%d, %d)x(%d, %d), partial?=%d\n", __FUNCTION__, x, y, w, h));
-+
- op->dst.pixmap = get_drawable_pixmap(dst->pDrawable);
- op->dst.format = dst->format;
- op->dst.width = op->dst.pixmap->drawable.width;
-diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
-index 1574813..a90bd15 100644
---- a/src/sna/gen7_render.c
-+++ b/src/sna/gen7_render.c
-@@ -2111,6 +2111,8 @@ gen7_composite_set_target(struct sna *sna,
- BoxRec box;
- unsigned int hint;
-
-+ DBG(("%s: (%d, %d)x(%d, %d), partial?=%d\n", __FUNCTION__, x, y, w, h));
-+
- op->dst.pixmap = get_drawable_pixmap(dst->pDrawable);
- op->dst.format = dst->format;
- op->dst.width = op->dst.pixmap->drawable.width;
-diff --git a/src/sna/gen8_render.c b/src/sna/gen8_render.c
-index 5c718bc..c096db1 100644
---- a/src/sna/gen8_render.c
-+++ b/src/sna/gen8_render.c
-@@ -1862,6 +1862,8 @@ gen8_composite_set_target(struct sna *sna,
- BoxRec box;
- unsigned int hint;
-
-+ DBG(("%s: (%d, %d)x(%d, %d), partial?=%d\n", __FUNCTION__, x, y, w, h));
-+
- op->dst.pixmap = get_drawable_pixmap(dst->pDrawable);
- op->dst.format = dst->format;
- op->dst.width = op->dst.pixmap->drawable.width;
---
-cgit v0.9.0.2-2-gbebe
-From 853588ad5be9407d2123f6055458ca84e72b8eb9 Mon Sep 17 00:00:00 2001
-From: Chris Wilson <chris@chris-wilson.co.uk>
-Date: Sat, 01 Feb 2014 21:55:09 +0000
-Subject: sna: If IGNORE_CPU is not set we must mark the move as MOVE_READ
-
-Logic reversal in discarding CPU damage. An old bug revealed by the more
-aggressive attempts to discard CPU damage.
-
-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 4221a55..acf4849 100644
---- a/src/sna/sna_accel.c
-+++ b/src/sna/sna_accel.c
-@@ -3689,7 +3689,7 @@ cpu_fail:
- goto cpu_fail;
-
- if (!sna_drawable_move_region_to_cpu(&pixmap->drawable, &region,
-- (flags & IGNORE_CPU ? MOVE_READ : 0) | MOVE_WRITE | MOVE_ASYNC_HINT)) {
-+ (flags & IGNORE_CPU ? 0 : MOVE_READ) | MOVE_WRITE | MOVE_ASYNC_HINT)) {
- DBG(("%s: failed to move-to-cpu, fallback\n", __FUNCTION__));
- goto cpu_fail;
- }
---
-cgit v0.9.0.2-2-gbebe
-From 7f08250a8960f90f6bd34de8c4a17870703bfa60 Mon Sep 17 00:00:00 2001
-From: Chris Wilson <chris@chris-wilson.co.uk>
-Date: Sun, 02 Feb 2014 03:52:11 +0000
-Subject: sna: Reconstruct damage for the partially replaced discarded CPU bo
-
-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 acf4849..d31fa22 100644
---- a/src/sna/sna_accel.c
-+++ b/src/sna/sna_accel.c
-@@ -2432,7 +2432,7 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
- if (get_drawable_deltas(drawable, pixmap, &dx, &dy))
- RegionTranslate(region, dx, dy);
-
-- if (sna->kgem.has_llc &&
-+ if (sna->kgem.has_llc && !priv->pinned &&
- sna_pixmap_choose_tiling(pixmap,
- DEFAULT_TILING) == I915_TILING_NONE) {
- #ifdef DEBUG_MEMORY
-@@ -2440,13 +2440,17 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
- sna->debug_memory.cpu_bo_bytes -= kgem_bo_size(priv->cpu_bo);
- #endif
- DBG(("%s: promoting CPU bo to GPU bo\n", __FUNCTION__));
-- sna_pixmap_free_gpu(sna, priv);
-+ if (priv->gpu_bo)
-+ sna_pixmap_free_gpu(sna, priv);
- priv->gpu_bo = priv->cpu_bo;
- priv->cpu_bo = NULL;
- priv->ptr = NULL;
- pixmap->devPrivate.ptr = NULL;
-
-- sna_damage_destroy(&priv->cpu_damage);
-+ priv->gpu_damage = priv->cpu_damage;
-+ priv->cpu_damage = NULL;
-+
-+ discard_gpu = false;
- } else {
- DBG(("%s: pushing surrounding damage to GPU bo\n", __FUNCTION__));
- sna_damage_subtract(&priv->cpu_damage, region);
-@@ -2456,6 +2460,12 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
- if (priv->flush)
- sna_add_flush_pixmap(sna, priv, priv->gpu_bo);
- discard_gpu = false;
-+
-+ assert(priv->cpu_damage == NULL);
-+ sna_damage_all(&priv->gpu_damage,
-+ pixmap->drawable.width,
-+ pixmap->drawable.height);
-+ sna_damage_subtract(&priv->gpu_damage, region);
- }
- }
- sna_damage_add(&priv->cpu_damage, region);
-@@ -3959,9 +3969,9 @@ sna_pixmap_move_to_gpu(PixmapPtr pixmap, unsigned flags)
- if (priv->cpu_damage == NULL)
- goto done;
-
-- if (DAMAGE_IS_ALL(priv->cpu_damage) &&
-+ if (DAMAGE_IS_ALL(priv->cpu_damage) && priv->cpu_bo &&
-+ !priv->pinned && !priv->shm &&
- priv->gpu_bo->tiling == I915_TILING_NONE &&
-- priv->cpu_bo && !priv->shm &&
- kgem_bo_convert_to_gpu(&sna->kgem, priv->cpu_bo, flags)) {
- assert(!priv->mapped);
- assert(!IS_STATIC_PTR(priv->ptr));
---
-cgit v0.9.0.2-2-gbebe
-
diff --git a/extra/xf86-video-intel/sna-avoid-discarding-damage.patch b/extra/xf86-video-intel/sna-avoid-discarding-damage.patch
new file mode 100644
index 000000000..8e97ee591
--- /dev/null
+++ b/extra/xf86-video-intel/sna-avoid-discarding-damage.patch
@@ -0,0 +1,103 @@
+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
+