From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/vulkan.c | 36 +++++++++++++++++++++++++++++++++++ dlls/winemac.drv/vulkan.c | 32 ++----------------------------- dlls/winewayland.drv/vulkan.c | 30 ----------------------------- dlls/winex11.drv/vulkan.c | 32 ++----------------------------- 4 files changed, 40 insertions(+), 90 deletions(-)
diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index 28d8654177c..cc06dc97fa2 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -24,9 +24,13 @@
#include "config.h"
+#include <dlfcn.h> #include <pthread.h>
#include "win32u_private.h" + +#define VK_NO_PROTOTYPES +#define WINE_VK_HOST #include "wine/vulkan.h" #include "wine/vulkan_driver.h"
@@ -36,10 +40,42 @@ static void *vulkan_handle; static struct vulkan_funcs driver_funcs; 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) { if ((vulkan_handle = user_driver->pVulkanInit( WINE_VULKAN_DRIVER_VERSION, &driver_funcs ))) + { +#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 = driver_funcs; + 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 5c39f4c37cf..29f1c80d806 100644 --- a/dlls/winemac.drv/vulkan.c +++ b/dlls/winemac.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 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, @@ -491,8 +465,6 @@ void *macdrv_VulkanInit(UINT version, struct vulkan_funcs *driver_funcs) 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 17e15c4cd81..9d20896c145 100644 --- a/dlls/winewayland.drv/vulkan.c +++ b/dlls/winewayland.drv/vulkan.c @@ -58,8 +58,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 *); @@ -485,30 +483,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) { @@ -551,8 +525,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, @@ -584,8 +556,6 @@ void *WAYLAND_VulkanInit(UINT version, struct vulkan_funcs *driver_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 50d456ae81d..8663a983fe7 100644 --- a/dlls/winex11.drv/vulkan.c +++ b/dlls/winex11.drv/vulkan.c @@ -81,8 +81,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, @@ -515,8 +489,6 @@ void *X11DRV_VulkanInit(UINT version, struct vulkan_funcs *driver_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);