vulkan/wsi: error out when image fence doesn't signal
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Thu, 12 Dec 2019 15:51:26 +0000 (17:51 +0200)
committerLionel Landwerlin <lionel.g.landwerlin@intel.com>
Mon, 16 Dec 2019 12:59:10 +0000 (14:59 +0200)
If for some reason the fence associated with an image doesn't signal,
we're likely in a device lost scenario, we should report that error.

We can't really wait for a given amount of time because we could get a
timeout and that is not a valid error to report for vkQueuePresentKHR,
so just wait forever.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/830
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
src/vulkan/wsi/wsi_common.c

index 65ab543cc5d77cb45d997eb53f07e49a876d0d4e..e45810d9c5d3aea1221b82715830c6789cf852a5 100644 (file)
@@ -1057,10 +1057,16 @@ wsi_common_queue_present(const struct wsi_device *wsi,
          if (result != VK_SUCCESS)
             goto fail_present;
       } else {
-         wsi->WaitForFences(device, 1, &swapchain->fences[image_index],
-                            true, 1);
+         result =
+            wsi->WaitForFences(device, 1, &swapchain->fences[image_index],
+                               true, ~0ull);
+         if (result != VK_SUCCESS)
+            goto fail_present;
 
-         wsi->ResetFences(device, 1, &swapchain->fences[image_index]);
+         result =
+            wsi->ResetFences(device, 1, &swapchain->fences[image_index]);
+         if (result != VK_SUCCESS)
+            goto fail_present;
       }
 
       struct wsi_image *image =