From b5e460cec2d65a8b9a8b91c83f0bb3278e45a288 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 3 Sep 2021 10:19:46 -0400 Subject: [PATCH] zink: move batch ref when possible during buffer replacement avoid atomics when possible Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_context.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 6ee3be7577c..6cfaf8c6160 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -3446,10 +3446,13 @@ zink_context_replace_buffer_storage(struct pipe_context *pctx, struct pipe_resou assert(d->obj); assert(s->obj); util_idalloc_mt_free(&zink_screen(pctx->screen)->buffer_ids, delete_buffer_id); + zink_resource_object_reference(zink_screen(pctx->screen), NULL, s->obj); if (zink_resource_has_unflushed_usage(d) || (zink_resource_has_usage(d) && zink_resource_has_binds(d))) - zink_batch_reference_resource(&ctx->batch, d); - zink_resource_object_reference(zink_screen(pctx->screen), &d->obj, s->obj); + zink_batch_reference_resource_move(&ctx->batch, d); + else + zink_resource_object_reference(zink_screen(pctx->screen), &d->obj, NULL); + d->obj = s->obj; d->access = s->access; d->access_stage = s->access_stage; d->unordered_barrier = s->unordered_barrier;