From f32079efab4def44ecd2e77edb3e5b47df608b53 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 22 Mar 2021 10:54:14 -0400 Subject: [PATCH] zink: add locking for fence resources Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_batch.c | 2 ++ src/gallium/drivers/zink/zink_fence.c | 2 ++ src/gallium/drivers/zink/zink_fence.h | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c index f9560b8df43..224c3d51223 100644 --- a/src/gallium/drivers/zink/zink_batch.c +++ b/src/gallium/drivers/zink/zink_batch.c @@ -125,6 +125,7 @@ zink_batch_state_destroy(struct zink_screen *screen, struct zink_batch_state *bs _mesa_set_destroy(bs->programs, NULL); _mesa_set_destroy(bs->desc_sets, NULL); _mesa_set_destroy(bs->active_queries, NULL); + simple_mtx_destroy(&bs->fence.resource_mtx); ralloc_free(bs); } @@ -168,6 +169,7 @@ create_batch_state(struct zink_context *ctx) /* this destroys the batch state on failure */ return NULL; + simple_mtx_init(&bs->fence.resource_mtx, mtx_plain); return bs; fail: zink_batch_state_destroy(screen, bs); diff --git a/src/gallium/drivers/zink/zink_fence.c b/src/gallium/drivers/zink/zink_fence.c index 188a049ff21..12d61f8c394 100644 --- a/src/gallium/drivers/zink/zink_fence.c +++ b/src/gallium/drivers/zink/zink_fence.c @@ -35,6 +35,7 @@ void zink_fence_clear_resources(struct zink_screen *screen, struct zink_fence *fence) { + simple_mtx_lock(&fence->resource_mtx); /* unref all used resources */ set_foreach(fence->resources, entry) { struct zink_resource_object *obj = (struct zink_resource_object *)entry->key; @@ -43,6 +44,7 @@ zink_fence_clear_resources(struct zink_screen *screen, struct zink_fence *fence) zink_resource_object_reference(screen, &obj, NULL); _mesa_set_remove(fence->resources, entry); } + simple_mtx_unlock(&fence->resource_mtx); } static void diff --git a/src/gallium/drivers/zink/zink_fence.h b/src/gallium/drivers/zink/zink_fence.h index ba59de495f7..f4b2a8d97cc 100644 --- a/src/gallium/drivers/zink/zink_fence.h +++ b/src/gallium/drivers/zink/zink_fence.h @@ -24,6 +24,7 @@ #ifndef ZINK_FENCE_H #define ZINK_FENCE_H +#include "util/simple_mtx.h" #include "util/u_inlines.h" #include @@ -40,6 +41,7 @@ struct zink_fence { VkFence fence; struct pipe_context *deferred_ctx; uint32_t batch_id; + simple_mtx_t resource_mtx; struct set *resources; /* resources need access removed asap, so they're on the fence */ bool submitted; };