Fix vkQueuePresentKHR is pResults is not null. pResults was not getting filled in correctly. As per the spec: pResults is an array of VkResult typed elements with swapchainCount entries. Applications that do not need per-swapchain results can use NULL for pResults. If non-NULL, each entry in pResults will be set to the VkResult for presenting the swapchain corresponding to the same index in pSwapchains. Bug: b/144766511 Change-Id: I42fcb6d96218d4dbfa60e857226c0aed72e7d8ca Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/38369 Reviewed-by: Chris Forbes <chrisforbes@google.com> Presubmit-Ready: Chris Forbes <chrisforbes@google.com> Tested-by: Chris Forbes <chrisforbes@google.com> Tested-by: Andrew Woloszyn <awoloszyn@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Vulkan/VkQueue.cpp b/src/Vulkan/VkQueue.cpp index c38b42c..25e30e9 100644 --- a/src/Vulkan/VkQueue.cpp +++ b/src/Vulkan/VkQueue.cpp
@@ -219,7 +219,7 @@ // Need to correctly implement threading using VkSemaphore // to get rid of it. b/132458423 waitIdle(); - + VkResult result = VK_SUCCESS; for(uint32_t i = 0; i < presentInfo->waitSemaphoreCount; i++) { vk::Cast(presentInfo->pWaitSemaphores[i])->wait(); @@ -227,12 +227,16 @@ for(uint32_t i = 0; i < presentInfo->swapchainCount; i++) { - VkResult result = vk::Cast(presentInfo->pSwapchains[i])->present(presentInfo->pImageIndices[i]); - if (result != VK_SUCCESS) - return result; + VkResult res = vk::Cast(presentInfo->pSwapchains[i])->present(presentInfo->pImageIndices[i]); + if (presentInfo->pResults != nullptr) + { + presentInfo->pResults[i] = res; + } + if (res != VK_SUCCESS) + result = res; } - return VK_SUCCESS; + return result; } #endif