summaryrefslogtreecommitdiff
path: root/src/gallium
diff options
context:
space:
mode:
authorBrian Paul <brian.paul@tungstengraphics.com>2008-04-22 19:11:59 -0600
committerBrian Paul <brian.paul@tungstengraphics.com>2008-04-22 19:11:59 -0600
commit72fd5b9c5a78792ad8c1fe7c8713a3583008c50a (patch)
treeb7afaacfd9d93d564e78f34e389bb2efd9470f8d /src/gallium
parent91e37b71404a83b5e4258e129a2753f7c8fd0706 (diff)
gallium: added a flushing_vcache flag, test in draw_do_flush()
Fixes broken polygon stipple, aaline, aapoint stages
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/auxiliary/draw/draw_context.c2
-rw-r--r--src/gallium/auxiliary/draw/draw_private.h1
-rw-r--r--src/gallium/auxiliary/draw/draw_pt_vcache.c2
3 files changed, 4 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c
index db92a53ed2..f90187816b 100644
--- a/src/gallium/auxiliary/draw/draw_context.c
+++ b/src/gallium/auxiliary/draw/draw_context.c
@@ -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;
diff --git a/src/gallium/auxiliary/draw/draw_private.h b/src/gallium/auxiliary/draw/draw_private.h
index 83b81f66a0..39aa81b43c 100644
--- a/src/gallium/auxiliary/draw/draw_private.h
+++ b/src/gallium/auxiliary/draw/draw_private.h
@@ -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: */
diff --git a/src/gallium/auxiliary/draw/draw_pt_vcache.c b/src/gallium/auxiliary/draw/draw_pt_vcache.c
index 153055417d..afcff41043 100644
--- a/src/gallium/auxiliary/draw/draw_pt_vcache.c
+++ b/src/gallium/auxiliary/draw/draw_pt_vcache.c
@@ -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 )