diff options
author | Mike Blumenkrantz <michael.blumenkrantz@gmail.com> | 2021-03-22 10:54:14 -0400 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2021-03-30 15:12:58 +0000 |
commit | f32079efab4def44ecd2e77edb3e5b47df608b53 (patch) | |
tree | a08e967f2358f438fba6036d78606707ea7e5c12 | |
parent | 0ebc13564afda7f9568e8ec4bdc44cd6a4ded72b (diff) |
zink: add locking for fence resources
Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9885>
-rw-r--r-- | src/gallium/drivers/zink/zink_batch.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/zink/zink_fence.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/zink/zink_fence.h | 2 |
3 files changed, 6 insertions, 0 deletions
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 <vulkan/vulkan.h> @@ -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; }; |