diff options
author | Brian <brian@i915.localnet.net> | 2008-02-25 17:01:20 -0700 |
---|---|---|
committer | Brian <brian@i915.localnet.net> | 2008-02-25 17:01:20 -0700 |
commit | b02fc948348db5559d658251dd3a6d4f3390d686 (patch) | |
tree | 9062e7268d9ae93e822f857a9d50daa4b99f23e7 | |
parent | bc3f2c908e085538ed0956159503e97825161bb9 (diff) |
gallium/i915: compute vertex size _after_ state validation in emit_prim().
Fixes crash when drawing aa lines.
-rw-r--r-- | src/gallium/drivers/i915simple/i915_prim_emit.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/gallium/drivers/i915simple/i915_prim_emit.c b/src/gallium/drivers/i915simple/i915_prim_emit.c index 44c4325936..6da42b3846 100644 --- a/src/gallium/drivers/i915simple/i915_prim_emit.c +++ b/src/gallium/drivers/i915simple/i915_prim_emit.c @@ -72,6 +72,8 @@ emit_hw_vertex( struct i915_context *i915, uint i; uint count = 0; /* for debug/sanity */ + assert(!i915->dirty); + for (i = 0; i < vinfo->num_attribs; i++) { switch (vinfo->emit[i]) { case EMIT_OMIT: @@ -122,17 +124,19 @@ emit_prim( struct draw_stage *stage, unsigned nr ) { struct i915_context *i915 = setup_stage(stage)->i915; - unsigned vertex_size = i915->current.vertex_info.size * 4; /* in bytes */ + unsigned vertex_size; unsigned i; - assert(vertex_size >= 12); /* never smaller than 12 bytes */ - if (i915->dirty) i915_update_derived( i915 ); if (i915->hardware_dirty) i915_emit_hardware_state( i915 ); + /* need to do this after validation! */ + vertex_size = i915->current.vertex_info.size * 4; /* in bytes */ + assert(vertex_size >= 12); /* never smaller than 12 bytes */ + if (!BEGIN_BATCH( 1 + nr * vertex_size / 4, 0 )) { FLUSH_BATCH(); |