diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-03-27 10:41:37 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-03-27 11:26:08 +0100 |
commit | 008ad39b72eb86dc2f89789427be269c148feaf4 (patch) | |
tree | 3575a889d08df25c75cdde0125aa13371038ff3a | |
parent | a9e9041934b2486e5661ba6c550e6670009f69f3 (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.c | 5 |
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__)); |