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 <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9543>
This commit is contained in:
Mike Blumenkrantz 2020-10-27 20:25:06 -04:00
parent dc80529e1f
commit 78068d039b

View file

@ -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;
}