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

Chris Wilson ickle at kemper.freedesktop.org
Tue Jun 17 01:21:53 PDT 2014


 src/sna/sna_accel.c |   41 +++++++++++++++++++++++++++++++----------
 1 file changed, 31 insertions(+), 10 deletions(-)

New commits:
commit 96d1fe314c4bb4d862b057a440e575bd32d63460
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Jun 17 08:51:00 2014 +0100

    sna: Add a few missing checks for all-damaged
    
    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 f3f95e6..43fb6b9 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -2853,7 +2853,8 @@ move_to_cpu:
 				goto done;
 			}
 		} else {
-			if (sna_damage_contains_box__no_reduce(priv->cpu_damage,
+			if (DAMAGE_IS_ALL(priv->cpu_damage) ||
+			    sna_damage_contains_box__no_reduce(priv->cpu_damage,
 							       &region->extents)) {
 				assert(sna_damage_contains_box(&priv->gpu_damage, &region->extents) == PIXMAN_REGION_OUT);
 				assert(sna_damage_contains_box(&priv->cpu_damage, &region->extents) == PIXMAN_REGION_IN);
@@ -3623,7 +3624,8 @@ create_gpu_bo:
 					goto use_gpu_bo;
 			}
 
-			if (sna_damage_contains_box__no_reduce(priv->gpu_damage,
+			if (DAMAGE_IS_ALL(priv->gpu_damage) ||
+			    sna_damage_contains_box__no_reduce(priv->gpu_damage,
 							       &region.extents)) {
 				DBG(("%s: region wholly contained within GPU damage\n",
 				     __FUNCTION__));
@@ -3829,6 +3831,7 @@ cpu_fail:
 		sna_damage_destroy(&priv->gpu_damage);
 		*damage = NULL;
 	} else {
+		assert(!DAMAGE_IS_ALL(priv->cpu_damage));
 		if (priv->cpu_damage &&
 		    sna_damage_contains_box__no_reduce(priv->cpu_damage,
 						       &region.extents)) {
@@ -4712,8 +4715,9 @@ try_upload__blt(PixmapPtr pixmap, RegionRec *region,
 	assert(priv->gpu_bo->proxy == NULL);
 
 	if (priv->cpu_damage &&
-	    sna_damage_contains_box__no_reduce(priv->cpu_damage,
-					       &region->extents) &&
+	    (DAMAGE_IS_ALL(priv->cpu_damage) ||
+	     sna_damage_contains_box__no_reduce(priv->cpu_damage,
+						&region->extents)) &&
 	    !box_inplace(pixmap, &region->extents)) {
 		DBG(("%s: no, damage on CPU and too small\n", __FUNCTION__));
 		return false;
commit 30f521c717f7301004e7cb77ba66b840b3f773c6
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Jun 17 08:30:55 2014 +0100

    sna: Discard GPU damage for the magic upload proxy
    
    The magic upload proxy is initially considered damaged in both the GPU
    and CPU.
    
    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 d48321d..f3f95e6 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -2088,9 +2088,14 @@ _sna_pixmap_move_to_cpu(PixmapPtr pixmap, unsigned int flags)
 	}
 
 	if (kgem_bo_discard_cache(priv->gpu_bo, flags & MOVE_WRITE)) {
-		DBG(("%s: discarding cached upload buffer\n", __FUNCTION__));
 		assert(DAMAGE_IS_ALL(priv->cpu_damage));
-		assert(priv->gpu_damage == NULL || DAMAGE_IS_ALL(priv->gpu_damage)); /* magical upload buffer */
+		if (DAMAGE_IS_ALL(priv->gpu_damage)) {
+			DBG(("%s: using magical upload buffer\n", __FUNCTION__));
+			goto skip;
+		}
+
+		DBG(("%s: discarding cached upload buffer\n", __FUNCTION__));
+		assert(priv->gpu_damage == NULL);
 		assert(!priv->pinned);
 		assert(!priv->mapped);
 		kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
@@ -2359,7 +2364,8 @@ done:
 			assert((flags & MOVE_WRITE) == 0 || !kgem_bo_is_busy(priv->cpu_bo));
 		}
 	}
-	priv->cpu |= (flags & (MOVE_WRITE |MOVE_ASYNC_HINT)) == MOVE_WRITE;
+skip:
+	priv->cpu |= (flags & (MOVE_WRITE | MOVE_ASYNC_HINT)) == MOVE_WRITE;
 	assert(pixmap->devPrivate.ptr == PTR(priv->ptr));
 	assert(pixmap->devKind);
 	assert_pixmap_damage(pixmap);
@@ -2498,9 +2504,14 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
 	assert(priv->gpu_damage == NULL || priv->gpu_bo);
 
 	if (kgem_bo_discard_cache(priv->gpu_bo, flags & MOVE_WRITE)) {
-		DBG(("%s: discarding cached upload buffer\n", __FUNCTION__));
 		assert(DAMAGE_IS_ALL(priv->cpu_damage));
-		assert(priv->gpu_damage == NULL || DAMAGE_IS_ALL(priv->gpu_damage)); /* magical upload buffer */
+		if (DAMAGE_IS_ALL(priv->gpu_damage)) {
+			DBG(("%s: using magical upload buffer\n", __FUNCTION__));
+			goto skip;
+		}
+
+		DBG(("%s: discarding cached upload buffer\n", __FUNCTION__));
+		assert(priv->gpu_damage == NULL);
 		assert(!priv->pinned);
 		assert(!priv->mapped);
 		kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
@@ -2989,7 +3000,8 @@ out:
 				       FORCE_FULL_SYNC || flags & MOVE_WRITE);
 		assert((flags & MOVE_WRITE) == 0 || !kgem_bo_is_busy(priv->cpu_bo));
 	}
-	priv->cpu |= (flags & (MOVE_WRITE |MOVE_ASYNC_HINT)) == MOVE_WRITE;
+skip:
+	priv->cpu |= (flags & (MOVE_WRITE | MOVE_ASYNC_HINT)) == MOVE_WRITE;
 	assert(pixmap->devPrivate.ptr == PTR(priv->ptr));
 	assert(pixmap->devKind);
 	assert_pixmap_damage(pixmap);
@@ -3215,6 +3227,7 @@ sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, const BoxRec *box, unsigned int fl
 		assert(priv->gpu_damage == NULL || DAMAGE_IS_ALL(priv->gpu_damage)); /* magical upload buffer */
 		assert(!priv->pinned);
 		assert(!priv->mapped);
+		sna_damage_destroy(&priv->gpu_damage);
 		kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
 		priv->gpu_bo = NULL;
 	}
@@ -3458,6 +3471,7 @@ sna_drawable_use_bo(DrawablePtr drawable, unsigned flags, const BoxRec *box,
 		assert(priv->gpu_damage == NULL || DAMAGE_IS_ALL(priv->gpu_damage)); /* magical upload buffer */
 		assert(!priv->pinned);
 		assert(!priv->mapped);
+		sna_damage_destroy(&priv->gpu_damage);
 		kgem_bo_destroy(&to_sna_from_pixmap(pixmap)->kgem,
 				priv->gpu_bo);
 		priv->gpu_bo = NULL;
@@ -3954,6 +3968,7 @@ sna_pixmap_move_to_gpu(PixmapPtr pixmap, unsigned flags)
 		assert(priv->gpu_damage == NULL || DAMAGE_IS_ALL(priv->gpu_damage)); /* magical upload buffer */
 		assert(!priv->pinned);
 		assert(!priv->mapped);
+		sna_damage_destroy(&priv->gpu_damage);
 		kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
 		priv->gpu_bo = NULL;
 	}
@@ -4540,6 +4555,7 @@ try_upload__inplace(PixmapPtr pixmap, RegionRec *region,
 		assert(priv->gpu_damage == NULL || DAMAGE_IS_ALL(priv->gpu_damage)); /* magical upload buffer */
 		assert(!priv->pinned);
 		assert(!priv->mapped);
+		sna_damage_destroy(&priv->gpu_damage);
 		kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
 		priv->gpu_bo = NULL;
 	}
@@ -5999,6 +6015,7 @@ static void discard_cpu_damage(struct sna *sna, struct sna_pixmap *priv)
 		assert(priv->gpu_damage == NULL || DAMAGE_IS_ALL(priv->gpu_damage)); /* magical upload buffer */
 		assert(!priv->pinned);
 		assert(!priv->mapped);
+		sna_damage_destroy(&priv->gpu_damage);
 		kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
 		priv->gpu_bo = NULL;
 	}


More information about the xorg-commit mailing list