summaryrefslogtreecommitdiff
path: root/src/mesa/pipe/draw/draw_vertex_cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/pipe/draw/draw_vertex_cache.c')
-rw-r--r--src/mesa/pipe/draw/draw_vertex_cache.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/mesa/pipe/draw/draw_vertex_cache.c b/src/mesa/pipe/draw/draw_vertex_cache.c
index f1b0cb14bd..a226798123 100644
--- a/src/mesa/pipe/draw/draw_vertex_cache.c
+++ b/src/mesa/pipe/draw/draw_vertex_cache.c
@@ -46,6 +46,8 @@ void draw_vertex_cache_invalidate( struct draw_context *draw )
for (i = 0; i < Elements( draw->vcache.idx ); i++)
draw->vcache.idx[i] = ~0;
+
+// fprintf(stderr, "x\n");
}
@@ -63,10 +65,14 @@ static struct vertex_header *get_vertex( struct draw_context *draw,
/* If slot is in use, use the overflow area:
*/
- if (draw->vcache.referenced & (1 << slot))
+ if (draw->vcache.referenced & (1 << slot)) {
+// fprintf(stderr, "o");
slot = VCACHE_SIZE + draw->vcache.overflow++;
- else
+ }
+ else {
+// fprintf(stderr, ".");
draw->vcache.referenced |= (1 << slot); /* slot now in use */
+ }
draw->vcache.idx[slot] = i;
@@ -79,7 +85,10 @@ static struct vertex_header *get_vertex( struct draw_context *draw,
/* Need to set the vertex's edge flag here. If we're being called
* by do_ef_triangle(), that function needs edge flag info!
*/
+ draw->vcache.vertex[slot]->clipmask = 0;
draw->vcache.vertex[slot]->edgeflag = 1; /*XXX use user's edge flag! */
+ draw->vcache.vertex[slot]->pad = 0;
+ draw->vcache.vertex[slot]->vertex_id = ~0;
}
return draw->vcache.vertex[slot];
@@ -110,6 +119,13 @@ static struct vertex_header *get_ubyte_elt_vertex( struct draw_context *draw,
}
+void draw_vertex_cache_reset_vertex_ids( struct draw_context *draw )
+{
+ unsigned i;
+
+ for (i = 0; i < Elements(draw->vcache.vertex); i++)
+ draw->vcache.vertex[i]->vertex_id = ~0;
+}
void draw_vertex_cache_validate( struct draw_context *draw )
{