From 4cf898b988b123c27092431b5fcebe0ced799744 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Fri, 5 Mar 2021 14:33:18 +1000 Subject: [PATCH] draw/prim_assembler: write correct decomposed primitive lengths In order for shader viewport index to be calculated correctly, the cliptest code needs proper primitive lengths to work out the provoking vertex. I half fixed this before for GL4 but looks like I didn't make it all the way. This fixes: dEQP-VK.draw.shader_viewport* Reviewed-by: Roland Scheidegger Part-of: --- src/gallium/auxiliary/draw/draw_prim_assembler.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_prim_assembler.c b/src/gallium/auxiliary/draw/draw_prim_assembler.c index edaaf0d..f7750bf 100644 --- a/src/gallium/auxiliary/draw/draw_prim_assembler.c +++ b/src/gallium/auxiliary/draw/draw_prim_assembler.c @@ -90,6 +90,16 @@ draw_prim_assembler_is_required(const struct draw_context *draw, } } +static void +add_prim(struct draw_assembler *asmblr, unsigned length) +{ + struct draw_prim_info *output_prims = asmblr->output_prims; + + output_prims->primitive_lengths = realloc(output_prims->primitive_lengths, sizeof(unsigned) * (output_prims->primitive_count + 1)); + output_prims->primitive_lengths[output_prims->primitive_count] = length; + output_prims->primitive_count++; +} + /* * Copy the vertex header along with its data from the current * vertex buffer into a buffer holding vertices arranged @@ -150,7 +160,8 @@ prim_point(struct draw_assembler *asmblr, inject_primid(asmblr, idx, asmblr->primid++); } indices[0] = idx; - + + add_prim(asmblr, 1); copy_verts(asmblr, indices, 1); } @@ -167,6 +178,7 @@ prim_line(struct draw_assembler *asmblr, indices[0] = i0; indices[1] = i1; + add_prim(asmblr, 2); copy_verts(asmblr, indices, 2); } @@ -185,6 +197,7 @@ prim_tri(struct draw_assembler *asmblr, indices[1] = i1; indices[2] = i2; + add_prim(asmblr, 3); copy_verts(asmblr, indices, 3); } @@ -272,7 +285,6 @@ draw_prim_assembler_run(struct draw_context *draw, } } - output_prims->primitive_lengths[0] = output_verts->count; output_prims->count = output_verts->count; } -- 2.7.4