diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-11-05 01:04:54 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-11-05 01:04:54 +0000 |
commit | c25cf434d81ac1b4da29c9c75ca1d7c28be71d04 (patch) | |
tree | e84ef2a5b84a7d855705dadc48cf3322248dc590 | |
parent | 96e760ea7589cbe953bd0a6f2f41980a7f1c4795 (diff) |
sna/gen3: Initiailse the op for fill_boxes()
After removing the memset(0), a couple of fields where left
uninitialised, causing potential rendering glitches.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/sna/gen3_render.c | 36 |
1 files changed, 13 insertions, 23 deletions
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c index c326364f..01007e93 100644 --- a/src/sna/gen3_render.c +++ b/src/sna/gen3_render.c @@ -870,7 +870,10 @@ gen3_composite_emit_shader(struct sna *sna, gen3_fs_mov(FS_OC, gen3_fs_operand_zero()); goto done; case SHADER_BLACK: - gen3_fs_mov(FS_OC, gen3_fs_operand(FS_R0, ZERO, ZERO, ZERO, ONE)); + if (dst_is_alpha) + gen3_fs_mov(FS_OC, gen3_fs_operand_one()); + else + gen3_fs_mov(FS_OC, gen3_fs_operand(FS_R0, ZERO, ZERO, ZERO, ONE)); goto done; case SHADER_WHITE: gen3_fs_mov(FS_OC, gen3_fs_operand_one()); @@ -1844,8 +1847,11 @@ gen3_init_solid(struct sna_composite_channel *channel, uint32_t color) channel->u.gen3.type = SHADER_BLACK; else if (color == 0xffffffff) channel->u.gen3.type = SHADER_WHITE; - if ((color & 0xff000000) == 0xff000000) - channel->is_opaque = true; + + channel->is_opaque = (color & 0xff000000) == 0xff000000; + channel->is_affine = 1; + channel->alpha_fixup = 0; + channel->rb_reversed = 0; /* for consistency */ channel->repeat = RepeatNormal; @@ -3673,23 +3679,6 @@ static inline Bool prefer_fill_blt(struct sna *sna) #endif } -static inline void set_fill_shader(struct sna_composite_channel *c, - uint32_t pixel) -{ - if (pixel == 0) - c->u.gen3.type = SHADER_ZERO; - else if (pixel == 0xff000000) - c->u.gen3.type = SHADER_BLACK; - else if (pixel == 0xffffffff) - c->u.gen3.type = SHADER_WHITE; - else - c->u.gen3.type = SHADER_CONSTANT; - c->u.gen3.mode = pixel; - c->is_affine = 1; - c->alpha_fixup = 0; - c->rb_reversed = 0; -} - static Bool gen3_render_fill_boxes(struct sna *sna, CARD8 op, @@ -3754,8 +3743,9 @@ gen3_render_fill_boxes(struct sna *sna, tmp.floats_per_vertex = 2; tmp.floats_per_rect = 6; tmp.rb_reversed = 0; + tmp.has_component_alpha = 0; - set_fill_shader(&tmp.src, pixel); + gen3_init_solid(&tmp.src, pixel); tmp.mask.u.gen3.type = SHADER_NONE; tmp.u.gen3.num_constants = 0; @@ -3908,7 +3898,7 @@ gen3_render_fill(struct sna *sna, uint8_t alu, tmp->base.has_component_alpha = 0; tmp->base.rb_reversed = 0; - set_fill_shader(&tmp->base.src, + gen3_init_solid(&tmp->base.src, sna_rgba_for_color(color, dst->drawable.depth)); tmp->base.mask.u.gen3.type = SHADER_NONE; tmp->base.u.gen3.num_constants = 0; @@ -3986,7 +3976,7 @@ gen3_render_fill_one(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo, tmp.has_component_alpha = 0; tmp.rb_reversed = 0; - set_fill_shader(&tmp.src, + gen3_init_solid(&tmp.src, sna_rgba_for_color(color, dst->drawable.depth)); tmp.mask.u.gen3.type = SHADER_NONE; tmp.u.gen3.num_constants = 0; |