gallium: only call vertex/prim queue flush when there is something to flush

This commit is contained in:
Keith Whitwell 2008-01-28 11:12:11 +00:00 committed by Ben Skeggs
parent 85d7e7ceee
commit f7e64c323f
3 changed files with 17 additions and 4 deletions

View file

@ -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);

View file

@ -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;

View file

@ -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 );