Reset temporary vertices ids.

This commit is contained in:
José Fonseca 2007-11-07 13:07:20 +00:00
parent c28fdf3096
commit 3e22180fc8
4 changed files with 41 additions and 2 deletions

View file

@ -243,6 +243,18 @@ void draw_alloc_tmps( struct draw_stage *stage, unsigned nr )
}
}
/**
* Reset the verticies ids of this and subsequent stages.
*/
void draw_reset_tmps( struct draw_stage *stage )
{
unsigned i;
if (stage->tmp)
for (i = 0; i < stage->nr_tmps; i++)
stage->tmp[i]->vertex_id = UNDEFINED_VERTEX_ID;
}
void draw_free_tmps( struct draw_stage *stage )
{
if (stage->tmp) {
@ -251,9 +263,24 @@ void draw_free_tmps( struct draw_stage *stage )
}
}
boolean draw_use_sse(struct draw_context *draw)
{
return (boolean) draw->use_sse;
}
void draw_reset_vertex_ids(struct draw_context *draw)
{
struct draw_stage *stage = draw->pipeline.first;
while (stage) {
if (stage->reset_tmps)
stage->reset_tmps(stage);
else
draw_reset_tmps(stage);
stage = stage->next;
}
draw_vertex_cache_reset_vertex_ids(draw);
}

View file

@ -116,6 +116,13 @@ struct draw_stage
void (*end)( struct draw_stage * );
/**
* Reset temporary vertices ids in this stage
*
* draw_free_tmps will be called instead if null.
*/
void (*reset_tmps)( struct draw_stage * );
void (*reset_stipple_counter)( struct draw_stage * );
};
@ -254,8 +261,11 @@ extern struct draw_stage *draw_validate_stage( struct draw_context *context );
extern void draw_free_tmps( struct draw_stage *stage );
extern void draw_reset_tmps( struct draw_stage *stage );
extern void draw_alloc_tmps( struct draw_stage *stage, unsigned nr );
extern void draw_reset_vertex_ids( struct draw_context *draw );
extern int draw_vertex_cache_check_space( struct draw_context *draw,
unsigned nr_verts );

View file

@ -290,9 +290,11 @@ static void vbuf_flush_elements( struct draw_stage *stage )
break;
case PIPE_PRIM_LINES:
hwprim = PRIM3D_LINELIST;
assert(nr % 2 == 0);
break;
case PIPE_PRIM_TRIANGLES:
hwprim = PRIM3D_TRILIST;
assert(nr % 3 == 0);
break;
default:
assert(0);
@ -365,7 +367,7 @@ static void vbuf_flush_vertices( struct draw_stage *stage )
* issues uploading vertices if the hardware wants to flush when
* we flush.
*/
draw_vertex_cache_reset_vertex_ids( vbuf->i915->draw );
draw_reset_vertex_ids( vbuf->i915->draw );
}
/* FIXME: handle failure */

View file

@ -243,7 +243,7 @@ static void vbuf_flush_elements( struct draw_stage *stage )
* issues uploading vertices if the hardware wants to flush when
* we flush.
*/
draw_vertex_cache_reset_vertex_ids( vbuf->draw_context );
draw_reset_vertex_ids( vbuf->draw_context );
}
stage->tri = vbuf_first_tri;