xf86-video-intel: 4 commits - src/sna/gen2_render.c src/sna/gen3_render.c src/sna/gen4_render.c src/sna/gen5_render.c src/sna/gen6_render.c src/sna/gen7_render.c src/sna/kgem.c src/sna/sna_render_inline.h

Chris Wilson ickle at kemper.freedesktop.org
Fri Dec 14 07:25:40 PST 2012


 src/sna/gen2_render.c       |    2 +-
 src/sna/gen3_render.c       |   18 +++++++++---------
 src/sna/gen4_render.c       |    2 +-
 src/sna/gen5_render.c       |    2 +-
 src/sna/gen6_render.c       |    2 +-
 src/sna/gen7_render.c       |    2 +-
 src/sna/kgem.c              |   13 ++++++++-----
 src/sna/sna_render_inline.h |    9 +++++++++
 8 files changed, 31 insertions(+), 19 deletions(-)

New commits:
commit 9df9585cb00958b42461b3139bb7aec32090a869
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Dec 14 15:37:56 2012 +0000

    sna: Reduce fence watermarks
    
    Further restrict the amount of fenced bo we try to fit into the batch to
    make it easier for the kernel to accommodate the request.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index f8b3cff..66bf473 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -3906,9 +3906,12 @@ bool kgem_check_bo_fenced(struct kgem *kgem, struct kgem_bo *bo)
 			if (kgem->nfence >= kgem->fence_max)
 				return false;
 
+			if (3*kgem->aperture_fenced > kgem->aperture_mappable)
+				return false;
+
 			size = kgem->aperture_fenced;
 			size += kgem_bo_fenced_size(kgem, bo);
-			if (4*size > 3*kgem->aperture_mappable)
+			if (3*size > 2*kgem->aperture_mappable)
 				return false;
 		}
 
@@ -3932,12 +3935,12 @@ bool kgem_check_bo_fenced(struct kgem *kgem, struct kgem_bo *bo)
 		if (kgem->nfence >= kgem->fence_max)
 			return false;
 
-		if (2*kgem->aperture_fenced > kgem->aperture_mappable)
+		if (3*kgem->aperture_fenced > kgem->aperture_mappable)
 			return false;
 
 		size = kgem->aperture_fenced;
 		size += kgem_bo_fenced_size(kgem, bo);
-		if (4*size > 3*kgem->aperture_mappable)
+		if (3*size > 2*kgem->aperture_mappable)
 			return false;
 	}
 
@@ -3982,10 +3985,10 @@ bool kgem_check_many_bo_fenced(struct kgem *kgem, ...)
 		if (kgem->nfence + num_fence > kgem->fence_max)
 			return false;
 
-		if (2*kgem->aperture_fenced > kgem->aperture_mappable)
+		if (3*kgem->aperture_fenced > kgem->aperture_mappable)
 			return false;
 
-		if (4*(fenced_size + kgem->aperture_fenced) > 3*kgem->aperture_mappable)
+		if (3*(fenced_size + kgem->aperture_fenced) > 2*kgem->aperture_mappable)
 			return false;
 	}
 
