summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-03-27 10:41:37 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2012-03-27 11:26:08 +0100
commit008ad39b72eb86dc2f89789427be269c148feaf4 (patch)
tree3575a889d08df25c75cdde0125aa13371038ff3a
parenta9e9041934b2486e5661ba6c550e6670009f69f3 (diff)
sna/gen6: Reduce opaque solid OVER to SRC for render composite
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/sna/gen6_render.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 6f1b55a6..3be9195b 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__));