zink: split set_vertex_buffers to avoid conditionals

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33849>
This commit is contained in:
Mike Blumenkrantz 2025-02-05 14:27:05 -05:00 committed by Marge Bot
parent 7909adcef1
commit f136f8ddd7

View file

@ -1351,9 +1351,10 @@ update_existing_vbo(struct zink_context *ctx, unsigned slot)
}
static void
zink_set_vertex_buffers(struct pipe_context *pctx,
unsigned num_buffers,
const struct pipe_vertex_buffer *buffers)
zink_set_vertex_buffers_internal(struct pipe_context *pctx,
unsigned num_buffers,
const struct pipe_vertex_buffer *buffers,
bool optimal)
{
struct zink_context *ctx = zink_context(pctx);
const bool have_input_state = zink_screen(pctx->screen)->info.have_EXT_vertex_input_dynamic_state;
@ -1392,10 +1393,12 @@ zink_set_vertex_buffers(struct pipe_context *pctx,
update_existing_vbo(ctx, i);
pipe_resource_reference(&ctx->vertex_buffers[i].buffer.resource, NULL);
}
if (need_state_change)
ctx->vertex_state_changed = true;
else if (!have_input_state && ctx->gfx_pipeline_state.vertex_buffers_enabled_mask != enabled_buffers)
ctx->vertex_state_changed = true;
if (!optimal) {
if (need_state_change)
ctx->vertex_state_changed = true;
else if (!have_input_state && ctx->gfx_pipeline_state.vertex_buffers_enabled_mask != enabled_buffers)
ctx->vertex_state_changed = true;
}
ctx->gfx_pipeline_state.vertex_buffers_enabled_mask = enabled_buffers;
ctx->vertex_buffers_dirty = num_buffers > 0;
#ifndef NDEBUG
@ -1404,6 +1407,22 @@ zink_set_vertex_buffers(struct pipe_context *pctx,
#endif
}
static void
zink_set_vertex_buffers(struct pipe_context *pctx,
unsigned num_buffers,
const struct pipe_vertex_buffer *buffers)
{
zink_set_vertex_buffers_internal(pctx, num_buffers, buffers, false);
}
static void
zink_set_vertex_buffers_optimal(struct pipe_context *pctx,
unsigned num_buffers,
const struct pipe_vertex_buffer *buffers)
{
zink_set_vertex_buffers_internal(pctx, num_buffers, buffers, true);
}
static void
zink_set_viewport_states(struct pipe_context *pctx,
unsigned start_slot,
@ -5332,7 +5351,10 @@ zink_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
ctx->base.set_shader_buffers = zink_set_shader_buffers_lazy;
}
ctx->base.set_polygon_stipple = zink_set_polygon_stipple;
ctx->base.set_vertex_buffers = zink_set_vertex_buffers;
if (screen->info.have_EXT_vertex_input_dynamic_state && screen->info.have_EXT_extended_dynamic_state)
ctx->base.set_vertex_buffers = zink_set_vertex_buffers_optimal;
else
ctx->base.set_vertex_buffers = zink_set_vertex_buffers;
ctx->base.set_viewport_states = zink_set_viewport_states;
ctx->base.set_scissor_states = zink_set_scissor_states;
ctx->base.set_inlinable_constants = zink_set_inlinable_constants;