From: Roland Scheidegger <srol...@vmware.com> The decomposition done in the prim assembler will turn tri fans into tris, but this wasn't reflected in the output prim type. Meaning with a tri fan with 6 verts input, the output was a tri fan with 12 vertices instead of a tri list with 12 vertices (not as bad as it sounds, since the additional tris created would all be degenerate since they'd all have two times vertex zero but still bogus). This is because the prim assembler is used if either the input topology is something with adjacency, or if prim id needs to be injected, and for the latter case topologies without adjacency can be converted to basic ones. (That said, I think this is all a bit wrong. Most likely this code should just kill off the adjacency and leave other topologies alone, with inserting prim ids at the right place depending on provoking vertex.) --- src/gallium/auxiliary/draw/draw_prim_assembler.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/gallium/auxiliary/draw/draw_prim_assembler.c b/src/gallium/auxiliary/draw/draw_prim_assembler.c index c609a77..5cb19f5 100644 --- a/src/gallium/auxiliary/draw/draw_prim_assembler.c +++ b/src/gallium/auxiliary/draw/draw_prim_assembler.c @@ -113,8 +113,8 @@ copy_verts(struct draw_assembler *asmblr, static void inject_primid(struct draw_assembler *asmblr, - unsigned idx, - unsigned primid) + unsigned idx, + unsigned primid) { int slot = asmblr->primid_slot; char *input = (char*)asmblr->input_verts->verts; @@ -246,7 +246,7 @@ draw_prim_assembler_run(struct draw_context *draw, { struct draw_assembler *asmblr = draw->ia; unsigned start, i; - unsigned assembled_prim = u_assembled_prim(input_prims->prim); + unsigned assembled_prim = u_reduced_prim(input_prims->prim); unsigned max_primitives = u_decomposed_prims_for_vertices( input_prims->prim, input_prims->count); unsigned max_verts = u_vertices_per_prim(assembled_prim) * max_primitives; @@ -268,7 +268,7 @@ draw_prim_assembler_run(struct draw_context *draw, output_prims->linear = TRUE; output_prims->elts = NULL; output_prims->start = 0; - output_prims->prim = u_assembled_prim(input_prims->prim); + output_prims->prim = assembled_prim; output_prims->flags = 0x0; output_prims->primitive_lengths = MALLOC(sizeof(unsigned)); output_prims->primitive_lengths[0] = 0; -- 1.9.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev