summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLionel Landwerlin <[email protected]>2019-07-11 15:21:04 +0300
committerDylan Baker <[email protected]>2019-11-19 16:56:00 -0800
commita390cf739fec05ffd00dbe382c1fad33422d23d1 (patch)
tree8e3dbe747722b7647fc6763dcb2830634f3b35cd /src
parenta993dc20b67dd9094680c3560b514aae000a0039 (diff)
anv/wsi: signal the semaphore in the acquireNextImage
We seem to have forgotten about the semaphore in the acquireNextImageInfo. v2: Signal semaphore/fence regardless of presentation status (Jason) Signed-off-by: Lionel Landwerlin <[email protected]> Cc: <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]> (cherry picked from commit edc6606d4e515707b22674a0b3357c02de52378e)
Diffstat (limited to 'src')
-rw-r--r--src/intel/vulkan/anv_wsi.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/intel/vulkan/anv_wsi.c b/src/intel/vulkan/anv_wsi.c
index 9edadb13d2d..0ba25b1f847 100644
--- a/src/intel/vulkan/anv_wsi.c
+++ b/src/intel/vulkan/anv_wsi.c
@@ -247,12 +247,28 @@ VkResult anv_AcquireNextImage2KHR(
pAcquireInfo,
pImageIndex);
- /* Thanks to implicit sync, the image is ready immediately. However, we
- * should wait for the current GPU state to finish.
+ /* Thanks to implicit sync, the image is ready immediately. However, we
+ * should wait for the current GPU state to finish. Regardless of the
+ * result of the presentation, we need to signal the semaphore & fence.
*/
+
+ if (pAcquireInfo->semaphore != VK_NULL_HANDLE) {
+ /* Put a dummy semaphore in temporary, this is the fastest way to avoid
+ * any kind of work yet still provide some kind of synchronization. This
+ * only works because the Mesa WSI code always returns an image
+ * immediately if available.
+ */
+ ANV_FROM_HANDLE(anv_semaphore, semaphore, pAcquireInfo->semaphore);
+ anv_semaphore_reset_temporary(device, semaphore);
+
+ struct anv_semaphore_impl *impl = &semaphore->temporary;
+
+ impl->type = ANV_SEMAPHORE_TYPE_DUMMY;
+ }
+
if (pAcquireInfo->fence != VK_NULL_HANDLE) {
- anv_QueueSubmit(anv_queue_to_handle(&device->queue), 0, NULL,
- pAcquireInfo->fence);
+ result = anv_QueueSubmit(anv_queue_to_handle(&device->queue),
+ 0, NULL, pAcquireInfo->fence);
}
return result;