Module: wine Branch: master Commit: 844d4cd20604de4d9dcb68659e8dc25440221705 URL: https://gitlab.winehq.org/wine/wine/-/commit/844d4cd20604de4d9dcb68659e8dc25...
Author: Rémi Bernon rbernon@codeweavers.com Date: Sun Dec 10 10:30:49 2023 +0100
winevulkan: Return VK_ERROR_SURFACE_LOST_KHR from surface functions.
---
dlls/vulkan-1/tests/vulkan.c | 3 --- dlls/winevulkan/vulkan.c | 36 ++++++++++++++++-------------------- 2 files changed, 16 insertions(+), 23 deletions(-)
diff --git a/dlls/vulkan-1/tests/vulkan.c b/dlls/vulkan-1/tests/vulkan.c index 6142d73c903..5417585e00c 100644 --- a/dlls/vulkan-1/tests/vulkan.c +++ b/dlls/vulkan-1/tests/vulkan.c @@ -635,11 +635,8 @@ static void test_win32_surface_hwnd(VkInstance vk_instance, VkPhysicalDevice vk_ if (IsWindow(hwnd)) ok(vr == VK_SUCCESS, "Got unexpected vr %d.\n", vr); else - { - todo_wine ok(vr == VK_ERROR_SURFACE_LOST_KHR /* Nvidia */ || vr == VK_ERROR_UNKNOWN /* AMD */, "Got unexpected vr %d.\n", vr); - } }
count = 0; diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index 95bce62cc8d..240ba3e8618 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -1746,40 +1746,36 @@ static inline void adjust_max_image_count(struct wine_phys_dev *phys_dev, VkSurf } }
-VkResult wine_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice handle, VkSurfaceKHR surface_handle, +VkResult wine_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice device_handle, VkSurfaceKHR surface_handle, VkSurfaceCapabilitiesKHR *capabilities) { - struct wine_phys_dev *phys_dev = wine_phys_dev_from_handle(handle); + struct wine_phys_dev *physical_device = wine_phys_dev_from_handle(device_handle); struct wine_surface *surface = wine_surface_from_handle(surface_handle); + struct wine_instance *instance = physical_device->instance; VkResult res;
- res = phys_dev->instance->funcs.p_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(phys_dev->host_physical_device, - surface->driver_surface, capabilities); - - if (res == VK_SUCCESS) - adjust_max_image_count(phys_dev, capabilities); - + if (!NtUserIsWindow(surface->hwnd)) return VK_ERROR_SURFACE_LOST_KHR; + res = instance->funcs.p_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physical_device->host_physical_device, + surface->driver_surface, capabilities); + if (res == VK_SUCCESS) adjust_max_image_count(physical_device, capabilities); return res; }
-VkResult wine_vkGetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice handle, - const VkPhysicalDeviceSurfaceInfo2KHR *surface_info, +VkResult wine_vkGetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice device_handle, const VkPhysicalDeviceSurfaceInfo2KHR *surface_info, VkSurfaceCapabilities2KHR *capabilities) { - struct wine_phys_dev *phys_dev = wine_phys_dev_from_handle(handle); + struct wine_phys_dev *physical_device = wine_phys_dev_from_handle(device_handle); struct wine_surface *surface = wine_surface_from_handle(surface_info->surface); - VkPhysicalDeviceSurfaceInfo2KHR host_info; + VkPhysicalDeviceSurfaceInfo2KHR surface_info_host = *surface_info; + struct wine_instance *instance = physical_device->instance; VkResult res;
- host_info.sType = surface_info->sType; - host_info.pNext = surface_info->pNext; - host_info.surface = surface->driver_surface; - res = phys_dev->instance->funcs.p_vkGetPhysicalDeviceSurfaceCapabilities2KHR(phys_dev->host_physical_device, - &host_info, capabilities); - - if (res == VK_SUCCESS) - adjust_max_image_count(phys_dev, &capabilities->surfaceCapabilities); + surface_info_host.surface = surface->driver_surface;
+ if (!NtUserIsWindow(surface->hwnd)) return VK_ERROR_SURFACE_LOST_KHR; + res = instance->funcs.p_vkGetPhysicalDeviceSurfaceCapabilities2KHR(physical_device->host_physical_device, + &surface_info_host, capabilities); + if (res == VK_SUCCESS) adjust_max_image_count(physical_device, &capabilities->surfaceCapabilities); return res; }