diff options
author | Georg Lehmann <dadschoorse@gmail.com> | 2020-02-06 22:38:35 +0100 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2020-02-10 09:05:28 -0800 |
commit | 32dc7fff47f2c0c88165b4cb24d9418eeafd7cea (patch) | |
tree | 5b9d081476b08067215e0e859f62a606d4531fcb | |
parent | 027f9c887c3ce4e0aa77051dc1c488b375696d2a (diff) |
Vulkan overlay: use the corresponding image index for each swapchain
pImageIndices should be a pointer to the current image index
otherwise every swapchain but the first one could have a wrong image index
Cc: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3741>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3741>
(cherry picked from commit 7283c33b981f975361e3bfa62a339c88f2642cbb)
-rw-r--r-- | .pick_status.json | 2 | ||||
-rw-r--r-- | src/vulkan/overlay-layer/overlay.cpp | 11 |
2 files changed, 9 insertions, 4 deletions
diff --git a/.pick_status.json b/.pick_status.json index 86cc18e9e44..3269c5c5ba3 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -22,7 +22,7 @@ "description": "Vulkan overlay: use the corresponding image index for each swapchain", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": null }, diff --git a/src/vulkan/overlay-layer/overlay.cpp b/src/vulkan/overlay-layer/overlay.cpp index d720dd192eb..565f5884bb6 100644 --- a/src/vulkan/overlay-layer/overlay.cpp +++ b/src/vulkan/overlay-layer/overlay.cpp @@ -1903,15 +1903,18 @@ static VkResult overlay_QueuePresentKHR( struct swapchain_data *swapchain_data = FIND(struct swapchain_data, swapchain); + uint32_t image_index = pPresentInfo->pImageIndices[i]; + before_present(swapchain_data, queue_data, pPresentInfo->pWaitSemaphores, pPresentInfo->waitSemaphoreCount, - pPresentInfo->pImageIndices[i]); + image_index); VkPresentInfoKHR present_info = *pPresentInfo; present_info.swapchainCount = 1; present_info.pSwapchains = &swapchain; + present_info.pImageIndices = &image_index; uint64_t ts0 = os_time_get(); result = queue_data->device->vtable.QueuePresentKHR(queue, &present_info); @@ -1923,11 +1926,13 @@ static VkResult overlay_QueuePresentKHR( VkSwapchainKHR swapchain = pPresentInfo->pSwapchains[i]; struct swapchain_data *swapchain_data = FIND(struct swapchain_data, swapchain); + + uint32_t image_index = pPresentInfo->pImageIndices[i]; + VkPresentInfoKHR present_info = *pPresentInfo; present_info.swapchainCount = 1; present_info.pSwapchains = &swapchain; - - uint32_t image_index = pPresentInfo->pImageIndices[i]; + present_info.pImageIndices = &image_index; struct overlay_draw *draw = before_present(swapchain_data, queue_data, |