From 0287336eeacb1bd272b0f28093104e502c672b9d Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Sat, 21 Mar 2026 17:10:37 -0700 Subject: [PATCH] vulkan/wsi/win32: add wsi_win32_find_idle_image helper Prepare to handle timeout for sw wsi (no DXGI). Cc: mesa-stable (cherry picked from commit 8ff24c7db3faf2bf698f49b19829a112bc2bfa2a) Part-of: --- .pick_status.json | 2 +- src/vulkan/wsi/wsi_common_win32.cpp | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 6e608569e7f..5b72496f84c 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -634,7 +634,7 @@ "description": "vulkan/wsi/win32: add wsi_win32_find_idle_image helper", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/vulkan/wsi/wsi_common_win32.cpp b/src/vulkan/wsi/wsi_common_win32.cpp index 03b84771b36..db3730aeb03 100644 --- a/src/vulkan/wsi/wsi_common_win32.cpp +++ b/src/vulkan/wsi/wsi_common_win32.cpp @@ -626,6 +626,19 @@ wsi_win32_release_images(struct wsi_swapchain *drv_chain, return VK_SUCCESS; } +static bool +wsi_win32_find_idle_image(struct wsi_win32_swapchain *chain, + uint32_t *out_image_index) +{ + for (uint32_t i = 0; i < chain->base.image_count; i++) { + if (chain->images[i].state == WSI_IMAGE_IDLE) { + *out_image_index = i; + chain->images[i].state = WSI_IMAGE_DRAWING; + return true; + } + } + return false; +} static VkResult wsi_win32_acquire_next_image(struct wsi_swapchain *drv_chain, @@ -639,13 +652,8 @@ wsi_win32_acquire_next_image(struct wsi_swapchain *drv_chain, if (chain->status != VK_SUCCESS) return chain->status; - for (uint32_t i = 0; i < chain->base.image_count; i++) { - if (chain->images[i].state == WSI_IMAGE_IDLE) { - *image_index = i; - chain->images[i].state = WSI_IMAGE_DRAWING; - return VK_SUCCESS; - } - } + if (wsi_win32_find_idle_image(chain, image_index)) + return VK_SUCCESS; assert(chain->dxgi); uint32_t index = chain->dxgi->GetCurrentBackBufferIndex();