mesa: index _RestartIndex with index_size_shift
authorMarek Olšák <marek.olsak@amd.com>
Sun, 1 Nov 2020 18:01:30 +0000 (13:01 -0500)
committerMarge Bot <eric+marge@anholt.net>
Wed, 18 Nov 2020 01:41:25 +0000 (01:41 +0000)
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7441>

src/mesa/drivers/dri/i965/genX_state_upload.c
src/mesa/main/enable.c
src/mesa/main/mtypes.h
src/mesa/state_tracker/st_draw.c
src/mesa/state_tracker/st_draw_feedback.c
src/mesa/vbo/vbo_minmax_index.c
src/mesa/vbo/vbo_primitive_restart.c
src/mesa/vbo/vbo_save_api.c

index f1cda59..46c9477 100644 (file)
@@ -905,7 +905,7 @@ genX(upload_cut_index)(struct brw_context *brw)
    brw_batch_emit(brw, GENX(3DSTATE_VF), vf) {
       if (ctx->Array._PrimitiveRestart[brw->ib.ib->index_size_shift] && brw->ib.ib) {
          vf.IndexedDrawCutIndexEnable = true;
-         vf.CutIndex = ctx->Array._RestartIndex[brw->ib.index_size - 1];
+         vf.CutIndex = ctx->Array._RestartIndex[brw->ib.ib->index_size_shift];
       }
    }
 }
index 4fc8daf..0a6632d 100644 (file)
@@ -57,7 +57,7 @@ _mesa_update_derived_primitive_restart_state(struct gl_context *ctx)
 
       ctx->Array._RestartIndex[0] = restart_index[0];
       ctx->Array._RestartIndex[1] = restart_index[1];
-      ctx->Array._RestartIndex[3] = restart_index[2];
+      ctx->Array._RestartIndex[2] = restart_index[2];
 
       /* Enable primitive restart only when the restart index can have an
        * effect. This is required for correctness in AMD GFX8 support.
index 6bdbbb9..bd0ae96 100644 (file)
@@ -1633,7 +1633,7 @@ struct gl_array_attrib
    GLboolean PrimitiveRestartFixedIndex;
    GLboolean _PrimitiveRestart[3]; /**< Enable indexed by index_size_shift. */
    GLuint RestartIndex;
-   GLuint _RestartIndex[4]; /**< Restart indices for index_size - 1. */
+   GLuint _RestartIndex[3]; /**< Restart indices indexed by index_size_shift. */
    /*@}*/
 
    /* GL_ARB_vertex_buffer_object */
index ac50dd0..e189fd9 100644 (file)
@@ -192,7 +192,7 @@ st_draw_vbo(struct gl_context *ctx,
          info.index.user = ib->ptr;
       }
 
-      info.restart_index = ctx->Array._RestartIndex[info.index_size - 1];
+      info.restart_index = ctx->Array._RestartIndex[ib->index_size_shift];
       info.primitive_restart = ctx->Array._PrimitiveRestart[ib->index_size_shift];
    }
    else {
@@ -266,7 +266,7 @@ st_indirect_draw_vbo(struct gl_context *ctx,
       info.index.resource = st_buffer_object(bufobj)->buffer;
       draw.start = pointer_to_offset(ib->ptr) >> ib->index_size_shift;
 
-      info.restart_index = ctx->Array._RestartIndex[info.index_size - 1];
+      info.restart_index = ctx->Array._RestartIndex[ib->index_size_shift];
       info.primitive_restart = ctx->Array._PrimitiveRestart[ib->index_size_shift];
    }
 
index ba77869..5d0d44c 100644 (file)
@@ -214,7 +214,7 @@ st_feedback_draw_vbo(struct gl_context *ctx,
                        index_size, ~0);
 
       info.primitive_restart = ctx->Array._PrimitiveRestart[ib->index_size_shift];
-      info.restart_index = ctx->Array._RestartIndex[index_size - 1];
+      info.restart_index = ctx->Array._RestartIndex[ib->index_size_shift];
    } else {
       info.index_size = 0;
       info.has_user_indices = false;
index d92bf19..914257b 100644 (file)
@@ -328,7 +328,7 @@ vbo_get_minmax_index(struct gl_context *ctx,
 {
    const GLboolean restart = ctx->Array._PrimitiveRestart[ib->index_size_shift];
    const GLuint restartIndex =
-      ctx->Array._RestartIndex[(1 << ib->index_size_shift) - 1];
+      ctx->Array._RestartIndex[ib->index_size_shift];
    const char *indices;
    GLintptr offset = 0;
 
index 3df8110..dd6a25b 100644 (file)
@@ -177,7 +177,7 @@ vbo_sw_primitive_restart(struct gl_context *ctx,
    GLuint sub_prim_num;
    GLuint end_index;
    GLuint sub_end_index;
-   GLuint restart_index = ctx->Array._RestartIndex[(1 << ib->index_size_shift) - 1];
+   GLuint restart_index = ctx->Array._RestartIndex[ib->index_size_shift];
    struct _mesa_prim temp_prim;
    GLboolean map_ib = ib->obj && !ib->obj->Mappings[MAP_INTERNAL].Pointer;
    const void *ptr;
index a83c641..0b1714f 100644 (file)
@@ -1388,7 +1388,7 @@ array_element(struct gl_context *ctx,
     * then we call PrimitiveRestartNV and return.
     */
    if (ctx->Array._PrimitiveRestart[index_size_shift] &&
-       elt == ctx->Array._RestartIndex[(1 << index_size_shift) - 1]) {
+       elt == ctx->Array._RestartIndex[index_size_shift]) {
       CALL_PrimitiveRestartNV(ctx->CurrentServerDispatch, ());
       return;
    }