From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/vulkan.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index 6d8a5ef1b29..e755ef1c7b7 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -509,10 +509,12 @@ static struct vulkan_funcs vulkan_funcs = .p_get_host_surface_extension = win32u_get_host_surface_extension, };
+static PFN_vkCreateHeadlessSurfaceEXT p_vkCreateHeadlessSurfaceEXT; + static VkResult nulldrv_vulkan_surface_create( HWND hwnd, VkInstance instance, VkSurfaceKHR *surface, void **private ) { - FIXME( "stub!\n" ); - return VK_ERROR_INCOMPATIBLE_DRIVER; + VkHeadlessSurfaceCreateInfoEXT create_info = {.sType = VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT}; + return p_vkCreateHeadlessSurfaceEXT( instance, &create_info, NULL, surface ); }
static void nulldrv_vulkan_surface_destroy( HWND hwnd, void *private ) @@ -538,7 +540,7 @@ static VkBool32 nulldrv_vkGetPhysicalDeviceWin32PresentationSupportKHR( VkPhysic
static const char *nulldrv_get_host_surface_extension(void) { - return "VK_WINE_nulldrv_surface"; + return "VK_EXT_headless_surface"; }
static const struct vulkan_driver_funcs nulldrv_funcs = @@ -563,8 +565,14 @@ static void vulkan_driver_init(void) return; }
- if (status == STATUS_NOT_IMPLEMENTED) driver_funcs = &nulldrv_funcs; - else vulkan_funcs.p_get_host_surface_extension = driver_funcs->p_get_host_surface_extension; + if (!status) vulkan_funcs.p_get_host_surface_extension = driver_funcs->p_get_host_surface_extension; + else + { +#define LOAD_FUNCPTR( f ) if (!(p_##f = dlsym( vulkan_handle, #f ))) ERR( #f " not found!\n" ); + LOAD_FUNCPTR( vkCreateHeadlessSurfaceEXT ); +#undef LOAD_FUNCPTR + driver_funcs = &nulldrv_funcs; + } }
static void vulkan_driver_load(void)