Mesa (main): gallium/aux: Move index offsetting from prim restart to primconvert

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Dec 31 18:02:59 UTC 2021


Module: Mesa
Branch: main
Commit: 5c3dfb4ef51ab33a2a67a55d4c499004e973e523
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5c3dfb4ef51ab33a2a67a55d4c499004e973e523

Author: Jesse Natalie <jenatali at microsoft.com>
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 <airlied at redhat.com>
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 at khr_texture_compression_astc@miptree-gl srgb-fp,Fail
 spec at khr_texture_compression_astc@miptree-gl srgb-fp at sRGB decode full precision,Fail
 spec at khr_texture_compression_astc@miptree-gles srgb,Fail
 spec at 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 at nv_primitive_restart@primitive-restart-disable_vbo,Fail
-
-# Regression from i965
-spec at nv_primitive_restart@primitive-restart-draw-mode-line_loop,Fail
-spec at nv_primitive_restart@primitive-restart-draw-mode-polygon,Fail
-spec at nv_primitive_restart@primitive-restart-draw-mode-quad_strip,Fail
-spec at nv_primitive_restart@primitive-restart-draw-mode-quads,Fail
-spec at nv_primitive_restart@primitive-restart-draw-mode-triangle_fan,Fail
-spec at nv_primitive_restart@primitive-restart-vbo_combined_vertex_and_index,Fail
-spec at 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



More information about the mesa-commit mailing list