From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/vulkan.c | 42 +++++++++++++++++++++++++++++++++++ dlls/winemac.drv/vulkan.c | 32 ++------------------------ dlls/winewayland.drv/vulkan.c | 30 ------------------------- dlls/winex11.drv/vulkan.c | 32 ++------------------------ 4 files changed, 46 insertions(+), 90 deletions(-)
diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index 30bbd76b65a..77f5ee2da8d 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -30,6 +30,9 @@ #include "ntstatus.h" #define WIN32_NO_STATUS #include "win32u_private.h" + +#define VK_NO_PROTOTYPES +#define WINE_VK_HOST #include "wine/vulkan.h" #include "wine/vulkan_driver.h"
@@ -40,6 +43,29 @@ WINE_DEFAULT_DEBUG_CHANNEL(vulkan); static void *vulkan_handle; static struct vulkan_funcs vulkan_funcs;
+static void *(*p_vkGetDeviceProcAddr)(VkDevice, const char *); +static void *(*p_vkGetInstanceProcAddr)(VkInstance, const char *); + +static void *win32u_vkGetDeviceProcAddr( VkDevice device, const char *name ) +{ + void *proc_addr; + + TRACE( "device %p, name %s\n", device, debugstr_a(name) ); + + if ((proc_addr = get_vulkan_driver_device_proc_addr( &vulkan_funcs, name ))) return proc_addr; + return p_vkGetDeviceProcAddr( device, name ); +} + +static void *win32u_vkGetInstanceProcAddr( VkInstance instance, const char *name ) +{ + void *proc_addr; + + TRACE( "instance %p, name %s\n", instance, debugstr_a(name) ); + + if ((proc_addr = get_vulkan_driver_instance_proc_addr( &vulkan_funcs, instance, name ))) return proc_addr; + return p_vkGetInstanceProcAddr( instance, name ); +} + static void vulkan_init(void) { UINT status; @@ -58,6 +84,22 @@ static void vulkan_init(void) vulkan_handle = NULL; return; } + +#define LOAD_FUNCPTR( f ) \ + if (!(p_##f = dlsym( vulkan_handle, #f ))) \ + { \ + ERR( "Failed to find " #f "\n" ); \ + dlclose( vulkan_handle ); \ + vulkan_handle = NULL; \ + return; \ + } + + LOAD_FUNCPTR( vkGetDeviceProcAddr ); + LOAD_FUNCPTR( vkGetInstanceProcAddr ); +#undef LOAD_FUNCPTR + + vulkan_funcs.p_vkGetDeviceProcAddr = win32u_vkGetDeviceProcAddr; + vulkan_funcs.p_vkGetInstanceProcAddr = win32u_vkGetInstanceProcAddr; }
/*********************************************************************** diff --git a/dlls/winemac.drv/vulkan.c b/dlls/winemac.drv/vulkan.c index 4474a74fbcc..52928ec3d44 100644 --- a/dlls/winemac.drv/vulkan.c +++ b/dlls/winemac.drv/vulkan.c @@ -85,8 +85,6 @@ static void (*pvkDestroyInstance)(VkInstance, const VkAllocationCallbacks *); static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *); static VkResult (*pvkEnumerateInstanceExtensionProperties)(const char *, uint32_t *, VkExtensionProperties *); -static void * (*pvkGetDeviceProcAddr)(VkDevice, const char *); -static void * (*pvkGetInstanceProcAddr)(VkInstance, const char *); static VkResult (*pvkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *, VkSurfaceCapabilities2KHR *); static VkResult (*pvkGetSwapchainImagesKHR)(VkDevice, VkSwapchainKHR, uint32_t *, VkImage *); static VkResult (*pvkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *); @@ -373,30 +371,6 @@ static VkResult macdrv_vkEnumerateInstanceExtensionProperties(const char *layer_ return res; }
-static void *macdrv_vkGetDeviceProcAddr(VkDevice device, const char *name) -{ - void *proc_addr; - - TRACE("%p, %s\n", device, debugstr_a(name)); - - if ((proc_addr = get_vulkan_driver_device_proc_addr(&vulkan_funcs, name))) - return proc_addr; - - return pvkGetDeviceProcAddr(device, name); -} - -static void *macdrv_vkGetInstanceProcAddr(VkInstance instance, const char *name) -{ - void *proc_addr; - - TRACE("%p, %s\n", instance, debugstr_a(name)); - - if ((proc_addr = get_vulkan_driver_instance_proc_addr(&vulkan_funcs, instance, name))) - return proc_addr; - - return pvkGetInstanceProcAddr(instance, name); -} - static VkBool32 macdrv_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice phys_dev, uint32_t index) { @@ -459,8 +433,8 @@ static const struct vulkan_funcs vulkan_funcs = macdrv_vkDestroySurfaceKHR, macdrv_vkDestroySwapchainKHR, macdrv_vkEnumerateInstanceExtensionProperties, - macdrv_vkGetDeviceProcAddr, - macdrv_vkGetInstanceProcAddr, + NULL, + NULL, macdrv_vkGetPhysicalDeviceWin32PresentationSupportKHR, macdrv_vkGetSwapchainImagesKHR, macdrv_vkQueuePresentKHR, @@ -485,8 +459,6 @@ UINT macdrv_VulkanInit(UINT version, void *vulkan_handle, struct vulkan_funcs *d LOAD_FUNCPTR(vkDestroySurfaceKHR) LOAD_FUNCPTR(vkDestroySwapchainKHR) LOAD_FUNCPTR(vkEnumerateInstanceExtensionProperties) - LOAD_FUNCPTR(vkGetDeviceProcAddr) - LOAD_FUNCPTR(vkGetInstanceProcAddr) LOAD_FUNCPTR(vkGetSwapchainImagesKHR) LOAD_FUNCPTR(vkQueuePresentKHR) #undef LOAD_FUNCPTR diff --git a/dlls/winewayland.drv/vulkan.c b/dlls/winewayland.drv/vulkan.c index fca74aaf940..ec5e9fe6ae8 100644 --- a/dlls/winewayland.drv/vulkan.c +++ b/dlls/winewayland.drv/vulkan.c @@ -60,8 +60,6 @@ static void (*pvkDestroyInstance)(VkInstance, const VkAllocationCallbacks *); static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *); static VkResult (*pvkEnumerateInstanceExtensionProperties)(const char *, uint32_t *, VkExtensionProperties *); -static void * (*pvkGetDeviceProcAddr)(VkDevice, const char *); -static void * (*pvkGetInstanceProcAddr)(VkInstance, const char *); static VkBool32 (*pvkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice, uint32_t, struct wl_display *); static VkResult (*pvkGetSwapchainImagesKHR)(VkDevice, VkSwapchainKHR, uint32_t *, VkImage *); static VkResult (*pvkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *); @@ -486,30 +484,6 @@ static VkResult wayland_vkEnumerateInstanceExtensionProperties(const char *layer return res; }
-static void *wayland_vkGetDeviceProcAddr(VkDevice device, const char *name) -{ - void *proc_addr; - - TRACE("%p, %s\n", device, debugstr_a(name)); - - if ((proc_addr = get_vulkan_driver_device_proc_addr(&vulkan_funcs, name))) - return proc_addr; - - return pvkGetDeviceProcAddr(device, name); -} - -static void *wayland_vkGetInstanceProcAddr(VkInstance instance, const char *name) -{ - void *proc_addr; - - TRACE("%p, %s\n", instance, debugstr_a(name)); - - if ((proc_addr = get_vulkan_driver_instance_proc_addr(&vulkan_funcs, instance, name))) - return proc_addr; - - return pvkGetInstanceProcAddr(instance, name); -} - static VkBool32 wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice phys_dev, uint32_t index) { @@ -552,8 +526,6 @@ static const struct vulkan_funcs vulkan_funcs = .p_vkDestroySurfaceKHR = wayland_vkDestroySurfaceKHR, .p_vkDestroySwapchainKHR = wayland_vkDestroySwapchainKHR, .p_vkEnumerateInstanceExtensionProperties = wayland_vkEnumerateInstanceExtensionProperties, - .p_vkGetDeviceProcAddr = wayland_vkGetDeviceProcAddr, - .p_vkGetInstanceProcAddr = wayland_vkGetInstanceProcAddr, .p_vkGetPhysicalDeviceWin32PresentationSupportKHR = wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR, .p_vkGetSwapchainImagesKHR = wayland_vkGetSwapchainImagesKHR, .p_vkQueuePresentKHR = wayland_vkQueuePresentKHR, @@ -579,8 +551,6 @@ UINT WAYLAND_VulkanInit(UINT version, void *vulkan_handle, struct vulkan_funcs * LOAD_FUNCPTR(vkDestroySurfaceKHR); LOAD_FUNCPTR(vkDestroySwapchainKHR); LOAD_FUNCPTR(vkEnumerateInstanceExtensionProperties); - LOAD_FUNCPTR(vkGetDeviceProcAddr); - LOAD_FUNCPTR(vkGetInstanceProcAddr); LOAD_FUNCPTR(vkGetPhysicalDeviceWaylandPresentationSupportKHR); LOAD_FUNCPTR(vkGetSwapchainImagesKHR); LOAD_FUNCPTR(vkQueuePresentKHR); diff --git a/dlls/winex11.drv/vulkan.c b/dlls/winex11.drv/vulkan.c index 8b36f729865..39a76c0a0e9 100644 --- a/dlls/winex11.drv/vulkan.c +++ b/dlls/winex11.drv/vulkan.c @@ -83,8 +83,6 @@ static void (*pvkDestroyInstance)(VkInstance, const VkAllocationCallbacks *); static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *); static VkResult (*pvkEnumerateInstanceExtensionProperties)(const char *, uint32_t *, VkExtensionProperties *); -static void * (*pvkGetDeviceProcAddr)(VkDevice, const char *); -static void * (*pvkGetInstanceProcAddr)(VkInstance, const char *); static VkBool32 (*pvkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice, uint32_t, Display *, VisualID); static VkResult (*pvkGetSwapchainImagesKHR)(VkDevice, VkSwapchainKHR, uint32_t *, VkImage *); static VkResult (*pvkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *); @@ -392,30 +390,6 @@ static VkResult X11DRV_vkEnumerateInstanceExtensionProperties(const char *layer_ return res; }
-static void *X11DRV_vkGetDeviceProcAddr(VkDevice device, const char *name) -{ - void *proc_addr; - - TRACE("%p, %s\n", device, debugstr_a(name)); - - if ((proc_addr = get_vulkan_driver_device_proc_addr( &vulkan_funcs, name ))) - return proc_addr; - - return pvkGetDeviceProcAddr(device, name); -} - -static void *X11DRV_vkGetInstanceProcAddr(VkInstance instance, const char *name) -{ - void *proc_addr; - - TRACE("%p, %s\n", instance, debugstr_a(name)); - - if ((proc_addr = get_vulkan_driver_instance_proc_addr( &vulkan_funcs, instance, name ))) - return proc_addr; - - return pvkGetInstanceProcAddr(instance, name); -} - static VkBool32 X11DRV_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice phys_dev, uint32_t index) { @@ -482,8 +456,8 @@ static const struct vulkan_funcs vulkan_funcs = X11DRV_vkDestroySurfaceKHR, X11DRV_vkDestroySwapchainKHR, X11DRV_vkEnumerateInstanceExtensionProperties, - X11DRV_vkGetDeviceProcAddr, - X11DRV_vkGetInstanceProcAddr, + NULL, + NULL, X11DRV_vkGetPhysicalDeviceWin32PresentationSupportKHR, X11DRV_vkGetSwapchainImagesKHR, X11DRV_vkQueuePresentKHR, @@ -509,8 +483,6 @@ UINT X11DRV_VulkanInit( UINT version, void *vulkan_handle, struct vulkan_funcs * LOAD_FUNCPTR( vkDestroySurfaceKHR ); LOAD_FUNCPTR( vkDestroySwapchainKHR ); LOAD_FUNCPTR( vkEnumerateInstanceExtensionProperties ); - LOAD_FUNCPTR( vkGetDeviceProcAddr ); - LOAD_FUNCPTR( vkGetInstanceProcAddr ); LOAD_FUNCPTR( vkGetPhysicalDeviceXlibPresentationSupportKHR ); LOAD_FUNCPTR( vkGetSwapchainImagesKHR ); LOAD_FUNCPTR( vkQueuePresentKHR );