gallium: added a flushing_vcache flag, test in draw_do_flush()
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 23 Apr 2008 01:11:59 +0000 (19:11 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 23 Apr 2008 01:11:59 +0000 (19:11 -0600)
Fixes broken polygon stipple, aaline, aapoint stages

src/gallium/auxiliary/draw/draw_context.c
src/gallium/auxiliary/draw/draw_private.h
src/gallium/auxiliary/draw/draw_pt_vcache.c

index db92a53..f901878 100644 (file)
@@ -367,7 +367,7 @@ draw_set_mapped_element_buffer( struct draw_context *draw,
  */
 void draw_do_flush( struct draw_context *draw, unsigned flags )
 {
-   if (!draw->flushing
+   if (!draw->flushing && !draw->vcache_flushing)
    {
       draw->flushing = TRUE;
 
index 83b81f6..39aa81b 100644 (file)
@@ -179,6 +179,7 @@ struct draw_context
    } driver;
 
    boolean flushing;
+   boolean vcache_flushing;
    boolean bypass_clipping;     /* set if either api or driver bypass_clipping true */
 
    /* pipe state that we need: */
index 1530554..afcff41 100644 (file)
@@ -63,6 +63,7 @@ struct vcache_frontend {
 
 static void vcache_flush( struct vcache_frontend *vcache )
 {
+   vcache->draw->vcache_flushing = TRUE;
    if (vcache->draw_count) {
       vcache->middle->run( vcache->middle,
                            vcache->fetch_elts,
@@ -74,6 +75,7 @@ static void vcache_flush( struct vcache_frontend *vcache )
    memset(vcache->in, ~0, sizeof(vcache->in));
    vcache->fetch_count = 0;
    vcache->draw_count = 0;
+   vcache->draw->vcache_flushing = FALSE;
 }
 
 static void vcache_check_flush( struct vcache_frontend *vcache )