commit 0d3ba44e448c152a570cc469d289ab057fa7be5c
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Dec 14 12:47:46 2012 +0000

    sna/gen2+: Experiment with not forcing migration to GPU after CPU rasterisation
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen2_render.c b/src/sna/gen2_render.c
index c4242f4..8f92338 100644
--- a/src/sna/gen2_render.c
+++ b/src/sna/gen2_render.c
@@ -1716,7 +1716,7 @@ gen2_composite_fallback(struct sna *sna,
 
 	DBG(("%s: dst is not on the GPU and the operation should not fallback\n",
 	     __FUNCTION__));
-	return false;
+	return dst_use_cpu(dst_pixmap);
 }
 
 static int
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index 5c17a8f..b9a1e01 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -2676,9 +2676,9 @@ gen3_composite_fallback(struct sna *sna,
 
 	if (mask &&
 	    mask->componentAlpha && PICT_FORMAT_RGB(mask->format) &&
-	    op != PictOpOver &&
-	    gen3_blend_op[op].src_blend != BLENDFACT_ZERO)
-	{
+	    gen3_blend_op[op].src_alpha &&
+	    gen3_blend_op[op].src_blend != BLENDFACT_ZERO &&
+	    op != PictOpOver) {
 		DBG(("%s: component-alpha mask with op=%d, should fallback\n",
 		     __FUNCTION__, op));
 		return true;
@@ -2725,9 +2725,9 @@ gen3_composite_fallback(struct sna *sna,
 		return true;
 	}
 
-	DBG(("%s: dst is not on the GPU and the operation should not fallback\n",
-	     __FUNCTION__));
-	return false;
+	DBG(("%s: dst is not on the GPU and the operation should not fallback: use-cpu? %d\n",
+	     __FUNCTION__, dst_use_cpu(dst_pixmap)));
+	return dst_use_cpu(dst_pixmap);
 }
 
 static int
@@ -2916,7 +2916,7 @@ gen3_render_composite(struct sna *sna,
 					tmp->mask.u.gen3.type = SHADER_NONE;
 					tmp->has_component_alpha = false;
 				} else if (gen3_blend_op[op].src_alpha &&
-					   (gen3_blend_op[op].src_blend != BLENDFACT_ZERO)) {
+					   gen3_blend_op[op].src_blend != BLENDFACT_ZERO) {
 					if (op != PictOpOver)
 						goto cleanup_mask;
 
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index f80fa83..27cf975 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -2247,7 +2247,7 @@ gen4_composite_fallback(struct sna *sna,
 
 	DBG(("%s: dst is not on the GPU and the operation should not fallback\n",
 	     __FUNCTION__));
-	return false;
+	return dst_use_cpu(dst_pixmap);
 }
 
 static int
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 6e6389a..9b779b6 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -2256,7 +2256,7 @@ gen5_composite_fallback(struct sna *sna,
 
 	DBG(("%s: dst is not on the GPU and the operation should not fallback\n",
 	     __FUNCTION__));
-	return false;
+	return dst_use_cpu(dst_pixmap);
 }
 
 static int
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 801236f..ec29124 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2604,7 +2604,7 @@ gen6_composite_fallback(struct sna *sna,
 
 	DBG(("%s: dst is not on the GPU and the operation should not fallback\n",
 	     __FUNCTION__));
-	return false;
+	return dst_use_cpu(dst_pixmap);
 }
 
 static int
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 270488c..29b1cdc 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2721,7 +2721,7 @@ gen7_composite_fallback(struct sna *sna,
 
 	DBG(("%s: dst is not on the GPU and the operation should not fallback\n",
 	     __FUNCTION__));
-	return false;
+	return dst_use_cpu(dst_pixmap);
 }
 
 static int
diff --git a/src/sna/sna_render_inline.h b/src/sna/sna_render_inline.h
index 2468b89..e31db15 100644
--- a/src/sna/sna_render_inline.h
+++ b/src/sna/sna_render_inline.h
@@ -233,6 +233,15 @@ inline static bool dst_use_gpu(PixmapPtr pixmap)
 	return priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo);
 }
 
+inline static bool dst_use_cpu(PixmapPtr pixmap)
+{
+	struct sna_pixmap *priv = sna_pixmap(pixmap);
+	if (priv == NULL)
+		return true;
+
+	return priv->cpu_damage && priv->cpu;
+}
+
 inline static bool dst_is_cpu(PixmapPtr pixmap)
 {
 	struct sna_pixmap *priv = sna_pixmap(pixmap);
commit d867fd01cb0060342102a79600daf43e3dc44a07
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Dec 14 13:10:54 2012 +0000

    sna/gen3: Don't combine primitives if beginning a ca 2-pass
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index 8f8cef2..5c17a8f 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -1768,7 +1768,8 @@ static bool gen3_rectangle_begin(struct sna *sna,
 		}
 	}
 
-	if (sna->kgem.nbatch == 2 + state->last_vertex_offset) {
+	if (sna->kgem.nbatch == 2 + state->last_vertex_offset &&
+	    !op->need_magic_ca_pass) {
 		state->vertex_offset = state->last_vertex_offset;
 	} else {
 		state->vertex_offset = sna->kgem.nbatch;
commit 3ca503dac2ea6c036e7ebe878b41923541daf225
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Dec 14 12:49:14 2012 +0000

    sna/gen3: Remove stray setting of vertex_start
    
    It is always done at the beginning of vertex emission.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index 51ace78..8f8cef2 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -2921,7 +2921,6 @@ gen3_render_composite(struct sna *sna,
 
 					tmp->need_magic_ca_pass = true;
 					tmp->op = PictOpOutReverse;
-					sna->render.vertex_start = sna->render.vertex_index;
 				}
 			} else {
 				if (tmp->mask.is_opaque) {


More information about the xorg-commit mailing list