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

Chris Wilson ickle at kemper.freedesktop.org
Fri Nov 25 08:00:29 PST 2011


 src/sna/gen5_render.c |   24 ++++++++++++++++++++----
 src/sna/gen6_render.c |   13 +++++++++++--
 src/sna/gen7_render.c |   13 +++++++++++--
 3 files changed, 42 insertions(+), 8 deletions(-)

New commits:
commit e06789871b5cdf0c5535d46622b8ec3f85eb4386
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Nov 25 15:24:29 2011 +0000

    sna/gen5+: Prefer using the BLT when either src or dst is untiled
    
    The cost of the TLB miss on every sample far outweighs the impact of the
    context (and ring) switch.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 507a947..d4870b5 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -2401,6 +2401,15 @@ gen5_copy_bind_surfaces(struct sna *sna,
 	gen5_emit_state(sna, op, offset);
 }
 
+static inline bool prefer_blt_copy(struct sna *sna,
+				   struct kgem_bo *src_bo,
+				   struct kgem_bo *dst_bo)
+{
+	return (src_bo->tiling == I915_TILING_NONE ||
+		dst_bo->tiling == I915_TILING_NONE ||
+		sna->kgem.mode == KGEM_BLT);
+}
+
 static Bool
 gen5_render_copy_boxes(struct sna *sna, uint8_t alu,
 		       PixmapPtr src, struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
@@ -2409,7 +2418,7 @@ gen5_render_copy_boxes(struct sna *sna, uint8_t alu,
 {
 	struct sna_composite_op tmp;
 
-	if (sna->kgem.mode == KGEM_BLT &&
+	if (prefer_blt_copy(sna, src_bo, dst_bo) &&
 	    sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
 	    sna_blt_copy_boxes(sna, alu,
 			       src_bo, src_dx, src_dy,
@@ -2559,7 +2568,7 @@ gen5_render_copy(struct sna *sna, uint8_t alu,
 {
 	DBG(("%s (alu=%d)\n", __FUNCTION__, alu));
 
-	if (sna->kgem.mode == KGEM_BLT &&
+	if (prefer_blt_copy(sna, src_bo, dst_bo) &&
 	    sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
 	    sna_blt_copy(sna, alu,
 			 src_bo, dst_bo,
@@ -2604,8 +2613,15 @@ gen5_render_copy(struct sna *sna, uint8_t alu,
 	if (!kgem_check_bo(&sna->kgem, dst_bo, src_bo, NULL))
 		kgem_submit(&sna->kgem);
 
-	if (kgem_bo_is_dirty(src_bo))
+	if (kgem_bo_is_dirty(src_bo)) {
+		if (sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
+		    sna_blt_copy(sna, alu,
+				 src_bo, dst_bo,
+				 dst->drawable.bitsPerPixel,
+				 op))
+			return TRUE;
 		kgem_emit_flush(&sna->kgem);
+	}
 
 	gen5_copy_bind_surfaces(sna, &op->base);
 	gen5_align_vertex(sna, &op->base);
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 164f69d..6fbf636 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2581,6 +2581,15 @@ gen6_emit_copy_state(struct sna *sna,
 	gen6_emit_state(sna, op, offset);
 }
 
+static inline bool prefer_blt_copy(struct sna *sna,
+				   struct kgem_bo *src_bo,
+				   struct kgem_bo *dst_bo)
+{
+	return (src_bo->tiling == I915_TILING_NONE ||
+		dst_bo->tiling == I915_TILING_NONE ||
+		sna->kgem.ring == KGEM_BLT);
+}
+
 static Bool
 gen6_render_copy_boxes(struct sna *sna, uint8_t alu,
 		       PixmapPtr src, struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
@@ -2604,7 +2613,7 @@ gen6_render_copy_boxes(struct sna *sna, uint8_t alu,
 	     __FUNCTION__, src_dx, src_dy, dst_dx, dst_dy, n, alu,
 	     src_bo == dst_bo));
 
-	if (sna->kgem.ring == KGEM_BLT &&
+	if (prefer_blt_copy(sna, src_bo, dst_bo) &&
 	    sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
 	    sna_blt_copy_boxes(sna, alu,
 			       src_bo, src_dx, src_dy,
@@ -2760,7 +2769,7 @@ gen6_render_copy(struct sna *sna, uint8_t alu,
 	     src->drawable.width, src->drawable.height,
 	     dst->drawable.width, dst->drawable.height));
 
-	if (sna->kgem.ring == KGEM_BLT &&
+	if (prefer_blt_copy(sna, src_bo, dst_bo) &&
 	    sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
 	    sna_blt_copy(sna, alu,
 			 src_bo, dst_bo,
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index efe8bb5..1e614b8 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2701,6 +2701,15 @@ gen7_emit_copy_state(struct sna *sna,
 	gen7_emit_state(sna, op, offset);
 }
 
+static inline bool prefer_blt_copy(struct sna *sna,
+				   struct kgem_bo *src_bo,
+				   struct kgem_bo *dst_bo)
+{
+	return (src_bo->tiling == I915_TILING_NONE ||
+		dst_bo->tiling == I915_TILING_NONE ||
+		sna->kgem.ring == KGEM_BLT);
+}
+
 static Bool
 gen7_render_copy_boxes(struct sna *sna, uint8_t alu,
 		       PixmapPtr src, struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
@@ -2724,7 +2733,7 @@ gen7_render_copy_boxes(struct sna *sna, uint8_t alu,
 	     __FUNCTION__, src_dx, src_dy, dst_dx, dst_dy, n, alu,
 	     src_bo == dst_bo));
 
-	if (sna->kgem.ring == KGEM_BLT &&
+	if (prefer_blt_copy(sna, src_bo, dst_bo) &&
 	    sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
 	    sna_blt_copy_boxes(sna, alu,
 			       src_bo, src_dx, src_dy,
@@ -2880,7 +2889,7 @@ gen7_render_copy(struct sna *sna, uint8_t alu,
 	     src->drawable.width, src->drawable.height,
 	     dst->drawable.width, dst->drawable.height));
 
-	if (sna->kgem.ring == KGEM_BLT &&
+	if (prefer_blt_copy(sna, src_bo, dst_bo) &&
 	    sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
 	    sna_blt_copy(sna, alu,
 			 src_bo, dst_bo,
commit d0cce0da71fae275a0f1be33b2bebad9d41212c9
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Nov 25 13:16:37 2011 +0000

    sna/gen5: Use the same prefer_blt_fill() switch for fill-one
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 7c9d88e..507a947 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -2973,7 +2973,7 @@ gen5_render_fill_one(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo,
 #endif
 
 	/* Prefer to use the BLT if already engaged */
-	if (sna->kgem.mode != KGEM_RENDER &&
+	if (prefer_blt_fill(sna) &&
 	    gen5_render_fill_one_try_blt(sna, dst, bo, color,
 					 x1, y1, x2, y2, alu))
 		return TRUE;


More information about the xorg-commit mailing list