mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 20:28:04 +02:00
zink: don't use dynamic vertex stride with dynamic vertex input
avoid spurious validation errors and potential driver fails from updating stride twice Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12604>
This commit is contained in:
parent
34abd8761a
commit
07240424ca
4 changed files with 9 additions and 8 deletions
|
|
@ -903,13 +903,14 @@ zink_set_vertex_buffers(struct pipe_context *pctx,
|
|||
const struct pipe_vertex_buffer *buffers)
|
||||
{
|
||||
struct zink_context *ctx = zink_context(pctx);
|
||||
|
||||
const bool need_state_change = !zink_screen(pctx->screen)->info.have_EXT_extended_dynamic_state &&
|
||||
!zink_screen(pctx->screen)->info.have_EXT_vertex_input_dynamic_state;
|
||||
uint32_t enabled_buffers = ctx->gfx_pipeline_state.vertex_buffers_enabled_mask;
|
||||
enabled_buffers |= u_bit_consecutive(start_slot, num_buffers);
|
||||
enabled_buffers &= ~u_bit_consecutive(start_slot + num_buffers, unbind_num_trailing_slots);
|
||||
|
||||
if (buffers) {
|
||||
if (!zink_screen(pctx->screen)->info.have_EXT_extended_dynamic_state)
|
||||
if (need_state_change)
|
||||
ctx->vertex_state_changed = true;
|
||||
for (unsigned i = 0; i < num_buffers; ++i) {
|
||||
const struct pipe_vertex_buffer *vb = buffers + i;
|
||||
|
|
@ -935,7 +936,7 @@ zink_set_vertex_buffers(struct pipe_context *pctx,
|
|||
}
|
||||
}
|
||||
} else {
|
||||
if (!zink_screen(pctx->screen)->info.have_EXT_extended_dynamic_state)
|
||||
if (need_state_change)
|
||||
ctx->vertex_state_changed = true;
|
||||
for (unsigned i = 0; i < num_buffers; ++i) {
|
||||
update_existing_vbo(ctx, start_slot + i);
|
||||
|
|
|
|||
|
|
@ -156,7 +156,7 @@ zink_bind_vertex_buffers(struct zink_batch *batch, struct zink_context *ctx)
|
|||
}
|
||||
}
|
||||
|
||||
if (HAS_DYNAMIC_STATE)
|
||||
if (HAS_DYNAMIC_STATE && !HAS_VERTEX_INPUT)
|
||||
screen->vk.CmdBindVertexBuffers2EXT(batch->state->cmdbuf, 0,
|
||||
elems->hw_state.num_bindings,
|
||||
buffers, buffer_offsets, NULL, buffer_strides);
|
||||
|
|
|
|||
|
|
@ -189,7 +189,6 @@ zink_create_gfx_pipeline(struct zink_screen *screen,
|
|||
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK;
|
||||
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_STENCIL_OP_EXT;
|
||||
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT;
|
||||
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT;
|
||||
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_FRONT_FACE_EXT;
|
||||
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT;
|
||||
if (state->sample_locations_enabled)
|
||||
|
|
@ -198,9 +197,10 @@ zink_create_gfx_pipeline(struct zink_screen *screen,
|
|||
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_VIEWPORT;
|
||||
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_SCISSOR;
|
||||
}
|
||||
if (screen->info.have_EXT_vertex_input_dynamic_state) {
|
||||
if (screen->info.have_EXT_vertex_input_dynamic_state)
|
||||
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_VERTEX_INPUT_EXT;
|
||||
}
|
||||
else if (screen->info.have_EXT_extended_dynamic_state)
|
||||
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT;
|
||||
if (screen->info.have_EXT_extended_dynamic_state2)
|
||||
dynamicStateEnables[state_count++] = VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT;
|
||||
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ zink_bind_vertex_elements_state(struct pipe_context *pctx,
|
|||
ctx->element_state = cso;
|
||||
if (cso) {
|
||||
if (state->element_state != &ctx->element_state->hw_state) {
|
||||
ctx->vertex_state_changed = true;
|
||||
ctx->vertex_state_changed = !zink_screen(pctx->screen)->info.have_EXT_vertex_input_dynamic_state;
|
||||
ctx->vertex_buffers_dirty = ctx->element_state->hw_state.num_bindings > 0;
|
||||
}
|
||||
state->element_state = &ctx->element_state->hw_state;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue