summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-10-26 12:54:13 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2011-10-27 10:25:36 +0100
commitbaf78fcddb87eba987163485ad8fd227fb244f29 (patch)
treefa1b4bec77552e6e7067ef2b0c793468a830cb42
parentff4715a36999a43cee20cf3474b4ae0af646342c (diff)
sna/gen2: Cache the last solid colour for spans
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/sna/gen2_render.c8
-rw-r--r--src/sna/sna_render.h3
2 files changed, 8 insertions, 3 deletions
diff --git a/src/sna/gen2_render.c b/src/sna/gen2_render.c
index 440a343a..aa315e68 100644
--- a/src/sna/gen2_render.c
+++ b/src/sna/gen2_render.c
@@ -1593,8 +1593,11 @@ static void gen2_emit_composite_spans_state(struct sna *sna,
gen2_emit_spans_pipeline(sna, op);
if (op->base.src.is_solid) {
- BATCH(_3DSTATE_DFLT_SPECULAR_CMD);
- BATCH(op->base.src.u.gen2.pixel);
+ if (op->base.src.u.gen2.pixel != sna->render_state.gen2.specular) {
+ BATCH(_3DSTATE_DFLT_SPECULAR_CMD);
+ BATCH(op->base.src.u.gen2.pixel);
+ sna->render_state.gen2.specular = op->base.src.u.gen2.pixel;
+ }
} else {
uint32_t v =_3DSTATE_VERTEX_FORMAT_2_CMD |
(op->base.src.is_affine ? TEXCOORDFMT_2D : TEXCOORDFMT_3D);
@@ -2534,6 +2537,7 @@ gen2_render_reset(struct sna *sna)
sna->render_state.gen2.vft = 0;
sna->render_state.gen2.diffuse = 0x0c0ffee0;
+ sna->render_state.gen2.specular = 0x0c0ffee0;
}
static void
diff --git a/src/sna/sna_render.h b/src/sna/sna_render.h
index d31b55c0..774c576a 100644
--- a/src/sna/sna_render.h
+++ b/src/sna/sna_render.h
@@ -275,8 +275,9 @@ struct gen2_render_state {
Bool need_invariant;
Bool logic_op_enabled;
uint32_t ls1, ls2, vft;
- uint16_t vertex_offset;
uint32_t diffuse;
+ uint32_t specular;
+ uint16_t vertex_offset;
};
struct gen3_render_state {