@@ -3019,6 +3019,41 @@ static VkResult win32u_vkAcquireNextImageKHR( VkDevice client_device, VkSwapchai
30193019 return res ;
30203020}
30213021
3022+ static BOOL should_skip_wait ( HWND hwnd )
3023+ {
3024+ if (!NtUserIsWindowVisible ( hwnd ))
3025+ {
3026+ WARN ( "hwnd=%p not yet visible!\n" , hwnd );
3027+ return TRUE;
3028+ }
3029+
3030+ return FALSE;
3031+ }
3032+
3033+ static VkResult win32u_vkWaitForPresentKHR ( VkDevice client_device , VkSwapchainKHR client_swapchain ,
3034+ uint64_t presentId , uint64_t timeout )
3035+ {
3036+ struct vulkan_device * device = vulkan_device_from_handle ( client_device );
3037+ struct swapchain * swapchain = swapchain_from_handle ( client_swapchain );
3038+
3039+ if (swapchain -> surface && should_skip_wait ( swapchain -> surface -> hwnd ))
3040+ return VK_SUCCESS ;
3041+
3042+ return device -> p_vkWaitForPresentKHR ( device -> host .device , swapchain -> obj .host .swapchain , presentId , timeout );
3043+ }
3044+
3045+ static VkResult win32u_vkWaitForPresent2KHR ( VkDevice client_device , VkSwapchainKHR client_swapchain ,
3046+ const VkPresentWait2InfoKHR * info )
3047+ {
3048+ struct vulkan_device * device = vulkan_device_from_handle ( client_device );
3049+ struct swapchain * swapchain = swapchain_from_handle ( client_swapchain );
3050+
3051+ if (swapchain -> surface && should_skip_wait ( swapchain -> surface -> hwnd ))
3052+ return VK_SUCCESS ;
3053+
3054+ return device -> p_vkWaitForPresent2KHR ( device -> host .device , swapchain -> obj .host .swapchain , info );
3055+ }
3056+
30223057static VkResult win32u_vkGetSwapchainImagesKHR ( VkDevice client_device , VkSwapchainKHR client_swapchain ,
30233058 uint32_t * count , VkImage * images )
30243059{
@@ -4382,6 +4417,8 @@ static struct vulkan_funcs vulkan_funcs =
43824417 .p_vkQueueSubmit2KHR = win32u_vkQueueSubmit2KHR ,
43834418 .p_vkUnmapMemory = win32u_vkUnmapMemory ,
43844419 .p_vkUnmapMemory2KHR = win32u_vkUnmapMemory2KHR ,
4420+ .p_vkWaitForPresentKHR = win32u_vkWaitForPresentKHR ,
4421+ .p_vkWaitForPresent2KHR = win32u_vkWaitForPresent2KHR ,
43854422};
43864423
43874424static VkResult nulldrv_vulkan_surface_create ( HWND hwnd , BOOL raw , const struct vulkan_instance * instance ,
0 commit comments