zink: stop using util_set_vertex_buffers_mask()
we're already iterating this, so there's no point in double iterating also no point in doing the extra refcounting Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10997>
This commit is contained in:
committed by
Marge Bot
parent
f4bae3fe5e
commit
6dd02a5139
@@ -834,34 +834,48 @@ zink_set_vertex_buffers(struct pipe_context *pctx,
|
|||||||
{
|
{
|
||||||
struct zink_context *ctx = zink_context(pctx);
|
struct zink_context *ctx = zink_context(pctx);
|
||||||
|
|
||||||
|
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 (buffers) {
|
||||||
if (!zink_screen(pctx->screen)->info.have_EXT_extended_dynamic_state)
|
if (!zink_screen(pctx->screen)->info.have_EXT_extended_dynamic_state)
|
||||||
ctx->gfx_pipeline_state.vertex_state_dirty = true;
|
ctx->gfx_pipeline_state.vertex_state_dirty = true;
|
||||||
for (int i = 0; i < num_buffers; ++i) {
|
for (unsigned i = 0; i < num_buffers; ++i) {
|
||||||
const struct pipe_vertex_buffer *vb = buffers + i;
|
const struct pipe_vertex_buffer *vb = buffers + i;
|
||||||
|
struct pipe_vertex_buffer *ctx_vb = &ctx->vertex_buffers[start_slot + i];
|
||||||
update_existing_vbo(ctx, start_slot + i);
|
update_existing_vbo(ctx, start_slot + i);
|
||||||
|
if (!take_ownership)
|
||||||
|
pipe_resource_reference(&ctx_vb->buffer.resource, vb->buffer.resource);
|
||||||
|
else {
|
||||||
|
pipe_resource_reference(&ctx_vb->buffer.resource, NULL);
|
||||||
|
ctx_vb->buffer.resource = vb->buffer.resource;
|
||||||
|
}
|
||||||
if (vb->buffer.resource) {
|
if (vb->buffer.resource) {
|
||||||
struct zink_resource *res = zink_resource(vb->buffer.resource);
|
struct zink_resource *res = zink_resource(vb->buffer.resource);
|
||||||
res->vbo_bind_count++;
|
res->vbo_bind_count++;
|
||||||
res->bind_count[0]++;
|
res->bind_count[0]++;
|
||||||
|
ctx_vb->stride = vb->stride;
|
||||||
|
ctx_vb->buffer_offset = vb->buffer_offset;
|
||||||
zink_batch_reference_resource_rw(&ctx->batch, res, false);
|
zink_batch_reference_resource_rw(&ctx->batch, res, false);
|
||||||
zink_resource_buffer_barrier(ctx, NULL, res, VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
|
zink_resource_buffer_barrier(ctx, NULL, res, VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
|
||||||
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT);
|
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (ctx->gfx_pipeline_state.vertex_buffers_enabled_mask) {
|
} else {
|
||||||
if (!zink_screen(pctx->screen)->info.have_EXT_extended_dynamic_state)
|
if (!zink_screen(pctx->screen)->info.have_EXT_extended_dynamic_state)
|
||||||
ctx->gfx_pipeline_state.vertex_state_dirty = true;
|
ctx->gfx_pipeline_state.vertex_state_dirty = true;
|
||||||
unsigned vertex_buffers_enabled_mask = ctx->gfx_pipeline_state.vertex_buffers_enabled_mask;
|
for (unsigned i = 0; i < num_buffers; ++i) {
|
||||||
while (vertex_buffers_enabled_mask) {
|
update_existing_vbo(ctx, start_slot + i);
|
||||||
unsigned slot = u_bit_scan(&vertex_buffers_enabled_mask);
|
pipe_resource_reference(&ctx->vertex_buffers[start_slot + i].buffer.resource, NULL);
|
||||||
update_existing_vbo(ctx, slot);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (unsigned i = 0; i < unbind_num_trailing_slots; i++) {
|
||||||
|
update_existing_vbo(ctx, start_slot + i);
|
||||||
|
pipe_resource_reference(&ctx->vertex_buffers[start_slot + i].buffer.resource, NULL);
|
||||||
|
}
|
||||||
|
ctx->gfx_pipeline_state.vertex_buffers_enabled_mask = enabled_buffers;
|
||||||
ctx->vertex_buffers_dirty = num_buffers > 0;
|
ctx->vertex_buffers_dirty = num_buffers > 0;
|
||||||
util_set_vertex_buffers_mask(ctx->vertex_buffers, &ctx->gfx_pipeline_state.vertex_buffers_enabled_mask,
|
|
||||||
buffers, start_slot, num_buffers,
|
|
||||||
unbind_num_trailing_slots, take_ownership);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
Reference in New Issue
Block a user