From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winevulkan/vulkan.c | 10 ++++++++++ dlls/winevulkan/vulkan_private.h | 1 + 2 files changed, 11 insertions(+)
diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index 0a6224476e2..c8cb525929d 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -617,6 +617,10 @@ static VkResult wine_vk_instance_convert_create_info(struct conversion_context * { object->enable_wrapper_list = VK_TRUE; } + if (!strcmp(extension_name, "VK_KHR_win32_surface")) + { + object->enable_win32_surface = VK_TRUE; + } }
if (use_external_memory()) @@ -2285,6 +2289,12 @@ NTSTATUS vk_is_available_instance_function(void *arg) { struct is_available_instance_function_params *params = arg; struct wine_instance *instance = wine_instance_from_handle(params->instance); + + if (!strcmp(params->name, "vkCreateWin32SurfaceKHR")) + return instance->enable_win32_surface; + if (!strcmp(params->name, "vkGetPhysicalDeviceWin32PresentationSupportKHR")) + return instance->enable_win32_surface; + return !!vk_funcs->p_vkGetInstanceProcAddr(instance->host_instance, params->name); }
diff --git a/dlls/winevulkan/vulkan_private.h b/dlls/winevulkan/vulkan_private.h index 1697298a3d0..94eecc5e5d5 100644 --- a/dlls/winevulkan/vulkan_private.h +++ b/dlls/winevulkan/vulkan_private.h @@ -99,6 +99,7 @@ struct wine_instance struct wine_phys_dev **phys_devs; uint32_t phys_dev_count;
+ VkBool32 enable_win32_surface; VkBool32 enable_wrapper_list; struct list wrappers; pthread_rwlock_t wrapper_lock;
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winex11.drv/vulkan.c | 14 -------------- 1 file changed, 14 deletions(-)
diff --git a/dlls/winex11.drv/vulkan.c b/dlls/winex11.drv/vulkan.c index e8bcc09e3e2..c7da02ad681 100644 --- a/dlls/winex11.drv/vulkan.c +++ b/dlls/winex11.drv/vulkan.c @@ -433,24 +433,12 @@ static VkResult X11DRV_vkEnumerateInstanceExtensionProperties(const char *layer_ return res; }
-static const char *wine_vk_host_fn_name( const char *name ) -{ - if (!strcmp(name, "vkCreateWin32SurfaceKHR")) - return "vkCreateXlibSurfaceKHR"; - if (!strcmp(name, "vkGetPhysicalDeviceWin32PresentationSupportKHR")) - return "vkGetPhysicalDeviceXlibPresentationSupportKHR"; - - return name; -} - static void *X11DRV_vkGetDeviceProcAddr(VkDevice device, const char *name) { void *proc_addr;
TRACE("%p, %s\n", device, debugstr_a(name));
- if (!pvkGetDeviceProcAddr( device, wine_vk_host_fn_name( name ) )) return NULL; - if ((proc_addr = X11DRV_get_vk_device_proc_addr(name))) return proc_addr;
@@ -463,8 +451,6 @@ static void *X11DRV_vkGetInstanceProcAddr(VkInstance instance, const char *name)
TRACE("%p, %s\n", instance, debugstr_a(name));
- if (!pvkGetInstanceProcAddr( instance, wine_vk_host_fn_name( name ) )) return NULL; - if ((proc_addr = X11DRV_get_vk_instance_proc_addr(instance, name))) return proc_addr;
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winemac.drv/vulkan.c | 23 ----------------------- 1 file changed, 23 deletions(-)
diff --git a/dlls/winemac.drv/vulkan.c b/dlls/winemac.drv/vulkan.c index 86792692d42..28f062d5def 100644 --- a/dlls/winemac.drv/vulkan.c +++ b/dlls/winemac.drv/vulkan.c @@ -408,32 +408,12 @@ static VkResult macdrv_vkEnumerateInstanceExtensionProperties(const char *layer_ return res; }
-static const char *wine_vk_host_fn_name(const char *name) -{ - const char *create_surface_name = - pvkCreateMetalSurfaceEXT ? "vkCreateMetalSurfaceEXT" : "vkCreateMacOSSurfaceMVK"; - - if (!strcmp(name, "vkCreateWin32SurfaceKHR")) - return create_surface_name; - /* We just need something where non-NULL is returned if the correct extension is enabled. - * So since there is no host equivalent of this function check for the create - * surface function. - */ - if (!strcmp(name, "vkGetPhysicalDeviceWin32PresentationSupportKHR")) - return create_surface_name; - - return name; -} - static void *macdrv_vkGetDeviceProcAddr(VkDevice device, const char *name) { void *proc_addr;
TRACE("%p, %s\n", device, debugstr_a(name));
- if (!pvkGetDeviceProcAddr(device, wine_vk_host_fn_name(name))) - return NULL; - if ((proc_addr = macdrv_get_vk_device_proc_addr(name))) return proc_addr;
@@ -446,9 +426,6 @@ static void *macdrv_vkGetInstanceProcAddr(VkInstance instance, const char *name)
TRACE("%p, %s\n", instance, debugstr_a(name));
- if (!pvkGetInstanceProcAddr(instance, wine_vk_host_fn_name(name))) - return NULL; - if ((proc_addr = macdrv_get_vk_instance_proc_addr(instance, name))) return proc_addr;
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winewayland.drv/vulkan.c | 20 -------------------- 1 file changed, 20 deletions(-)
diff --git a/dlls/winewayland.drv/vulkan.c b/dlls/winewayland.drv/vulkan.c index 323563192ff..7a623c80713 100644 --- a/dlls/winewayland.drv/vulkan.c +++ b/dlls/winewayland.drv/vulkan.c @@ -189,16 +189,6 @@ static VkResult wine_vk_instance_convert_create_info(const VkInstanceCreateInfo return VK_SUCCESS; }
-static const char *wine_vk_host_fn_name(const char *name) -{ - if (!strcmp(name, "vkCreateWin32SurfaceKHR")) - return "vkCreateWaylandSurfaceKHR"; - if (!strcmp(name, "vkGetPhysicalDeviceWin32PresentationSupportKHR")) - return "vkGetPhysicalDeviceWaylandPresentationSupportKHR"; - - return name; -} - static void vk_result_update_out_of_date(VkResult *res) { /* If the current result is less severe than out_of_date, which for @@ -504,11 +494,6 @@ static void *wayland_vkGetDeviceProcAddr(VkDevice device, const char *name)
TRACE("%p, %s\n", device, debugstr_a(name));
- /* Do not return the driver function if the corresponding host function - * is not available. */ - if (!pvkGetDeviceProcAddr(device, wine_vk_host_fn_name(name))) - return NULL; - if ((proc_addr = get_vulkan_driver_device_proc_addr(&vulkan_funcs, name))) return proc_addr;
@@ -521,11 +506,6 @@ static void *wayland_vkGetInstanceProcAddr(VkInstance instance, const char *name
TRACE("%p, %s\n", instance, debugstr_a(name));
- /* Do not return the driver function if the corresponding host function - * is not available. */ - if (!pvkGetInstanceProcAddr(instance, wine_vk_host_fn_name(name))) - return NULL; - if ((proc_addr = get_vulkan_driver_instance_proc_addr(&vulkan_funcs, instance, name))) return proc_addr;
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winex11.drv/vulkan.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-)
diff --git a/dlls/winex11.drv/vulkan.c b/dlls/winex11.drv/vulkan.c index c7da02ad681..c589f6923fe 100644 --- a/dlls/winex11.drv/vulkan.c +++ b/dlls/winex11.drv/vulkan.c @@ -87,8 +87,7 @@ static VkBool32 (*pvkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevi static VkResult (*pvkGetSwapchainImagesKHR)(VkDevice, VkSwapchainKHR, uint32_t *, VkImage *); static VkResult (*pvkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *);
-static void *X11DRV_get_vk_device_proc_addr(const char *name); -static void *X11DRV_get_vk_instance_proc_addr(VkInstance instance, const char *name); +static const struct vulkan_funcs vulkan_funcs;
static inline struct wine_vk_surface *surface_from_handle(VkSurfaceKHR handle) { @@ -439,7 +438,7 @@ static void *X11DRV_vkGetDeviceProcAddr(VkDevice device, const char *name)
TRACE("%p, %s\n", device, debugstr_a(name));
- if ((proc_addr = X11DRV_get_vk_device_proc_addr(name))) + if ((proc_addr = get_vulkan_driver_device_proc_addr( &vulkan_funcs, name ))) return proc_addr;
return pvkGetDeviceProcAddr(device, name); @@ -451,7 +450,7 @@ static void *X11DRV_vkGetInstanceProcAddr(VkInstance instance, const char *name)
TRACE("%p, %s\n", instance, debugstr_a(name));
- if ((proc_addr = X11DRV_get_vk_instance_proc_addr(instance, name))) + if ((proc_addr = get_vulkan_driver_instance_proc_addr( &vulkan_funcs, instance, name ))) return proc_addr;
return pvkGetInstanceProcAddr(instance, name); @@ -532,16 +531,6 @@ static const struct vulkan_funcs vulkan_funcs = X11DRV_wine_get_host_surface, };
-static void *X11DRV_get_vk_device_proc_addr(const char *name) -{ - return get_vulkan_driver_device_proc_addr(&vulkan_funcs, name); -} - -static void *X11DRV_get_vk_instance_proc_addr(VkInstance instance, const char *name) -{ - return get_vulkan_driver_instance_proc_addr(&vulkan_funcs, instance, name); -} - const struct vulkan_funcs *get_vulkan_driver(UINT version) { static pthread_once_t init_once = PTHREAD_ONCE_INIT;
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winemac.drv/vulkan.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-)
diff --git a/dlls/winemac.drv/vulkan.c b/dlls/winemac.drv/vulkan.c index 28f062d5def..d0ebd668933 100644 --- a/dlls/winemac.drv/vulkan.c +++ b/dlls/winemac.drv/vulkan.c @@ -89,8 +89,7 @@ static VkResult (*pvkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice, static VkResult (*pvkGetSwapchainImagesKHR)(VkDevice, VkSwapchainKHR, uint32_t *, VkImage *); static VkResult (*pvkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *);
-static void *macdrv_get_vk_device_proc_addr(const char *name); -static void *macdrv_get_vk_instance_proc_addr(VkInstance instance, const char *name); +static const struct vulkan_funcs vulkan_funcs;
static inline struct wine_vk_surface *surface_from_handle(VkSurfaceKHR handle) { @@ -414,7 +413,7 @@ static void *macdrv_vkGetDeviceProcAddr(VkDevice device, const char *name)
TRACE("%p, %s\n", device, debugstr_a(name));
- if ((proc_addr = macdrv_get_vk_device_proc_addr(name))) + if ((proc_addr = get_vulkan_driver_device_proc_addr(&vulkan_funcs, name))) return proc_addr;
return pvkGetDeviceProcAddr(device, name); @@ -426,7 +425,7 @@ static void *macdrv_vkGetInstanceProcAddr(VkInstance instance, const char *name)
TRACE("%p, %s\n", instance, debugstr_a(name));
- if ((proc_addr = macdrv_get_vk_instance_proc_addr(instance, name))) + if ((proc_addr = get_vulkan_driver_instance_proc_addr(&vulkan_funcs, instance, name))) return proc_addr;
return pvkGetInstanceProcAddr(instance, name); @@ -503,16 +502,6 @@ static const struct vulkan_funcs vulkan_funcs = macdrv_wine_get_host_surface, };
-static void *macdrv_get_vk_device_proc_addr(const char *name) -{ - return get_vulkan_driver_device_proc_addr(&vulkan_funcs, name); -} - -static void *macdrv_get_vk_instance_proc_addr(VkInstance instance, const char *name) -{ - return get_vulkan_driver_instance_proc_addr(&vulkan_funcs, instance, name); -} - static const struct vulkan_funcs *get_vulkan_driver(UINT version) { static pthread_once_t init_once = PTHREAD_ONCE_INIT;