xf86-video-intel: 3 commits - src/sna/gen6_render.c src/sna/sna_trapezoids.c

Chris Wilson ickle at kemper.freedesktop.org
Tue Mar 27 05:16:13 PDT 2012


 src/sna/gen6_render.c    |    5 ++++-
 src/sna/sna_trapezoids.c |   13 +++++++++++--
 2 files changed, 15 insertions(+), 3 deletions(-)

New commits:
commit 2e7b5f7eafbf452c781e50eba7dc8323260af59e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Mar 27 10:42:59 2012 +0100

    sna/traps: Prefer to try mono spans on the GPU before trying inplace CPU
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c
index be46789..4067757 100644
--- a/src/sna/sna_trapezoids.c
+++ b/src/sna/sna_trapezoids.c
@@ -3092,12 +3092,14 @@ composite_unaligned_boxes(struct sna *sna,
 
 	switch (op) {
 	case PictOpAdd:
+	case PictOpOver:
 		if (priv->clear && priv->clear_color == 0)
 			op = PictOpSrc;
 		break;
 	case PictOpIn:
 		if (priv->clear && priv->clear_color == 0)
 			return true;
+		break;
 	}
 
 	memset(&tmp, 0, sizeof(tmp));
@@ -4479,7 +4481,7 @@ sna_composite_trapezoids(CARD8 op,
 
 	/* scan through for fast rectangles */
 	rectilinear = pixel_aligned = true;
-	if (maskFormat ? maskFormat->depth == 1 : dst->polyEdge == PolyEdgeSharp) {
+	if (is_mono(dst, maskFormat)) {
 		for (n = 0; n < ntrap && rectilinear; n++) {
 			int lx1 = pixman_fixed_to_int(traps[n].left.p1.x + pixman_fixed_1_minus_e/2);
 			int lx2 = pixman_fixed_to_int(traps[n].left.p2.x + pixman_fixed_1_minus_e/2);
@@ -4531,6 +4533,13 @@ sna_composite_trapezoids(CARD8 op,
 		}
 		flags |= COMPOSITE_SPANS_RECTILINEAR;
 	}
+
+	if (is_mono(dst, maskFormat) &&
+	    mono_trapezoids_span_converter(op, src, dst,
+					   xSrc, ySrc,
+					   ntrap, traps))
+		return;
+
 	if (trapezoid_spans_maybe_inplace(op, src, dst, maskFormat)) {
 		flags |= COMPOSITE_SPANS_INPLACE_HINT;
 		if (trapezoid_span_inplace(op, src, dst, maskFormat,
commit 522b41b393b979fdccf1ad62194cde8129f98c8c
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Mar 27 10:42:21 2012 +0100

    sna/traps: Fix the width of the left-hand edge of an unaligned box
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c
index 9ab5ae2..be46789 100644
--- a/src/sna/sna_trapezoids.c
+++ b/src/sna/sna_trapezoids.c
@@ -2759,7 +2759,7 @@ composite_unaligned_trap_row(struct sna *sna,
 	} else {
 		if (pixman_fixed_frac(trap->left.p1.x)) {
 			box.x1 = x1;
-			box.x2 = x1++;
+			box.x2 = ++x1;
 
 			opacity = covered;
 			opacity *= SAMPLES_X - grid_coverage(SAMPLES_X, trap->left.p1.x);
commit 008ad39b72eb86dc2f89789427be269c148feaf4
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Mar 27 10:41:37 2012 +0100

    sna/gen6: Reduce opaque solid OVER to SRC for render composite
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 6f1b55a..3be9195 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2033,6 +2033,7 @@ gen6_composite_solid_init(struct sna *sna,
 	channel->repeat = RepeatNormal;
 	channel->is_affine = TRUE;
 	channel->is_solid  = TRUE;
+	channel->is_opaque = (color >> 24) == 0xff;
 	channel->transform = NULL;
 	channel->width  = 1;
 	channel->height = 1;
@@ -2251,7 +2252,7 @@ gen6_composite_picture(struct sna *sna,
 				    x, y, w, h, dst_x, dst_y);
 }
 
-static void gen6_composite_channel_convert(struct sna_composite_channel *channel)
+inline static void gen6_composite_channel_convert(struct sna_composite_channel *channel)
 {
 	channel->repeat = gen6_repeat(channel->repeat);
 	channel->filter = gen6_filter(channel->filter);
@@ -2735,6 +2736,8 @@ gen6_render_composite(struct sna *sna,
 			DBG(("%s: choosing gen6_emit_composite_primitive_solid\n",
 			     __FUNCTION__));
 			tmp->prim_emit = gen6_emit_composite_primitive_solid;
+			if (tmp->src.is_opaque && op == PictOpOver)
+				tmp->op = PictOpSrc;
 		} else if (tmp->src.transform == NULL) {
 			DBG(("%s: choosing gen6_emit_composite_primitive_identity_source\n",
 			     __FUNCTION__));


More information about the xorg-commit mailing list