Module: Mesa Branch: main Commit: 3b16541a8f17ad4738640562db1529cb89e04cf6 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3b16541a8f17ad4738640562db1529cb89e04cf6
Author: Marek Olšák <[email protected]> Date: Thu Dec 7 15:45:38 2023 -0500 mesa: move index bounds code (st_prepare_indexed_draw) into draw.c there is no other user Reviewed-by: Pierre-Eric Pelloux-Prayer <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26619> --- src/mesa/main/draw.c | 33 +++++++++++++++++++++++---------- src/mesa/state_tracker/st_draw.c | 20 -------------------- src/mesa/state_tracker/st_draw.h | 5 ----- 3 files changed, 23 insertions(+), 35 deletions(-) diff --git a/src/mesa/main/draw.c b/src/mesa/main/draw.c index 771b654e89d..a0dac799a1b 100644 --- a/src/mesa/main/draw.c +++ b/src/mesa/main/draw.c @@ -1574,6 +1574,23 @@ dump_element_buffer(struct gl_context *ctx, GLenum type) } #endif +static bool +validate_index_bounds(struct gl_context *ctx, struct pipe_draw_info *info, + const struct pipe_draw_start_count_bias *draws, + unsigned num_draws) +{ + assert(info->index_size); + + /* Get index bounds for user buffers. */ + if (!info->index_bounds_valid && ctx->st->draw_needs_minmax_index) { + /* Return if this fails, which means all draws have count == 0. */ + if (!vbo_get_minmax_indices_gallium(ctx, info, draws, num_draws)) + return false; + + info->index_bounds_valid = true; + } + return true; +} /** * Inner support for both _mesa_DrawElements and _mesa_DrawRangeElements. @@ -1655,8 +1672,7 @@ _mesa_validated_drawrangeelements(struct gl_context *ctx, draw.count = count; st_prepare_draw(ctx, ST_PIPELINE_RENDER_STATE_MASK); - - if (!st_prepare_indexed_draw(ctx, &info, &draw, 1)) + if (!validate_index_bounds(ctx, &info, &draw, 1)) return; ctx->Driver.DrawGallium(ctx, &info, ctx->DrawID, &draw, 1); @@ -2040,8 +2056,7 @@ _mesa_validated_multidrawelements(struct gl_context *ctx, } st_prepare_draw(ctx, ST_PIPELINE_RENDER_STATE_MASK); - - if (!st_prepare_indexed_draw(ctx, &info, draw, primcount)) + if (!validate_index_bounds(ctx, &info, draw, primcount)) return; ctx->Driver.DrawGallium(ctx, &info, 0, draw, primcount); @@ -2064,9 +2079,8 @@ _mesa_validated_multidrawelements(struct gl_context *ctx, draw.count = count[i]; st_prepare_draw(ctx, ST_PIPELINE_RENDER_STATE_MASK); - - if (!st_prepare_indexed_draw(ctx, &info, &draw, 1)) - return; + if (!validate_index_bounds(ctx, &info, &draw, 1)) + continue; ctx->Driver.DrawGallium(ctx, &info, i, &draw, 1); } @@ -2506,9 +2520,8 @@ _mesa_MultiDrawElementsIndirect(GLenum mode, GLenum type, draw.index_bias = cmd->baseVertex; st_prepare_draw(ctx, ST_PIPELINE_RENDER_STATE_MASK); - - if (!st_prepare_indexed_draw(ctx, &info, &draw, 1)) - return; + if (!validate_index_bounds(ctx, &info, &draw, 1)) + continue; ctx->Driver.DrawGallium(ctx, &info, i, &draw, 1); ptr += stride; diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index 9cd7c60116b..a2d0b85d0fd 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -111,26 +111,6 @@ st_prepare_draw(struct gl_context *ctx, uint64_t state_mask) } } -bool -st_prepare_indexed_draw(struct gl_context *ctx, struct pipe_draw_info *info, - const struct pipe_draw_start_count_bias *draws, - unsigned num_draws) -{ - struct st_context *st = ctx->st; - - assert(info->index_size); - - /* Get index bounds for user buffers. */ - if (!info->index_bounds_valid && st->draw_needs_minmax_index) { - /* Return if this fails, which means all draws have count == 0. */ - if (!vbo_get_minmax_indices_gallium(ctx, info, draws, num_draws)) - return false; - - info->index_bounds_valid = true; - } - return true; -} - static void st_draw_gallium(struct gl_context *ctx, struct pipe_draw_info *info, diff --git a/src/mesa/state_tracker/st_draw.h b/src/mesa/state_tracker/st_draw.h index c099116b466..a52182e0451 100644 --- a/src/mesa/state_tracker/st_draw.h +++ b/src/mesa/state_tracker/st_draw.h @@ -76,11 +76,6 @@ pointer_to_offset(const void *ptr) void st_prepare_draw(struct gl_context *ctx, uint64_t state_mask); -bool -st_prepare_indexed_draw(struct gl_context *ctx, struct pipe_draw_info *info, - const struct pipe_draw_start_count_bias *draws, - unsigned num_draws); - bool st_draw_quad(struct st_context *st, float x0, float y0, float x1, float y1, float z,
