diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index 03a6cf66b57..1202e9cbe84 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -4446,6 +4446,7 @@ static void *si_create_vertex_elements(struct pipe_context *ctx, unsigned count, v->elem[i].src_offset = elements[i].src_offset; v->elem[i].stride = elements[i].src_stride; v->vertex_buffer_index[i] = vbo_index; + v->num_vertex_buffers = MAX2(v->num_vertex_buffers, vbo_index + 1); bool always_fix = false; union si_vs_fix_fetch fix_fetch; @@ -4670,7 +4671,7 @@ static void si_set_vertex_buffers(struct pipe_context *ctx, unsigned count, unsigned i; assert(count <= ARRAY_SIZE(sctx->vertex_buffer)); - assert(!count || buffers); + assert(!count || (count == sctx->vertex_elements->num_vertex_buffers && buffers)); for (i = 0; i < count; i++) { const struct pipe_vertex_buffer *src = buffers + i; @@ -4698,7 +4699,7 @@ static void si_set_vertex_buffers(struct pipe_context *ctx, unsigned count, pipe_resource_reference(&sctx->vertex_buffer[i].buffer.resource, NULL); sctx->num_vertex_buffers = count; - sctx->vertex_buffers_dirty = sctx->num_vertex_elements > 0; + sctx->vertex_buffers_dirty = count > 0; sctx->vertex_buffer_unaligned = unaligned; #ifndef NDEBUG sctx->vertex_elements_but_no_buffers = false; diff --git a/src/gallium/drivers/radeonsi/si_state.h b/src/gallium/drivers/radeonsi/si_state.h index dff865a549f..c5613e064ca 100644 --- a/src/gallium/drivers/radeonsi/si_state.h +++ b/src/gallium/drivers/radeonsi/si_state.h @@ -172,6 +172,7 @@ struct si_vertex_elements { uint16_t vb_alignment_check_mask; uint8_t count; + uint8_t num_vertex_buffers; /* Vertex buffer descriptor list size aligned for optimal prefetch. */ uint16_t vb_desc_list_alloc_size;