xf86-video-intel: src/sna/sna_accel.c src/sna/sna.h

Chris Wilson ickle at kemper.freedesktop.org
Fri Jun 13 00:52:58 PDT 2014


 src/sna/sna.h       |    2 +-
 src/sna/sna_accel.c |   23 +++++++++++++++--------
 2 files changed, 16 insertions(+), 9 deletions(-)

New commits:
commit d47a01fce4d3d9c043a45fc034dc436c0af41981
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Jun 13 08:51:20 2014 +0100

    sna: Reorder ignore_cpu_damage() to avoid asserts
    
    Tricksy asserts making sure that the correct arguments are passed
    around!
    
    Reported-by: Arkadiusz Miskiewicz <arekm at maven.pl
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna.h b/src/sna/sna.h
index dfdfc65..d0bb655 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -803,7 +803,7 @@ region_subsumes_drawable(RegionPtr region, DrawablePtr drawable)
 }
 
 static inline bool
-region_subsumes_pixmap(RegionPtr region, PixmapPtr pixmap)
+region_subsumes_pixmap(const RegionRec *region, PixmapPtr pixmap)
 {
 	if (region->data)
 		return false;
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 23e27af..72c16d3 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -4761,15 +4761,24 @@ try_upload__blt(PixmapPtr pixmap, RegionRec *region,
 	return true;
 }
 
-static bool ignore_cpu_damage(struct sna_pixmap *priv, const BoxRec *box)
+static bool ignore_cpu_damage(struct sna *sna, struct sna_pixmap *priv, const RegionRec *region)
 {
-	if (priv->cpu_damage == NULL)
+	if (region_subsumes_pixmap(region, priv->pixmap))
 		return true;
 
-	if (!sna_damage_contains_box__no_reduce(priv->cpu_damage, box))
-		return true;
+	if (priv->cpu_damage != NULL) {
+		if (DAMAGE_IS_ALL(priv->cpu_damage == NULL))
+			return false;
+
+		if (!box_inplace(priv->pixmap, &region->extents))
+			return false;
+
+		if (sna_damage_contains_box__no_reduce(priv->cpu_damage, &region->extents))
+			return false;
+	}
+
+	return priv->gpu_bo == NULL || !__kgem_bo_is_busy(&sna->kgem, priv->gpu_bo);
 
-	return box_inplace(priv->pixmap, box);
 }
 
 static bool
@@ -4786,9 +4795,7 @@ try_upload__fast(PixmapPtr pixmap, RegionRec *region,
 	if (priv == NULL)
 		return false;
 
-	if (region_subsumes_pixmap(region, pixmap) ||
-	    (ignore_cpu_damage(priv, &region->extents) &&
-	     (priv->gpu_bo == NULL || !__kgem_bo_is_busy(&sna->kgem, priv->gpu_bo)))) {
+	if (ignore_cpu_damage(sna, priv, region)) {
 		if (try_upload__inplace(pixmap, region, x, y, w, h, bits, stride))
 			return true;
 	}


More information about the xorg-commit mailing list