Fire VkFence in vkAcquireImageANDROID
Have Vk synchronization objects fire in vkAcquireImageANDROID
as per described in https://source.android.com/devices/graphics/implement-vulkan
Tests: dEQP-VK.wsi.android.swapchain.modify.resize
Bug: b/133520634
Change-Id: I9b045df3b5ed0fff8efde9c0207e4a1da9c94b8f
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/31968
Reviewed-by: Chris Forbes <chrisforbes@google.com>
Tested-by: Hernan Liatis <hliatis@google.com>
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index c339caf..1c88a33 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -2770,6 +2770,22 @@
TRACE("(VkDevice device = %p, VkImage image = %p, int nativeFenceFd = %d, VkSemaphore semaphore = %p, VkFence fence = %p)",
device, image.get(), nativeFenceFd, semaphore.get(), fence.get());
+ if(nativeFenceFd >= 0)
+ {
+ sync_wait(nativeFenceFd, -1);
+ close(nativeFenceFd);
+ }
+
+ if(fence != VK_NULL_HANDLE)
+ {
+ vk::Cast(fence)->complete();
+ }
+
+ if(semaphore != VK_NULL_HANDLE)
+ {
+ vk::Cast(semaphore)->signal();
+ }
+
return VK_SUCCESS;
}