zink: move zink_bind_vertex_elements_state() to zink_context.c

needed in order to handle unbinding

no functional changes

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37277>
This commit is contained in:
Mike Blumenkrantz 2025-08-07 17:34:34 -04:00 committed by Marge Bot
parent f99503faa2
commit 06a8e7b87e
2 changed files with 61 additions and 61 deletions

View file

@ -1403,6 +1403,66 @@ update_existing_vbo(struct zink_context *ctx, unsigned slot)
update_buf_bind_count(ctx, res, false, true);
}
static void
zink_bind_vertex_elements_state(struct pipe_context *pctx,
void *cso)
{
struct zink_context *ctx = zink_context(pctx);
struct zink_gfx_pipeline_state *state = &ctx->gfx_pipeline_state;
ctx->element_state = cso;
if (cso) {
if (state->element_state != &ctx->element_state->hw_state) {
ctx->vertex_state_changed = true;
ctx->vertex_buffers_dirty = ctx->element_state->hw_state.num_bindings > 0;
}
state->element_state = &ctx->element_state->hw_state;
if (zink_screen(pctx->screen)->optimal_keys)
return;
const struct zink_vs_key *vs = zink_get_vs_key(ctx);
uint32_t decomposed_attrs = 0, decomposed_attrs_without_w = 0;
switch (vs->size) {
case 1:
decomposed_attrs = vs->u8.decomposed_attrs;
decomposed_attrs_without_w = vs->u8.decomposed_attrs_without_w;
break;
case 2:
decomposed_attrs = vs->u16.decomposed_attrs;
decomposed_attrs_without_w = vs->u16.decomposed_attrs_without_w;
break;
case 4:
decomposed_attrs = vs->u32.decomposed_attrs;
decomposed_attrs_without_w = vs->u32.decomposed_attrs_without_w;
break;
}
if (ctx->element_state->decomposed_attrs != decomposed_attrs ||
ctx->element_state->decomposed_attrs_without_w != decomposed_attrs_without_w) {
unsigned size = MAX2(ctx->element_state->decomposed_attrs_size, ctx->element_state->decomposed_attrs_without_w_size);
struct zink_shader_key *key = (struct zink_shader_key *)zink_set_vs_key(ctx);
key->size -= 2 * key->key.vs.size;
switch (size) {
case 1:
key->key.vs.u8.decomposed_attrs = ctx->element_state->decomposed_attrs;
key->key.vs.u8.decomposed_attrs_without_w = ctx->element_state->decomposed_attrs_without_w;
break;
case 2:
key->key.vs.u16.decomposed_attrs = ctx->element_state->decomposed_attrs;
key->key.vs.u16.decomposed_attrs_without_w = ctx->element_state->decomposed_attrs_without_w;
break;
case 4:
key->key.vs.u32.decomposed_attrs = ctx->element_state->decomposed_attrs;
key->key.vs.u32.decomposed_attrs_without_w = ctx->element_state->decomposed_attrs_without_w;
break;
default: break;
}
key->key.vs.size = size;
key->size += 2 * size;
}
} else {
state->element_state = NULL;
ctx->vertex_buffers_dirty = false;
}
}
ALWAYS_INLINE static void
zink_set_vertex_buffers_internal(struct pipe_context *pctx,
unsigned num_buffers,
@ -5512,6 +5572,7 @@ zink_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
ctx->base.set_vertex_buffers = zink_set_vertex_buffers_optimal;
else
ctx->base.set_vertex_buffers = zink_set_vertex_buffers;
ctx->base.bind_vertex_elements_state = zink_bind_vertex_elements_state;
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;

View file

@ -177,66 +177,6 @@ zink_create_vertex_elements_state(struct pipe_context *pctx,
return ves;
}
static void
zink_bind_vertex_elements_state(struct pipe_context *pctx,
void *cso)
{
struct zink_context *ctx = zink_context(pctx);
struct zink_gfx_pipeline_state *state = &ctx->gfx_pipeline_state;
ctx->element_state = cso;
if (cso) {
if (state->element_state != &ctx->element_state->hw_state) {
ctx->vertex_state_changed = true;
ctx->vertex_buffers_dirty = ctx->element_state->hw_state.num_bindings > 0;
}
state->element_state = &ctx->element_state->hw_state;
if (zink_screen(pctx->screen)->optimal_keys)
return;
const struct zink_vs_key *vs = zink_get_vs_key(ctx);
uint32_t decomposed_attrs = 0, decomposed_attrs_without_w = 0;
switch (vs->size) {
case 1:
decomposed_attrs = vs->u8.decomposed_attrs;
decomposed_attrs_without_w = vs->u8.decomposed_attrs_without_w;
break;
case 2:
decomposed_attrs = vs->u16.decomposed_attrs;
decomposed_attrs_without_w = vs->u16.decomposed_attrs_without_w;
break;
case 4:
decomposed_attrs = vs->u32.decomposed_attrs;
decomposed_attrs_without_w = vs->u32.decomposed_attrs_without_w;
break;
}
if (ctx->element_state->decomposed_attrs != decomposed_attrs ||
ctx->element_state->decomposed_attrs_without_w != decomposed_attrs_without_w) {
unsigned size = MAX2(ctx->element_state->decomposed_attrs_size, ctx->element_state->decomposed_attrs_without_w_size);
struct zink_shader_key *key = (struct zink_shader_key *)zink_set_vs_key(ctx);
key->size -= 2 * key->key.vs.size;
switch (size) {
case 1:
key->key.vs.u8.decomposed_attrs = ctx->element_state->decomposed_attrs;
key->key.vs.u8.decomposed_attrs_without_w = ctx->element_state->decomposed_attrs_without_w;
break;
case 2:
key->key.vs.u16.decomposed_attrs = ctx->element_state->decomposed_attrs;
key->key.vs.u16.decomposed_attrs_without_w = ctx->element_state->decomposed_attrs_without_w;
break;
case 4:
key->key.vs.u32.decomposed_attrs = ctx->element_state->decomposed_attrs;
key->key.vs.u32.decomposed_attrs_without_w = ctx->element_state->decomposed_attrs_without_w;
break;
default: break;
}
key->key.vs.size = size;
key->size += 2 * size;
}
} else {
state->element_state = NULL;
ctx->vertex_buffers_dirty = false;
}
}
static void
zink_delete_vertex_elements_state(struct pipe_context *pctx,
void *ves)
@ -854,7 +794,6 @@ void
zink_context_state_init(struct pipe_context *pctx)
{
pctx->create_vertex_elements_state = zink_create_vertex_elements_state;
pctx->bind_vertex_elements_state = zink_bind_vertex_elements_state;
pctx->delete_vertex_elements_state = zink_delete_vertex_elements_state;
pctx->create_blend_state = zink_create_blend_state;