vulkan: return VK_ERROR_SURFACE_LOST_KHR when queueBuffer fails
On Android, queueBuffer failure inside vkQueuePresentKHR is not quite
plausible. Previously, VK_ERROR_OUT_OF_DATE_KHR was returned when
queueBuffer failed, which ended up with app trying to get latest surface
caps again but failing with VK_ERROR_SURFACE_LOST_KHR. Per API contract
between Vulkan WSI and BufferQueue, queueBuffer failure inside
vkQueuePresentKHR should be treated as surface lost directly.
Bug: 178818988
Test: dEQP-VK.wsi.android.swapchain.*
Change-Id: Ifc5e58693aa0fe4abe01a9855d8d060dcce0b2f3
diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
index da28052..7bfe3f8 100644
--- a/vulkan/libvulkan/swapchain.cpp
+++ b/vulkan/libvulkan/swapchain.cpp
@@ -1709,7 +1709,7 @@
if (err != android::OK) {
ALOGE("queueBuffer failed: %s (%d)", strerror(-err), err);
swapchain_result = WorstPresentResult(
- swapchain_result, VK_ERROR_OUT_OF_DATE_KHR);
+ swapchain_result, VK_ERROR_SURFACE_LOST_KHR);
} else {
if (img.dequeue_fence >= 0) {
close(img.dequeue_fence);