i915: Don't re-emit vertex size unless it has changed.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2010-05-28 21:49:38 +01:00
parent a94ae175d6
commit 90c74a4314
3 changed files with 7 additions and 5 deletions

View File

@ -367,6 +367,7 @@ typedef struct intel_screen_private {
int dstX, int dstY,
int w, int h);
int floats_per_vertex;
int last_floats_per_vertex;
uint32_t vertex_count;
uint32_t vertex_index;
uint32_t vertex_used;

View File

@ -1088,6 +1088,7 @@ Bool i830_uxa_init(ScreenPtr screen)
intel->prim_offset = 0;
intel->vertex_count = 0;
intel->floats_per_vertex = 0;
intel->last_floats_per_vertex = 0;
intel->vertex_bo = NULL;
/* Solid fill */

View File

@ -1166,10 +1166,8 @@ i915_composite(PixmapPtr dest, int srcX, int srcY, int maskX, int maskY,
if (intel->needs_render_state_emit)
i915_emit_composite_setup(scrn);
if (intel_vertex_space(intel) < 3*4*intel->floats_per_vertex)
intel->needs_render_vertex_emit = TRUE;
if (intel->needs_render_vertex_emit) {
if (intel->needs_render_vertex_emit ||
intel_vertex_space(intel) < 3*4*intel->floats_per_vertex) {
i915_vertex_flush(intel);
if (intel_vertex_space(intel) < 256) {
@ -1181,7 +1179,7 @@ i915_composite(PixmapPtr dest, int srcX, int srcY, int maskX, int maskY,
OUT_BATCH((intel->floats_per_vertex << S1_VERTEX_WIDTH_SHIFT) |
(intel->floats_per_vertex << S1_VERTEX_PITCH_SHIFT));
intel->vertex_index = 0;
} else {
} else if (intel->floats_per_vertex != intel->last_floats_per_vertex){
OUT_BATCH(_3DSTATE_LOAD_STATE_IMMEDIATE_1 |
I1_LOAD_S(1) | 0);
OUT_BATCH((intel->floats_per_vertex << S1_VERTEX_WIDTH_SHIFT) |
@ -1192,6 +1190,7 @@ i915_composite(PixmapPtr dest, int srcX, int srcY, int maskX, int maskY,
intel->vertex_used = intel->vertex_index * intel->floats_per_vertex;
}
intel->last_floats_per_vertex = intel->floats_per_vertex;
intel->needs_render_vertex_emit = FALSE;
}
@ -1248,4 +1247,5 @@ i915_batch_flush_notify(ScrnInfoPtr scrn)
intel_screen_private *intel = intel_get_screen_private(scrn);
intel->needs_render_state_emit = TRUE;
intel->last_floats_per_vertex = 0;
}