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

Chris Wilson ickle at kemper.freedesktop.org
Wed Aug 1 12:38:39 PDT 2012


 src/sna/gen7_render.c |   19 ++++++++++++++++---
 src/sna/sna_accel.c   |    5 +++++
 2 files changed, 21 insertions(+), 3 deletions(-)

New commits:
commit ca46d1c7a18596ea9fe2b0577ccf1d110e3e42ac
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Aug 1 20:20:29 2012 +0100

    sna/gen7: Prefer the BLT for self-copies
    
    Looking at the test results for a third time, gives the edge to the BLT
    again.

diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 96eb86a..193de00 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2470,6 +2470,13 @@ try_blt(struct sna *sna,
 	if (can_switch_rings(sna)) {
 		if (sna_picture_is_solid(src, NULL))
 			return true;
+
+		if (dst->pDrawable == src->pDrawable)
+			return true;
+
+		if (src->pDrawable &&
+		    get_drawable_pixmap(dst->pDrawable) == get_drawable_pixmap(src->pDrawable))
+			return true;
 	}
 
 	return false;
@@ -3311,7 +3318,8 @@ static inline bool prefer_blt_copy(struct sna *sna,
 }
 
 static inline bool
-overlaps(struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
+overlaps(struct sna *sna,
+	 struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
 	 struct kgem_bo *dst_bo, int16_t dst_dx, int16_t dst_dy,
 	 const BoxRec *box, int n)
 {
@@ -3320,6 +3328,9 @@ overlaps(struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
 	if (src_bo != dst_bo)
 		return false;
 
+	if (can_switch_rings(sna))
+		return true;
+
 	extents = box[0];
 	while (--n) {
 		box++;
@@ -3352,7 +3363,8 @@ gen7_render_copy_boxes(struct sna *sna, uint8_t alu,
 	DBG(("%s (%d, %d)->(%d, %d) x %d, alu=%x, self-copy=%d, overlaps? %d\n",
 	     __FUNCTION__, src_dx, src_dy, dst_dx, dst_dy, n, alu,
 	     src_bo == dst_bo,
-	     overlaps(src_bo, src_dx, src_dy,
+	     overlaps(sna,
+		      src_bo, src_dx, src_dy,
 		      dst_bo, dst_dx, dst_dy,
 		      box, n)));
 
@@ -3391,7 +3403,8 @@ gen7_render_copy_boxes(struct sna *sna, uint8_t alu,
 	}
 
 	if (!(alu == GXcopy || alu == GXclear) ||
-	    overlaps(src_bo, src_dx, src_dy,
+	    overlaps(sna,
+		     src_bo, src_dx, src_dy,
 		     dst_bo, dst_dx, dst_dy,
 		     box, n)) {
 fallback_blt:
commit e4a3cd3d16447b5d83d1c8c63c342f1240935267
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Aug 1 17:37:33 2012 +0100

    sna: Add validation of the clear flag to pixmap debugging
    
    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 a4287f7..8760f91 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -314,6 +314,11 @@ static void assert_pixmap_damage(PixmapPtr p)
 	if (priv == NULL)
 		return;
 
+	if (priv->clear) {
+		assert(DAMAGE_IS_ALL(priv->gpu_damage));
+		assert(priv->cpu_damage == NULL);
+	}
+
 	if (DAMAGE_IS_ALL(priv->gpu_damage) && DAMAGE_IS_ALL(priv->cpu_damage)) {
 		/* special upload buffer */
 		assert(priv->gpu_bo && priv->gpu_bo->proxy);


More information about the xorg-commit mailing list