summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian <brian@i915.localnet.net>2008-02-25 17:01:20 -0700
committerBrian <brian@i915.localnet.net>2008-02-25 17:01:20 -0700
commitb02fc948348db5559d658251dd3a6d4f3390d686 (patch)
tree9062e7268d9ae93e822f857a9d50daa4b99f23e7
parentbc3f2c908e085538ed0956159503e97825161bb9 (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.c10
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();