From 78068d039be77ad0de13e9b18b41e5af24af98ed Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 27 Oct 2020 20:25:06 -0400 Subject: [PATCH] zink: add extra batch tracking for sampler views we're going to start invalidating and rebinding resources, which means we need to be extra sure that we have our lifetimes in order here Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_batch.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c index a952dd3f037..4de6c919218 100644 --- a/src/gallium/drivers/zink/zink_batch.c +++ b/src/gallium/drivers/zink/zink_batch.c @@ -38,6 +38,13 @@ zink_reset_batch(struct zink_context *ctx, struct zink_batch *batch) struct pipe_sampler_view *pres = (struct pipe_sampler_view *)entry->key; struct zink_sampler_view *sampler_view = zink_sampler_view(pres); sampler_view->batch_uses &= ~BITFIELD_BIT(batch->batch_id); + if (sampler_view->base.target == PIPE_BUFFER) { + struct zink_buffer_view *buffer_view = sampler_view->buffer_view; + zink_buffer_view_reference(ctx, &buffer_view, NULL); + } else { + struct zink_surface *surface = sampler_view->image_view; + pipe_surface_reference((struct pipe_surface**)&surface, NULL); + } pipe_sampler_view_reference(&pres, NULL); _mesa_set_remove(batch->sampler_views, entry); } @@ -236,6 +243,10 @@ zink_batch_reference_sampler_view(struct zink_batch *batch, assert(!found); sv->batch_uses |= bit; pipe_reference(NULL, &sv->base.reference); + if (sv->base.target == PIPE_BUFFER) + pipe_reference(NULL, &sv->buffer_view->reference); + else + pipe_reference(NULL, &sv->image_view->base.reference); batch->has_work = true; }