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 <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9067>
This commit is contained in:
Mike Blumenkrantz 2020-09-29 15:06:07 -04:00 committed by Marge Bot
parent 25a37c030b
commit 8b6e7d00f0
2 changed files with 5 additions and 0 deletions

View File

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

View File

@ -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 *