Don't reemit hardware state *every* primitive.
This commit is contained in:
@@ -56,6 +56,7 @@ struct i915_context
|
||||
struct pipe_mipmap_tree *texture[PIPE_MAX_SAMPLERS];
|
||||
struct pipe_viewport_state viewport;
|
||||
GLuint dirty;
|
||||
GLuint hw_dirty;
|
||||
|
||||
GLuint *batch_start;
|
||||
|
||||
|
||||
@@ -120,7 +120,11 @@ emit_prim( struct draw_stage *stage,
|
||||
unsigned *ptr;
|
||||
unsigned i;
|
||||
|
||||
i915_emit_hardware_state( i915 );
|
||||
if (i915->dirty)
|
||||
i915_update_derived( i915 );
|
||||
|
||||
if (i915->hw_dirty)
|
||||
i915_emit_hardware_state( i915 );
|
||||
|
||||
ptr = winsys->batch_start( winsys, nr * vertex_size, 0 );
|
||||
if (ptr == 0) {
|
||||
|
||||
@@ -182,5 +182,8 @@ void i915_update_derived( struct i915_context *i915 )
|
||||
I915_NEW_FRAMEBUFFER))
|
||||
compute_cliprect(i915);
|
||||
|
||||
if (i915->dirty)
|
||||
i915->hw_dirty = 1;
|
||||
|
||||
i915->dirty = 0;
|
||||
}
|
||||
|
||||
@@ -250,5 +250,7 @@ i915_emit_hardware_state(struct i915_context *i915 )
|
||||
for (i = 0; i < dwords; i++)
|
||||
OUT_BATCH( prog[i] );
|
||||
}
|
||||
|
||||
i915->hw_dirty = 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user