xf86-video-intel: 2 commits - src/sna/sna_accel.c

Chris Wilson ickle at kemper.freedesktop.org
Mon Feb 10 08:42:56 PST 2014


 src/sna/sna_accel.c |   20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

New commits:
commit 5142d1ca3fd877f2ca9277af314f6432580370de
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Feb 10 16:42:06 2014 +0000

    sna: Remove damaged region after converting CPU bo to GPU bo
    
    Reported-by: Jiri Slaby <jirislaby at gmail.com>
    References: https://bugs.freedesktop.org/show_bug.cgi?id=70461
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 871b1f8..56af058 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -2440,6 +2440,7 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
 					priv->gpu_damage = priv->cpu_damage;
 					priv->cpu_damage = NULL;
 
+					sna_damage_subtract(&priv->gpu_damage, region);
 					discard_gpu = false;
 				} else {
 					DBG(("%s: pushing surrounding damage to GPU bo\n", __FUNCTION__));
@@ -2449,13 +2450,13 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
 						sna_pixmap_free_cpu(sna, priv, false);
 						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);
+						discard_gpu = false;
 					}
 				}
 				sna_damage_add(&priv->cpu_damage, region);
commit 1267235fd474c5249d45a7015e3d741dc607e57f
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Feb 10 16:37:38 2014 +0000

    sna: Check for overwriting damage before applying clear
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 531dd40..871b1f8 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -1960,6 +1960,7 @@ _sna_pixmap_move_to_cpu(PixmapPtr pixmap, unsigned int flags)
 	if (DAMAGE_IS_ALL(priv->cpu_damage)) {
 		DBG(("%s: CPU all-damaged\n", __FUNCTION__));
 		assert(priv->gpu_damage == NULL || DAMAGE_IS_ALL(priv->gpu_damage));
+		assert(priv->gpu_damage == NULL || (flags & MOVE_WRITE) == 0);
 		goto done;
 	}
 
@@ -2391,6 +2392,7 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
 	if (flags & MOVE_WRITE && priv->gpu_bo && priv->gpu_bo->proxy) {
 		DBG(("%s: discarding cached upload buffer\n", __FUNCTION__));
 		assert(DAMAGE_IS_ALL(priv->cpu_damage));
+		assert(priv->gpu_damage == NULL);
 		assert(!priv->pinned);
 		assert(!priv->mapped);
 		kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
@@ -2664,11 +2666,20 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
 	}
 
 	assert(priv->gpu_bo->proxy == NULL);
+
+	if ((flags & MOVE_READ) == 0) {
+		assert(flags & MOVE_WRITE);
+		sna_damage_subtract(&priv->gpu_damage, region);
+		priv->clear = false;
+		goto done;
+	}
+
 	if (priv->clear) {
 		int n = RegionNumRects(region);
 		BoxPtr box = RegionRects(region);
 
 		assert(DAMAGE_IS_ALL(priv->gpu_damage));
+		assert(priv->cpu_damage == NULL);
 
 		DBG(("%s: pending clear, doing partial fill\n", __FUNCTION__));
 		if (priv->cpu_bo) {
@@ -2697,12 +2708,6 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
 		goto done;
 	}
 
-	if ((flags & MOVE_READ) == 0) {
-		assert(flags & MOVE_WRITE);
-		sna_damage_subtract(&priv->gpu_damage, region);
-		goto done;
-	}
-
 	if (MIGRATE_ALL && priv->gpu_damage) {
 		BoxPtr box;
 		int n = sna_damage_get_boxes(priv->gpu_damage, &box);


More information about the xorg-commit mailing list