xf86-video-intel: 3 commits - src/sna/sna_accel.c src/sna/sna_composite.c src/sna/sna_dri.c test/.gitignore

Chris Wilson ickle at kemper.freedesktop.org
Tue Feb 19 01:01:14 PST 2013


 src/sna/sna_accel.c     |   10 ++++++++++
 src/sna/sna_composite.c |    1 +
 src/sna/sna_dri.c       |    1 +
 test/.gitignore         |    1 +
 4 files changed, 13 insertions(+)

New commits:
commit b6588c48077600a3e015b6d37b101393a806ae1a
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Feb 19 08:59:12 2013 +0000

    test: Add generated vsync.avi to gitignore

diff --git a/test/.gitignore b/test/.gitignore
index d3e59c5..b1c350e 100644
--- a/test/.gitignore
+++ b/test/.gitignore
@@ -14,3 +14,4 @@ render-copyarea-size
 render-copy-alphaless
 mixed-stress
 lowlevel-blt-bench
+test/vsync.avi
commit 1e2fd66ade6bdbf1e6011f3d59e423fada3f12f6
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Feb 19 08:57:47 2013 +0000

    sna: Assert that the GPU damage is NULL before destroy a proxy
    
    If the GPU bo is a proxy, then it really is a pointer into a upload
    buffer for CPU data. In these cases, there should never be any GPU
    damage lying around.
    
    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 0f9a725..a577af6 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -11783,6 +11783,7 @@ sna_poly_fill_rect(DrawablePtr draw, GCPtr gc, int n, xRectangle *rect)
 			if (region_subsumes_damage(&region, priv->cpu_damage)) {
 				DBG(("%s: discarding existing CPU damage\n", __FUNCTION__));
 				if (priv->gpu_bo && priv->gpu_bo->proxy) {
+					assert(priv->gpu_damage == NULL);
 					kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
 					priv->gpu_bo = NULL;
 				}
diff --git a/src/sna/sna_composite.c b/src/sna/sna_composite.c
index a4b85fe..e067799 100644
--- a/src/sna/sna_composite.c
+++ b/src/sna/sna_composite.c
@@ -921,6 +921,7 @@ sna_composite_rectangles(CARD8		 op,
 		    region_subsumes_damage(&region, priv->cpu_damage)) {
 			DBG(("%s: discarding existing CPU damage\n", __FUNCTION__));
 			if (priv->gpu_bo && priv->gpu_bo->proxy) {
+				assert(priv->gpu_damage == NULL);
 				kgem_bo_destroy(&sna->kgem, priv->gpu_bo);
 				priv->gpu_bo = NULL;
 			}
commit d90a123db7ac99cf017167bf89df31c635df7e1e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Feb 18 20:06:45 2013 +0000

    sna: Assert that the gpu_bo exists if it is entirely damaged
    
    This should help catch the error slightly earlier.
    
    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 b5e41ee..0f9a725 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -675,6 +675,8 @@ bool sna_pixmap_attach_to_bo(PixmapPtr pixmap, struct kgem_bo *bo)
 {
 	struct sna_pixmap *priv;
 
+	assert(bo);
+
 	priv = sna_pixmap_attach(pixmap);
 	if (!priv)
 		return false;
@@ -1995,6 +1997,7 @@ sna_drawable_move_region_to_cpu(DrawablePtr drawable,
 	    __kgem_bo_is_busy(&sna->kgem, priv->cpu_bo)) {
 		sna_damage_subtract(&priv->cpu_damage, region);
 		if (sna_pixmap_move_to_gpu(pixmap, MOVE_READ | MOVE_ASYNC_HINT)) {
+			assert(priv->gpu_bo);
 			sna_damage_all(&priv->gpu_damage,
 				       pixmap->drawable.width,
 				       pixmap->drawable.height);
@@ -2413,6 +2416,7 @@ sna_pixmap_move_area_to_gpu(PixmapPtr pixmap, const BoxRec *box, unsigned int fl
 	if (sna_damage_is_all(&priv->gpu_damage,
 			      pixmap->drawable.width,
 			      pixmap->drawable.height)) {
+		assert(priv->gpu_bo);
 		sna_damage_destroy(&priv->cpu_damage);
 		list_del(&priv->list);
 		goto done;
@@ -2579,6 +2583,7 @@ done:
 		    box_inplace(pixmap, &r.extents)) {
 			DBG(("%s: large operation on undamaged, promoting to full GPU\n",
 			     __FUNCTION__));
+			assert(priv->gpu_bo);
 			assert(priv->gpu_bo->proxy == NULL);
 			sna_damage_all(&priv->gpu_damage,
 				       pixmap->drawable.width,
@@ -3052,6 +3057,7 @@ sna_pixmap_move_to_gpu(PixmapPtr pixmap, unsigned flags)
 			      pixmap->drawable.width,
 			      pixmap->drawable.height)) {
 		DBG(("%s: already all-damaged\n", __FUNCTION__));
+		assert(priv->gpu_bo);
 		sna_damage_destroy(&priv->cpu_damage);
 		list_del(&priv->list);
 		assert(priv->cpu == false || IS_CPU_MAP(priv->gpu_bo->map));
@@ -3116,6 +3122,7 @@ sna_pixmap_move_to_gpu(PixmapPtr pixmap, unsigned flags)
 			 * synchronisation that takes the most time. This is
 			 * mitigated by avoiding fallbacks in the first place.
 			 */
+			assert(priv->gpu_bo);
 			assert(priv->gpu_bo->proxy == NULL);
 			sna_damage_all(&priv->gpu_damage,
 				       pixmap->drawable.width,
@@ -3197,6 +3204,7 @@ sna_pixmap_move_to_gpu(PixmapPtr pixmap, unsigned flags)
 		DBG(("%s: disposing of system copy for large/source\n",
 		     __FUNCTION__));
 		assert(!priv->shm);
+		assert(priv->gpu_bo);
 		assert(priv->gpu_bo->proxy == NULL);
 		sna_damage_all(&priv->gpu_damage,
 			       pixmap->drawable.width,
@@ -4523,6 +4531,7 @@ sna_copy_boxes(DrawablePtr src, DrawablePtr dst, GCPtr gc,
 			assert(dst_priv->clear == false);
 			dst_priv->cpu = false;
 			if (damage) {
+				assert(dst_priv->gpu_bo);
 				assert(dst_priv->gpu_bo->proxy == NULL);
 				if (replaces) {
 					sna_damage_destroy(&dst_priv->cpu_damage);
diff --git a/src/sna/sna_dri.c b/src/sna/sna_dri.c
index 22b12f0..6979a30 100644
--- a/src/sna/sna_dri.c
+++ b/src/sna/sna_dri.c
@@ -470,6 +470,7 @@ static void damage(PixmapPtr pixmap, RegionPtr region)
 
 	priv = sna_pixmap(pixmap);
 	assert(priv != NULL);
+	assert(priv->gpu_bo);
 	if (DAMAGE_IS_ALL(priv->gpu_damage))
 		return;
 


More information about the xorg-commit mailing list