mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
zink: remove refcounting from batch states
these are always destroyed by the context, no exceptions Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12633>
This commit is contained in:
parent
39df394ffe
commit
c71e662ae2
4 changed files with 3 additions and 22 deletions
|
|
@ -180,7 +180,6 @@ create_batch_state(struct zink_context *ctx)
|
|||
goto fail
|
||||
|
||||
bs->ctx = ctx;
|
||||
pipe_reference_init(&bs->reference, 1);
|
||||
|
||||
SET_CREATE_OR_FAIL(bs->resources);
|
||||
SET_CREATE_OR_FAIL(bs->surfaces);
|
||||
|
|
|
|||
|
|
@ -61,7 +61,6 @@ batch_ptr_add_usage(struct zink_batch *batch, struct set *s, void *ptr);
|
|||
|
||||
struct zink_batch_state {
|
||||
struct zink_fence fence;
|
||||
struct pipe_reference reference;
|
||||
|
||||
struct zink_batch_usage usage;
|
||||
struct zink_context *ctx;
|
||||
|
|
@ -176,19 +175,6 @@ zink_batch_reference_surface(struct zink_batch *batch, struct zink_surface *surf
|
|||
void
|
||||
debug_describe_zink_batch_state(char *buf, const struct zink_batch_state *ptr);
|
||||
|
||||
static inline void
|
||||
zink_batch_state_reference(struct zink_screen *screen,
|
||||
struct zink_batch_state **dst,
|
||||
struct zink_batch_state *src)
|
||||
{
|
||||
struct zink_batch_state *old_dst = dst ? *dst : NULL;
|
||||
|
||||
if (pipe_reference_described(old_dst ? &old_dst->reference : NULL, src ? &src->reference : NULL,
|
||||
(debug_reference_descriptor)debug_describe_zink_batch_state))
|
||||
zink_batch_state_destroy(screen, old_dst);
|
||||
if (dst) *dst = src;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
zink_batch_usage_is_unflushed(const struct zink_batch_usage *u)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -100,15 +100,15 @@ zink_context_destroy(struct pipe_context *pctx)
|
|||
|
||||
simple_mtx_destroy(&ctx->batch_mtx);
|
||||
zink_clear_batch_state(ctx, ctx->batch.state);
|
||||
zink_batch_state_reference(screen, &ctx->batch.state, NULL);
|
||||
zink_batch_state_destroy(screen, ctx->batch.state);
|
||||
hash_table_foreach(&ctx->batch_states, entry) {
|
||||
struct zink_batch_state *bs = entry->data;
|
||||
zink_clear_batch_state(ctx, bs);
|
||||
zink_batch_state_reference(screen, &bs, NULL);
|
||||
zink_batch_state_destroy(screen, bs);
|
||||
}
|
||||
util_dynarray_foreach(&ctx->free_batch_states, struct zink_batch_state*, bs) {
|
||||
zink_clear_batch_state(ctx, *bs);
|
||||
zink_batch_state_reference(screen, bs, NULL);
|
||||
zink_batch_state_destroy(screen, *bs);
|
||||
}
|
||||
|
||||
if (ctx->framebuffer) {
|
||||
|
|
@ -2559,8 +2559,6 @@ zink_flush(struct pipe_context *pctx,
|
|||
*pfence = (struct pipe_fence_handle *)mfence;
|
||||
}
|
||||
|
||||
struct zink_batch_state *bs = zink_batch_state(fence);
|
||||
zink_batch_state_reference(screen, NULL, bs);
|
||||
mfence->fence = fence;
|
||||
if (fence)
|
||||
mfence->submit_count = submit_count;
|
||||
|
|
|
|||
|
|
@ -34,9 +34,7 @@
|
|||
static void
|
||||
destroy_fence(struct zink_screen *screen, struct zink_tc_fence *mfence)
|
||||
{
|
||||
struct zink_batch_state *bs = zink_batch_state(mfence->fence);
|
||||
mfence->fence = NULL;
|
||||
zink_batch_state_reference(screen, &bs, NULL);
|
||||
tc_unflushed_batch_token_reference(&mfence->tc_token, NULL);
|
||||
FREE(mfence);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue