From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/d3dkmt.c | 4 +++- dlls/win32u/vulkan.c | 1 - dlls/winemac.drv/vulkan.c | 13 ------------- dlls/winevulkan/make_vulkan | 1 - dlls/winevulkan/vulkan.c | 8 ++++++-- dlls/winewayland.drv/vulkan.c | 14 -------------- dlls/winex11.drv/vulkan.c | 13 ------------- dlls/winex11.drv/xrandr.c | 6 +++++- include/wine/vulkan_driver.h | 1 - 9 files changed, 14 insertions(+), 47 deletions(-)
diff --git a/dlls/win32u/d3dkmt.c b/dlls/win32u/d3dkmt.c index 795480c9968..e75a29e0934 100644 --- a/dlls/win32u/d3dkmt.c +++ b/dlls/win32u/d3dkmt.c @@ -78,6 +78,7 @@ static void d3dkmt_init_vulkan(void) .enabledExtensionCount = ARRAY_SIZE( extensions ), .ppEnabledExtensionNames = extensions, }; + PFN_vkDestroyInstance p_vkDestroyInstance; PFN_vkCreateInstance p_vkCreateInstance; VkResult vr;
@@ -95,11 +96,12 @@ static void d3dkmt_init_vulkan(void) return; }
+ p_vkDestroyInstance = vulkan_funcs->p_vkGetInstanceProcAddr( d3dkmt_vk_instance, "vkDestroyInstance" ); #define LOAD_VK_FUNC( f ) \ if (!(p##f = (void *)vulkan_funcs->p_vkGetInstanceProcAddr( d3dkmt_vk_instance, #f ))) \ { \ WARN( "Failed to load " #f ".\n" ); \ - vulkan_funcs->p_vkDestroyInstance( d3dkmt_vk_instance, NULL ); \ + p_vkDestroyInstance( d3dkmt_vk_instance, NULL ); \ vulkan_funcs = NULL; \ return; \ } diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index a1635e618c0..eac6793fea5 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -66,7 +66,6 @@ static void *win32u_vkGetInstanceProcAddr( VkInstance instance, const char *name if (!instance) return p_vkGetInstanceProcAddr( instance, name );
if (!strcmp( name, "vkCreateWin32SurfaceKHR" )) return vulkan_funcs.p_vkCreateWin32SurfaceKHR; - if (!strcmp( name, "vkDestroyInstance" )) return vulkan_funcs.p_vkDestroyInstance; if (!strcmp( name, "vkDestroySurfaceKHR" )) return vulkan_funcs.p_vkDestroySurfaceKHR; if (!strcmp( name, "vkGetInstanceProcAddr" )) return win32u_vkGetInstanceProcAddr; if (!strcmp( name, "vkGetPhysicalDeviceWin32PresentationSupportKHR" )) return vulkan_funcs.p_vkGetPhysicalDeviceWin32PresentationSupportKHR; diff --git a/dlls/winemac.drv/vulkan.c b/dlls/winemac.drv/vulkan.c index 154538e0a20..288bd9af4b1 100644 --- a/dlls/winemac.drv/vulkan.c +++ b/dlls/winemac.drv/vulkan.c @@ -80,7 +80,6 @@ typedef struct VkMetalSurfaceCreateInfoEXT static VkResult (*pvkCreateSwapchainKHR)(VkDevice, const VkSwapchainCreateInfoKHR *, const VkAllocationCallbacks *, VkSwapchainKHR *); static VkResult (*pvkCreateMacOSSurfaceMVK)(VkInstance, const VkMacOSSurfaceCreateInfoMVK*, const VkAllocationCallbacks *, VkSurfaceKHR *); static VkResult (*pvkCreateMetalSurfaceEXT)(VkInstance, const VkMetalSurfaceCreateInfoEXT*, const VkAllocationCallbacks *, VkSurfaceKHR *); -static void (*pvkDestroyInstance)(VkInstance, const VkAllocationCallbacks *); static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *); static VkResult (*pvkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *, VkSurfaceCapabilities2KHR *); @@ -207,16 +206,6 @@ err: return res; }
-static void macdrv_vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks *allocator) -{ - TRACE("%p %p\n", instance, allocator); - - if (allocator) - FIXME("Support for allocation callbacks not implemented yet\n"); - - pvkDestroyInstance(instance, NULL /* allocator */); -} - static void macdrv_vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks *allocator) { @@ -303,7 +292,6 @@ static const struct vulkan_funcs vulkan_funcs = { macdrv_vkCreateSwapchainKHR, macdrv_vkCreateWin32SurfaceKHR, - macdrv_vkDestroyInstance, macdrv_vkDestroySurfaceKHR, macdrv_vkDestroySwapchainKHR, NULL, @@ -328,7 +316,6 @@ UINT macdrv_VulkanInit(UINT version, void *vulkan_handle, struct vulkan_funcs *d LOAD_FUNCPTR(vkCreateSwapchainKHR) LOAD_FUNCPTR(vkCreateMacOSSurfaceMVK) LOAD_FUNCPTR(vkCreateMetalSurfaceEXT) - LOAD_FUNCPTR(vkDestroyInstance) LOAD_FUNCPTR(vkDestroySurfaceKHR) LOAD_FUNCPTR(vkDestroySwapchainKHR) LOAD_FUNCPTR(vkGetSwapchainImagesKHR) diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index e98c83ba75c..deec276436a 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -197,7 +197,6 @@ FUNCTION_OVERRIDES = { USER_DRIVER_FUNCS = { "vkCreateSwapchainKHR", "vkCreateWin32SurfaceKHR", - "vkDestroyInstance", "vkDestroySurfaceKHR", "vkDestroySwapchainKHR", "vkGetDeviceProcAddr", diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index a9a82b9c7d6..f1a45b366e5 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -905,8 +905,10 @@ VkResult wine_vkCreateInstance(const VkInstanceCreateInfo *create_info, res = wine_vk_instance_init_physical_devices(object); if (res != VK_SUCCESS) { + PFN_vkDestroyInstance p_vkDestroyInstance; ERR("Failed to load physical devices, res=%d\n", res); - vk_funcs->p_vkDestroyInstance(object->host_instance, NULL /* allocator */); + p_vkDestroyInstance = vk_funcs->p_vkGetInstanceProcAddr(object->host_instance, "vkDestroyInstance"); + p_vkDestroyInstance(object->host_instance, NULL /* allocator */); free(object->utils_messengers); free(object); return res; @@ -963,6 +965,7 @@ void wine_vkDestroyDevice(VkDevice handle, const VkAllocationCallbacks *allocato void wine_vkDestroyInstance(VkInstance handle, const VkAllocationCallbacks *allocator) { struct wine_instance *instance = wine_instance_from_handle(handle); + PFN_vkDestroyInstance p_vkDestroyInstance; unsigned int i;
if (allocator) @@ -970,7 +973,8 @@ void wine_vkDestroyInstance(VkInstance handle, const VkAllocationCallbacks *allo if (!instance) return;
- vk_funcs->p_vkDestroyInstance(instance->host_instance, NULL /* allocator */); + p_vkDestroyInstance = vk_funcs->p_vkGetInstanceProcAddr(instance->host_instance, "vkDestroyInstance"); + p_vkDestroyInstance(instance->host_instance, NULL /* allocator */); for (i = 0; i < instance->phys_dev_count; i++) { remove_handle_mapping(instance, &instance->phys_devs[i].wrapper_entry); diff --git a/dlls/winewayland.drv/vulkan.c b/dlls/winewayland.drv/vulkan.c index 834ba9a4dcf..1d7492fae36 100644 --- a/dlls/winewayland.drv/vulkan.c +++ b/dlls/winewayland.drv/vulkan.c @@ -55,7 +55,6 @@ typedef struct VkWaylandSurfaceCreateInfoKHR
static VkResult (*pvkCreateSwapchainKHR)(VkDevice, const VkSwapchainCreateInfoKHR *, const VkAllocationCallbacks *, VkSwapchainKHR *); static VkResult (*pvkCreateWaylandSurfaceKHR)(VkInstance, const VkWaylandSurfaceCreateInfoKHR *, const VkAllocationCallbacks *, VkSurfaceKHR *); -static void (*pvkDestroyInstance)(VkInstance, const VkAllocationCallbacks *); static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *); static VkBool32 (*pvkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice, uint32_t, struct wl_display *); @@ -322,17 +321,6 @@ err: return res; }
-static void wayland_vkDestroyInstance(VkInstance instance, - const VkAllocationCallbacks *allocator) -{ - TRACE("%p %p\n", instance, allocator); - - if (allocator) - FIXME("Support for allocation callbacks not implemented yet\n"); - - pvkDestroyInstance(instance, NULL /* allocator */); -} - static void wayland_vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks *allocator) { @@ -411,7 +399,6 @@ static const struct vulkan_funcs vulkan_funcs = { .p_vkCreateSwapchainKHR = wayland_vkCreateSwapchainKHR, .p_vkCreateWin32SurfaceKHR = wayland_vkCreateWin32SurfaceKHR, - .p_vkDestroyInstance = wayland_vkDestroyInstance, .p_vkDestroySurfaceKHR = wayland_vkDestroySurfaceKHR, .p_vkDestroySwapchainKHR = wayland_vkDestroySwapchainKHR, .p_vkGetPhysicalDeviceWin32PresentationSupportKHR = wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR, @@ -435,7 +422,6 @@ UINT WAYLAND_VulkanInit(UINT version, void *vulkan_handle, struct vulkan_funcs * #define LOAD_FUNCPTR(f) if (!(p##f = dlsym(vulkan_handle, #f))) return STATUS_PROCEDURE_NOT_FOUND; LOAD_FUNCPTR(vkCreateSwapchainKHR); LOAD_FUNCPTR(vkCreateWaylandSurfaceKHR); - LOAD_FUNCPTR(vkDestroyInstance); LOAD_FUNCPTR(vkDestroySurfaceKHR); LOAD_FUNCPTR(vkDestroySwapchainKHR); LOAD_FUNCPTR(vkGetPhysicalDeviceWaylandPresentationSupportKHR); diff --git a/dlls/winex11.drv/vulkan.c b/dlls/winex11.drv/vulkan.c index 49dc6dfb8fe..edd4553f7f7 100644 --- a/dlls/winex11.drv/vulkan.c +++ b/dlls/winex11.drv/vulkan.c @@ -78,7 +78,6 @@ typedef struct VkXlibSurfaceCreateInfoKHR
static VkResult (*pvkCreateSwapchainKHR)(VkDevice, const VkSwapchainCreateInfoKHR *, const VkAllocationCallbacks *, VkSwapchainKHR *); static VkResult (*pvkCreateXlibSurfaceKHR)(VkInstance, const VkXlibSurfaceCreateInfoKHR *, const VkAllocationCallbacks *, VkSurfaceKHR *); -static void (*pvkDestroyInstance)(VkInstance, const VkAllocationCallbacks *); static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *); static VkBool32 (*pvkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice, uint32_t, Display *, VisualID); @@ -237,16 +236,6 @@ err: return res; }
-static void X11DRV_vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks *allocator) -{ - TRACE("%p %p\n", instance, allocator); - - if (allocator) - FIXME("Support for allocation callbacks not implemented yet\n"); - - pvkDestroyInstance(instance, NULL /* allocator */); -} - static void X11DRV_vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks *allocator) { @@ -338,7 +327,6 @@ static const struct vulkan_funcs vulkan_funcs = { X11DRV_vkCreateSwapchainKHR, X11DRV_vkCreateWin32SurfaceKHR, - X11DRV_vkDestroyInstance, X11DRV_vkDestroySurfaceKHR, X11DRV_vkDestroySwapchainKHR, NULL, @@ -364,7 +352,6 @@ UINT X11DRV_VulkanInit( UINT version, void *vulkan_handle, struct vulkan_funcs * #define LOAD_FUNCPTR( f ) if (!(p##f = dlsym( vulkan_handle, #f ))) return STATUS_PROCEDURE_NOT_FOUND; LOAD_FUNCPTR( vkCreateSwapchainKHR ); LOAD_FUNCPTR( vkCreateXlibSurfaceKHR ); - LOAD_FUNCPTR( vkDestroyInstance ); LOAD_FUNCPTR( vkDestroySurfaceKHR ); LOAD_FUNCPTR( vkDestroySwapchainKHR ); LOAD_FUNCPTR( vkGetPhysicalDeviceXlibPresentationSupportKHR ); diff --git a/dlls/winex11.drv/xrandr.c b/dlls/winex11.drv/xrandr.c index ec03ed6b61a..0fc25414026 100644 --- a/dlls/winex11.drv/xrandr.c +++ b/dlls/winex11.drv/xrandr.c @@ -758,7 +758,11 @@ static BOOL get_gpu_properties_from_vulkan( struct gdi_gpu *gpu, const XRRProvid done: free( vk_physical_devices ); if (vk_instance) - vulkan_funcs->p_vkDestroyInstance( vk_instance, NULL ); + { + VkResult (*p_vkDestroyInstance)(VkInstance handle, const VkAllocationCallbacks *allocator); + p_vkDestroyInstance = vulkan_funcs->p_vkGetInstanceProcAddr( vk_instance, "vkDestroyInstance" ); + p_vkDestroyInstance( vk_instance, NULL ); + } return ret; }
diff --git a/include/wine/vulkan_driver.h b/include/wine/vulkan_driver.h index f2bb3b0c456..44aa45308aa 100644 --- a/include/wine/vulkan_driver.h +++ b/include/wine/vulkan_driver.h @@ -31,7 +31,6 @@ struct vulkan_funcs */ VkResult (*p_vkCreateSwapchainKHR)(VkDevice, const VkSwapchainCreateInfoKHR *, const VkAllocationCallbacks *, VkSwapchainKHR *); VkResult (*p_vkCreateWin32SurfaceKHR)(VkInstance, const VkWin32SurfaceCreateInfoKHR *, const VkAllocationCallbacks *, VkSurfaceKHR *); - void (*p_vkDestroyInstance)(VkInstance, const VkAllocationCallbacks *); void (*p_vkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); void (*p_vkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *); void * (*p_vkGetDeviceProcAddr)(VkDevice, const char *);