summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-11-05 01:04:54 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2011-11-05 01:04:54 +0000
commitc25cf434d81ac1b4da29c9c75ca1d7c28be71d04 (patch)
treee84ef2a5b84a7d855705dadc48cf3322248dc590
parent96e760ea7589cbe953bd0a6f2f41980a7f1c4795 (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.c36
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;