diff --git a/src/gallium/auxiliary/indices/u_indices.c b/src/gallium/auxiliary/indices/u_indices.c index 0a618bfe1f5..ae2110561a8 100644 --- a/src/gallium/auxiliary/indices/u_indices.c +++ b/src/gallium/auxiliary/indices/u_indices.c @@ -158,73 +158,9 @@ u_index_translator(unsigned hw_mask, return U_TRANSLATE_MEMCPY; } - else { - *out_translate = translate[in_idx][out_idx][in_pv][out_pv][prim_restart][prim]; - *out_prim = u_index_prim_type_convert(hw_mask, prim); - - switch (prim) { - case PIPE_PRIM_POINTS: - *out_nr = nr; - break; - - case PIPE_PRIM_LINES: - *out_nr = nr; - break; - - case PIPE_PRIM_LINE_STRIP: - *out_nr = (nr - 1) * 2; - break; - - case PIPE_PRIM_LINE_LOOP: - *out_nr = nr * 2; - break; - - case PIPE_PRIM_TRIANGLES: - *out_nr = nr; - break; - - case PIPE_PRIM_TRIANGLE_STRIP: - *out_nr = (nr - 2) * 3; - break; - - case PIPE_PRIM_TRIANGLE_FAN: - *out_nr = (nr - 2) * 3; - break; - - case PIPE_PRIM_QUADS: - *out_nr = (nr / 4) * 6; - break; - - case PIPE_PRIM_QUAD_STRIP: - *out_nr = (nr - 2) * 3; - break; - - case PIPE_PRIM_POLYGON: - *out_nr = (nr - 2) * 3; - break; - - case PIPE_PRIM_LINES_ADJACENCY: - *out_nr = nr; - break; - - case PIPE_PRIM_LINE_STRIP_ADJACENCY: - *out_nr = (nr - 3) * 4; - break; - - case PIPE_PRIM_TRIANGLES_ADJACENCY: - *out_nr = nr; - break; - - case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY: - *out_nr = ((nr - 4) / 2) * 6; - break; - - default: - assert(0); - *out_nr = nr; - return U_TRANSLATE_ERROR; - } - } + *out_translate = translate[in_idx][out_idx][in_pv][out_pv][prim_restart][prim]; + *out_prim = u_index_prim_type_convert(hw_mask, prim); + *out_nr = u_index_count_converted_indices(hw_mask, in_pv == out_pv, prim, nr); return ret; } @@ -321,56 +257,6 @@ u_index_generator(unsigned hw_mask, *out_generate = generate[out_idx][in_pv][out_pv][PIPE_PRIM_POINTS]; return U_GENERATE_LINEAR; } - else { - *out_generate = generate[out_idx][in_pv][out_pv][prim]; - - switch (prim) { - case PIPE_PRIM_POINTS: - return U_GENERATE_REUSABLE; - - case PIPE_PRIM_LINES: - return U_GENERATE_REUSABLE; - - case PIPE_PRIM_LINE_STRIP: - return U_GENERATE_REUSABLE; - - case PIPE_PRIM_LINE_LOOP: - return U_GENERATE_ONE_OFF; - - case PIPE_PRIM_TRIANGLES: - return U_GENERATE_REUSABLE; - - case PIPE_PRIM_TRIANGLE_STRIP: - return U_GENERATE_REUSABLE; - - case PIPE_PRIM_TRIANGLE_FAN: - return U_GENERATE_REUSABLE; - - case PIPE_PRIM_QUADS: - return U_GENERATE_REUSABLE; - - case PIPE_PRIM_QUAD_STRIP: - return U_GENERATE_REUSABLE; - - case PIPE_PRIM_POLYGON: - return U_GENERATE_REUSABLE; - - case PIPE_PRIM_LINES_ADJACENCY: - return U_GENERATE_REUSABLE; - - case PIPE_PRIM_LINE_STRIP_ADJACENCY: - return U_GENERATE_REUSABLE; - - case PIPE_PRIM_TRIANGLES_ADJACENCY: - return U_GENERATE_REUSABLE; - - case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY: - return U_GENERATE_REUSABLE; - - default: - assert(0); - *out_generate = generate[out_idx][in_pv][out_pv][PIPE_PRIM_POINTS]; - return U_TRANSLATE_ERROR; - } - } + *out_generate = generate[out_idx][in_pv][out_pv][prim]; + return prim == PIPE_PRIM_LINE_LOOP ? U_GENERATE_ONE_OFF : U_GENERATE_REUSABLE; }