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