diff options
author | Zack Rusin <[email protected]> | 2013-08-06 20:25:53 -0400 |
---|---|---|
committer | Zack Rusin <[email protected]> | 2013-08-08 20:54:03 -0400 |
commit | 1d425c4c6df2affd3b36b98e28357c59f7f02f58 (patch) | |
tree | 637b73ee59d30add455404f7aa38bc7e9f9511ca /src | |
parent | 57cd3267782fcf92d1e7d772760956516d4367df (diff) |
draw: reset the vertex id when injecting new primitive id
Without reseting the vertex id, with primitives where the same
vertex is used with different primitives (e.g. tri/lines strips)
our vbuf module won't re-emit those vertices with the changed
primitive id. So lets reset the vertex id whenever injecting
new primitive id to make sure that the vertex data is correctly
emitted.
Signed-off-by: Zack Rusin <[email protected]>
Reviewed-by: Roland Scheidegger <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/auxiliary/draw/draw_pipe_ia.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pipe_ia.c b/src/gallium/auxiliary/draw/draw_pipe_ia.c index ecbb23397dc..d64f19b38cb 100644 --- a/src/gallium/auxiliary/draw/draw_pipe_ia.c +++ b/src/gallium/auxiliary/draw/draw_pipe_ia.c @@ -68,6 +68,15 @@ inject_primid(struct draw_stage *stage, for (i = 0; i < num_verts; ++i) { struct vertex_header *v = header->v[i]; + /* We have to reset the vertex_id because it's used by + * vbuf to figure out if the vertex had already been + * emitted. For line/tri strips the first vertex of + * subsequent primitives would already be emitted, + * but since we're changing the primitive id on the vertex + * we want to make sure it's reemitted with the correct + * data. + */ + v->vertex_id = UNDEFINED_VERTEX_ID; memcpy(&v->data[slot][0], &primid, sizeof(primid)); memcpy(&v->data[slot][1], &primid, sizeof(primid)); memcpy(&v->data[slot][2], &primid, sizeof(primid)); |