lavapipe: Fix vkWaitForFences for initially-signalled fences

Fences with VK_FENCE_CREATE_SIGNALED_BIT are created with
signalled=true and timeline=0, waiting on them without
submitting first returned VK_TIMEOUT instead of VK_SUCCESS.

Signed-off-by: Pavel Asyutchenko <sventeam@yandex.ru>
Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Pavel Asyutchenko 2021-09-30 22:34:40 +03:00 committed by Dave Airlie
parent 96ea718b7e
commit 8a294b6f97

View file

@ -2089,7 +2089,7 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_WaitForFences(
struct lvp_fence *f = lvp_fence_from_handle(pFences[i]);
/* this is an unsubmitted fence: immediately bail out */
if (!f->timeline)
if (!f->timeline && !f->signalled)
return VK_TIMEOUT;
if (!fence || f->timeline > fence->timeline)
fence = f;
@ -2098,6 +2098,8 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_WaitForFences(
/* find lowest timeline id */
for (unsigned i = 0; i < fenceCount; i++) {
struct lvp_fence *f = lvp_fence_from_handle(pFences[i]);
if (f->signalled)
return VK_SUCCESS;
if (f->timeline && (!fence || f->timeline < fence->timeline))
fence = f;
}