From 8b6e7d00f0dbc9421e687fb8549fde5e608dbea0 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 29 Sep 2020 15:06:07 -0400 Subject: [PATCH] zink: add flag for no-oping fence finish if a fence hasn't been activated then we don't need to wait on it Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_fence.c | 4 ++++ src/gallium/drivers/zink/zink_fence.h | 1 + 2 files changed, 5 insertions(+) diff --git a/src/gallium/drivers/zink/zink_fence.c b/src/gallium/drivers/zink/zink_fence.c index e6f07045cae..a45540201de 100644 --- a/src/gallium/drivers/zink/zink_fence.c +++ b/src/gallium/drivers/zink/zink_fence.c @@ -71,6 +71,7 @@ zink_create_fence(struct pipe_screen *pscreen, struct zink_batch *batch) pipe_resource_reference(&r, pres); util_dynarray_append(&ret->resources, struct pipe_resource*, pres); } + ret->submitted = true; pipe_reference_init(&ret->reference, 1); return ret; @@ -110,6 +111,8 @@ bool zink_fence_finish(struct zink_screen *screen, struct zink_fence *fence, uint64_t timeout_ns) { + if (!fence->submitted) + return true; bool success = vkWaitForFences(screen->dev, 1, &fence->fence, VK_TRUE, timeout_ns) == VK_SUCCESS; if (success) { @@ -128,6 +131,7 @@ zink_fence_finish(struct zink_screen *screen, struct zink_fence *fence, pipe_resource_reference(pres, NULL); } util_dynarray_clear(&fence->resources); + fence->submitted = false; } return success; } diff --git a/src/gallium/drivers/zink/zink_fence.h b/src/gallium/drivers/zink/zink_fence.h index 535f5d21260..dddee1c4129 100644 --- a/src/gallium/drivers/zink/zink_fence.h +++ b/src/gallium/drivers/zink/zink_fence.h @@ -38,6 +38,7 @@ struct zink_fence { VkFence fence; struct set *active_queries; /* zink_query objects which were active at some point in this batch */ struct util_dynarray resources; + bool submitted; }; static inline struct zink_fence *