Module: Mesa Branch: main Commit: b14e26b198f88676e71fc57d95963ee193a8dc1a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b14e26b198f88676e71fc57d95963ee193a8dc1a
Author: Marek Olšák <[email protected]> Date: Thu Dec 7 19:50:48 2023 -0500 st/mesa: make prepare_(indexed_)draw non-static for later use Reviewed-by: Pierre-Eric Pelloux-Prayer <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26619> --- src/mesa/state_tracker/st_draw.c | 41 ++++++++++++++++++++-------------------- src/mesa/state_tracker/st_draw.h | 7 +++++++ 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index bcda9b7f4c8..1d592b7fcad 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -73,9 +73,11 @@ static_assert(GL_QUADS == MESA_PRIM_QUADS, "enum mismatch"); static_assert(GL_TRIANGLE_STRIP_ADJACENCY == MESA_PRIM_TRIANGLE_STRIP_ADJACENCY, "enum mismatch"); static_assert(GL_PATCHES == MESA_PRIM_PATCHES, "enum mismatch"); -static inline void -prepare_draw(struct st_context *st, struct gl_context *ctx, uint64_t state_mask) +void +st_prepare_draw(struct gl_context *ctx, uint64_t state_mask) { + struct st_context *st = ctx->st; + /* Mesa core state should have been validated already */ assert(ctx->NewState == 0x0); @@ -109,14 +111,13 @@ prepare_draw(struct st_context *st, struct gl_context *ctx, uint64_t state_mask) } } -static bool ALWAYS_INLINE -prepare_indexed_draw(/* pass both st and ctx to reduce dereferences */ - struct st_context *st, - struct gl_context *ctx, - struct pipe_draw_info *info, - const struct pipe_draw_start_count_bias *draws, - unsigned num_draws) +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; + /* Get index bounds for user buffers. */ if (info->index_size && !info->index_bounds_valid && st->draw_needs_minmax_index) { @@ -138,9 +139,9 @@ st_draw_gallium(struct gl_context *ctx, { struct st_context *st = st_context(ctx); - prepare_draw(st, ctx, ST_PIPELINE_RENDER_STATE_MASK); + st_prepare_draw(ctx, ST_PIPELINE_RENDER_STATE_MASK); - if (!prepare_indexed_draw(st, ctx, info, draws, num_draws)) + if (!st_prepare_indexed_draw(ctx, info, draws, num_draws)) return; cso_draw_vbo(st->cso_context, info, drawid_offset, NULL, draws, num_draws); @@ -155,9 +156,9 @@ st_draw_gallium_multimode(struct gl_context *ctx, { struct st_context *st = st_context(ctx); - prepare_draw(st, ctx, ST_PIPELINE_RENDER_STATE_MASK); + st_prepare_draw(ctx, ST_PIPELINE_RENDER_STATE_MASK); - if (!prepare_indexed_draw(st, ctx, info, draws, num_draws)) + if (!st_prepare_indexed_draw(ctx, info, draws, num_draws)) return; unsigned i, first; @@ -212,7 +213,7 @@ st_indirect_draw_vbo(struct gl_context *ctx, return; assert(stride); - prepare_draw(st, ctx, ST_PIPELINE_RENDER_STATE_MASK); + st_prepare_draw(ctx, ST_PIPELINE_RENDER_STATE_MASK); memset(&indirect, 0, sizeof(indirect)); util_draw_init_info(&info); @@ -308,7 +309,7 @@ st_draw_transform_feedback(struct gl_context *ctx, GLenum mode, struct pipe_draw_indirect_info indirect; struct pipe_draw_start_count_bias draw = {0}; - prepare_draw(st, ctx, ST_PIPELINE_RENDER_STATE_MASK); + st_prepare_draw(ctx, ST_PIPELINE_RENDER_STATE_MASK); memset(&indirect, 0, sizeof(indirect)); util_draw_init_info(&info); @@ -335,7 +336,7 @@ st_draw_gallium_vertex_state(struct gl_context *ctx, { struct st_context *st = st_context(ctx); - prepare_draw(st, ctx, ST_PIPELINE_RENDER_STATE_MASK_NO_VARRAYS); + st_prepare_draw(ctx, ST_PIPELINE_RENDER_STATE_MASK_NO_VARRAYS); struct pipe_context *pipe = st->pipe; uint32_t velem_mask = ctx->VertexProgram._Current->info.inputs_read; @@ -499,9 +500,9 @@ st_hw_select_draw_gallium(struct gl_context *ctx, { struct st_context *st = st_context(ctx); - prepare_draw(st, ctx, ST_PIPELINE_RENDER_STATE_MASK); + st_prepare_draw(ctx, ST_PIPELINE_RENDER_STATE_MASK); - if (!prepare_indexed_draw(st, ctx, info, draws, num_draws)) + if (!st_prepare_indexed_draw(ctx, info, draws, num_draws)) return; if (!st_draw_hw_select_prepare_common(ctx) || @@ -520,9 +521,9 @@ st_hw_select_draw_gallium_multimode(struct gl_context *ctx, { struct st_context *st = st_context(ctx); - prepare_draw(st, ctx, ST_PIPELINE_RENDER_STATE_MASK); + st_prepare_draw(ctx, ST_PIPELINE_RENDER_STATE_MASK); - if (!prepare_indexed_draw(st, ctx, info, draws, num_draws)) + if (!st_prepare_indexed_draw(ctx, info, draws, num_draws)) return; if (!st_draw_hw_select_prepare_common(ctx)) diff --git a/src/mesa/state_tracker/st_draw.h b/src/mesa/state_tracker/st_draw.h index d6e345c107d..225bd238e77 100644 --- a/src/mesa/state_tracker/st_draw.h +++ b/src/mesa/state_tracker/st_draw.h @@ -73,6 +73,13 @@ pointer_to_offset(const void *ptr) return (unsigned) (((GLsizeiptr) ptr) & 0xffffffffUL); } +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,
