gallium/i915: compute vertex size _after_ state validation in emit_prim().
authorBrian <brian@i915.localnet.net>
Tue, 26 Feb 2008 00:01:20 +0000 (17:01 -0700)
committerBrian <brian@i915.localnet.net>
Tue, 26 Feb 2008 00:01:20 +0000 (17:01 -0700)
Fixes crash when drawing aa lines.

src/gallium/drivers/i915simple/i915_prim_emit.c

index 44c432593697c7a60157e465b33b9049f2898714..6da42b3846cc02838ef4e1288cf97d8f0fa50dab 100644 (file)
@@ -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();