From 99f297651198c3424aab202595064d6f5596b2fc Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Mon, 28 Jan 2008 11:12:11 +0000 Subject: [PATCH] gallium: only call vertex/prim queue flush when there is something to flush --- src/mesa/pipe/draw/draw_prim.c | 9 +++++---- src/mesa/pipe/draw/draw_vertex_fetch.c | 10 ++++++++++ src/mesa/pipe/draw/draw_vertex_shader.c | 2 ++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/mesa/pipe/draw/draw_prim.c b/src/mesa/pipe/draw/draw_prim.c index 243381aec0c..2a612a16733 100644 --- a/src/mesa/pipe/draw/draw_prim.c +++ b/src/mesa/pipe/draw/draw_prim.c @@ -63,8 +63,7 @@ static void draw_prim_queue_flush( struct draw_context *draw ) fprintf(stdout,"Flushing with %d prims, %d verts\n", draw->pq.queue_nr, draw->vs.queue_nr); - if (draw->pq.queue_nr == 0) - return; + assert (draw->pq.queue_nr != 0); /* NOTE: we cannot save draw->pipeline->first in a local var because * draw->pipeline->first is often changed by the first call to tri(), @@ -109,10 +108,12 @@ void draw_do_flush( struct draw_context *draw, unsigned flags ) if (flags >= DRAW_FLUSH_SHADER_QUEUE) { - draw_vertex_shader_queue_flush(draw); + if (draw->vs.queue_nr) + draw_vertex_shader_queue_flush(draw); if (flags >= DRAW_FLUSH_PRIM_QUEUE) { - draw_prim_queue_flush(draw); + if (draw->pq.queue_nr) + draw_prim_queue_flush(draw); if (flags >= DRAW_FLUSH_VERTEX_CACHE) { draw_vertex_cache_invalidate(draw); diff --git a/src/mesa/pipe/draw/draw_vertex_fetch.c b/src/mesa/pipe/draw/draw_vertex_fetch.c index af3983b7f03..143acdd3b49 100644 --- a/src/mesa/pipe/draw/draw_vertex_fetch.c +++ b/src/mesa/pipe/draw/draw_vertex_fetch.c @@ -158,6 +158,14 @@ FETCH_ATTRIB( A8R8G8B8_UNORM, 4, CVT_8_UNORM ) static fetch_func get_fetch_func( enum pipe_format format ) { +#if 0 + { + char tmp[80]; + pf_sprint_name(tmp, format); + _mesa_printf("%s: %s\n", __FUNCTION__, tmp); + } +#endif + switch (format) { case PIPE_FORMAT_R64_FLOAT: return fetch_R64_FLOAT; @@ -317,6 +325,8 @@ void draw_update_vertex_fetch( struct draw_context *draw ) { unsigned nr_attrs, i; +// _mesa_printf("%s\n", __FUNCTION__); + /* this may happend during context init */ if (!draw->vertex_shader) return; diff --git a/src/mesa/pipe/draw/draw_vertex_shader.c b/src/mesa/pipe/draw/draw_vertex_shader.c index 3041974b9a4..289c35c7ae4 100644 --- a/src/mesa/pipe/draw/draw_vertex_shader.c +++ b/src/mesa/pipe/draw/draw_vertex_shader.c @@ -201,6 +201,8 @@ draw_vertex_shader_queue_flush(struct draw_context *draw) { unsigned i, j; + assert(draw->vs.queue_nr != 0); + /* XXX: do this on statechange: */ draw_update_vertex_fetch( draw ); -- 2.30.2