Module: Mesa Branch: main Commit: 5c3dfb4ef51ab33a2a67a55d4c499004e973e523 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5c3dfb4ef51ab33a2a67a55d4c499004e973e523
Author: Jesse Natalie <[email protected]> Date: Wed Dec 29 16:56:53 2021 -0800 gallium/aux: Move index offsetting from prim restart to primconvert Fixes: b34fed64 ("u_prim_restart: Fix index scanning with start offset") Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5799 Reviewed-by: Dave Airlie <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14346> --- src/gallium/auxiliary/util/u_prim_restart.c | 2 +- src/gallium/drivers/crocus/ci/crocus-g41-fails.txt | 16 ---------------- src/util/indices/u_primconvert.c | 4 ++-- 3 files changed, 3 insertions(+), 19 deletions(-) diff --git a/src/gallium/auxiliary/util/u_prim_restart.c b/src/gallium/auxiliary/util/u_prim_restart.c index 32c6e55f909..85ce9f17490 100644 --- a/src/gallium/auxiliary/util/u_prim_restart.c +++ b/src/gallium/auxiliary/util/u_prim_restart.c @@ -239,7 +239,7 @@ util_prim_restart_convert_to_direct(const void *index_map, #define SCAN_INDEXES(TYPE) \ for (i = 0; i <= draw->count; i++) { \ if (i == draw->count || \ - ((const TYPE *) index_map)[draw->start + i] == info->restart_index) { \ + ((const TYPE *) index_map)[i] == info->restart_index) { \ /* cut / restart */ \ if (count > 0) { \ if (!add_range(info->mode, &ranges, draw->start + start, count, draw->index_bias)) { \ diff --git a/src/gallium/drivers/crocus/ci/crocus-g41-fails.txt b/src/gallium/drivers/crocus/ci/crocus-g41-fails.txt index feccae27bc0..0a21a08f42b 100644 --- a/src/gallium/drivers/crocus/ci/crocus-g41-fails.txt +++ b/src/gallium/drivers/crocus/ci/crocus-g41-fails.txt @@ -270,19 +270,3 @@ spec@khr_texture_compression_astc@miptree-gl srgb-fp,Fail spec@khr_texture_compression_astc@miptree-gl srgb-fp@sRGB decode full precision,Fail spec@khr_texture_compression_astc@miptree-gles srgb,Fail spec@khr_texture_compression_astc@miptree-gles srgb-fp,Fail - -# Regression from i965 -# "primitive-restart: failure drawing with glDrawElements(GL_TRIANGLE_STRIP, GL_UNSIGNED_SHORT), DISABLE_VBO -# primitive-restart: failure drawing with glDrawElements(GL_TRIANGLE_STRIP, GL_UNSIGNED_INT), DISABLE_VBO -# primitive-restart: failure drawing with glDrawElements(GL_LINE_STRIP, GL_UNSIGNED_SHORT), DISABLE_VBO -# primitive-restart: failure drawing with glDrawElements(GL_LINE_STRIP, GL_UNSIGNED_INT), DISABLE_VBO" -spec@nv_primitive_restart@primitive-restart-disable_vbo,Fail - -# Regression from i965 -spec@nv_primitive_restart@primitive-restart-draw-mode-line_loop,Fail -spec@nv_primitive_restart@primitive-restart-draw-mode-polygon,Fail -spec@nv_primitive_restart@primitive-restart-draw-mode-quad_strip,Fail -spec@nv_primitive_restart@primitive-restart-draw-mode-quads,Fail -spec@nv_primitive_restart@primitive-restart-draw-mode-triangle_fan,Fail -spec@nv_primitive_restart@primitive-restart-vbo_combined_vertex_and_index,Fail -spec@nv_primitive_restart@primitive-restart-vbo_vertex_only,Fail diff --git a/src/util/indices/u_primconvert.c b/src/util/indices/u_primconvert.c index c4fc9cd9f88..11586ad76f2 100644 --- a/src/util/indices/u_primconvert.c +++ b/src/util/indices/u_primconvert.c @@ -148,7 +148,7 @@ primconvert_init_draw(struct primconvert_context *pc, src = pipe_buffer_map(pc->pipe, info->index.resource, PIPE_MAP_READ, &src_transfer); } - src = (const uint8_t *)src; + const void *restart_src = (const uint8_t *)src + draw->start * info->index_size; /* if the resulting primitive type is not supported by the driver for primitive restart, * or if the original primitive type was not supported by the driver, @@ -160,7 +160,7 @@ primconvert_init_draw(struct primconvert_context *pc, /* step 1: rewrite draw to not use primitive primitive restart; * this pre-filters degenerate primitives */ - direct_draws = util_prim_restart_convert_to_direct(src, info, draw, &num_direct_draws, + direct_draws = util_prim_restart_convert_to_direct(restart_src, info, draw, &num_direct_draws, &new_info->min_index, &new_info->max_index, &total_index_count); new_info->primitive_restart = false; /* step 2: get a translator function which does nothing but handle any index size conversions
