From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winemac.drv/vulkan.c | 6 ++++++ dlls/winevulkan/vulkan.c | 6 ++++-- dlls/winewayland.drv/vulkan.c | 6 ++++++ dlls/winex11.drv/vulkan.c | 6 ++++++ include/wine/vulkan_driver.h | 1 + 5 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/dlls/winemac.drv/vulkan.c b/dlls/winemac.drv/vulkan.c index e76422280af..63c4896e54d 100644 --- a/dlls/winemac.drv/vulkan.c +++ b/dlls/winemac.drv/vulkan.c @@ -361,6 +361,11 @@ static VkResult macdrv_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR * return res; }
+static const char *macdrv_get_host_surface_extension(void) +{ + return pvkCreateMetalSurfaceEXT ? "VK_EXT_metal_surface" : "VK_MVK_macos_surface"; +} + static VkSurfaceKHR macdrv_wine_get_host_surface(VkSurfaceKHR surface) { struct wine_vk_surface *mac_surface = surface_from_handle(surface); @@ -384,6 +389,7 @@ static const struct vulkan_funcs vulkan_funcs = macdrv_vkGetSwapchainImagesKHR, macdrv_vkQueuePresentKHR,
+ macdrv_get_host_surface_extension, macdrv_wine_get_host_surface, };
diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index cca24c0afe6..244356217be 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -573,7 +573,7 @@ static VkResult wine_vk_instance_convert_create_info(struct conversion_context * VkDebugUtilsMessengerCreateInfoEXT *debug_utils_messenger; VkDebugReportCallbackCreateInfoEXT *debug_report_callback; VkBaseInStructure *header; - unsigned int i; + int i, surface_index = -1;
*dst = *src;
@@ -632,10 +632,11 @@ static VkResult wine_vk_instance_convert_create_info(struct conversion_context * if (!strcmp(extension_name, "VK_KHR_win32_surface")) { object->enable_win32_surface = VK_TRUE; + surface_index = i; } }
- if (use_external_memory()) + if (use_external_memory() || object->enable_win32_surface) { const char **new_extensions;
@@ -645,6 +646,7 @@ static VkResult wine_vk_instance_convert_create_info(struct conversion_context * dst->enabledExtensionCount * sizeof(*dst->ppEnabledExtensionNames)); new_extensions[dst->enabledExtensionCount++] = "VK_KHR_get_physical_device_properties2"; new_extensions[dst->enabledExtensionCount++] = "VK_KHR_external_memory_capabilities"; + if (surface_index >= 0) new_extensions[surface_index] = vk_funcs->p_get_host_surface_extension(); dst->ppEnabledExtensionNames = new_extensions; }
diff --git a/dlls/winewayland.drv/vulkan.c b/dlls/winewayland.drv/vulkan.c index c7cbdc90e28..6bac804a118 100644 --- a/dlls/winewayland.drv/vulkan.c +++ b/dlls/winewayland.drv/vulkan.c @@ -469,6 +469,11 @@ static VkResult wayland_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR return check_queue_present(present_info, res); }
+static const char *wayland_get_host_surface_extension(void) +{ + return "VK_KHR_wayland_surface"; +} + static VkSurfaceKHR wayland_wine_get_host_surface(VkSurfaceKHR surface) { return wine_vk_surface_from_handle(surface)->host_surface; @@ -485,6 +490,7 @@ static const struct vulkan_funcs vulkan_funcs = .p_vkGetPhysicalDeviceWin32PresentationSupportKHR = wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR, .p_vkGetSwapchainImagesKHR = wayland_vkGetSwapchainImagesKHR, .p_vkQueuePresentKHR = wayland_vkQueuePresentKHR, + .p_get_host_surface_extension = wayland_get_host_surface_extension, .p_wine_get_host_surface = wayland_wine_get_host_surface, };
diff --git a/dlls/winex11.drv/vulkan.c b/dlls/winex11.drv/vulkan.c index 6216a7eb5e8..31bfdb98f86 100644 --- a/dlls/winex11.drv/vulkan.c +++ b/dlls/winex11.drv/vulkan.c @@ -396,6 +396,11 @@ static VkResult X11DRV_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR * return res; }
+static const char *X11DRV_get_host_surface_extension(void) +{ + return "VK_KHR_xlib_surface"; +} + static VkSurfaceKHR X11DRV_wine_get_host_surface( VkSurfaceKHR surface ) { struct wine_vk_surface *x11_surface = surface_from_handle(surface); @@ -419,6 +424,7 @@ static const struct vulkan_funcs vulkan_funcs = X11DRV_vkGetSwapchainImagesKHR, X11DRV_vkQueuePresentKHR,
+ X11DRV_get_host_surface_extension, X11DRV_wine_get_host_surface, };
diff --git a/include/wine/vulkan_driver.h b/include/wine/vulkan_driver.h index 66b8c6ff813..7be4cc9e245 100644 --- a/include/wine/vulkan_driver.h +++ b/include/wine/vulkan_driver.h @@ -42,6 +42,7 @@ struct vulkan_funcs VkResult (*p_vkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *);
/* winevulkan specific functions */ + const char *(*p_get_host_surface_extension)(void); VkSurfaceKHR (*p_wine_get_host_surface)(VkSurfaceKHR); };