From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/vulkan.c | 30 ++++++++++++++++----- include/wine/vulkan_driver.h | 51 ------------------------------------ 2 files changed, 24 insertions(+), 57 deletions(-)
diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index 536c4426f6a..693830d069c 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -45,21 +45,39 @@ 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; + if (!strcmp( name, "vkCreateSwapchainKHR" )) return driver_funcs.p_vkCreateSwapchainKHR; + if (!strcmp( name, "vkDestroySwapchainKHR" )) return driver_funcs.p_vkDestroySwapchainKHR; + if (!strcmp( name, "vkGetDeviceProcAddr" )) return win32u_vkGetDeviceProcAddr; + if (!strcmp( name, "vkGetSwapchainImagesKHR" )) return driver_funcs.p_vkGetSwapchainImagesKHR; + if (!strcmp( name, "vkQueuePresentKHR" )) return driver_funcs.p_vkQueuePresentKHR; + 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; + if (!strcmp( name, "vkCreateInstance" )) return driver_funcs.p_vkCreateInstance; + if (!strcmp( name, "vkEnumerateInstanceExtensionProperties" )) return driver_funcs.p_vkEnumerateInstanceExtensionProperties; + + if (!instance) return p_vkGetInstanceProcAddr( instance, name ); + + if (!strcmp( name, "vkCreateWin32SurfaceKHR" )) return driver_funcs.p_vkCreateWin32SurfaceKHR; + if (!strcmp( name, "vkDestroyInstance" )) return driver_funcs.p_vkDestroyInstance; + if (!strcmp( name, "vkDestroySurfaceKHR" )) return driver_funcs.p_vkDestroySurfaceKHR; + if (!strcmp( name, "vkGetInstanceProcAddr" )) return win32u_vkGetInstanceProcAddr; + if (!strcmp( name, "vkGetPhysicalDeviceWin32PresentationSupportKHR" )) return driver_funcs.p_vkGetPhysicalDeviceWin32PresentationSupportKHR; + + /* vkGetInstanceProcAddr also loads any children of instance, so device functions as well. */ + if (!strcmp( name, "vkCreateSwapchainKHR" )) return driver_funcs.p_vkCreateSwapchainKHR; + if (!strcmp( name, "vkDestroySwapchainKHR" )) return driver_funcs.p_vkDestroySwapchainKHR; + if (!strcmp( name, "vkGetDeviceProcAddr" )) return win32u_vkGetDeviceProcAddr; + if (!strcmp( name, "vkGetSwapchainImagesKHR" )) return driver_funcs.p_vkGetSwapchainImagesKHR; + if (!strcmp( name, "vkQueuePresentKHR" )) return driver_funcs.p_vkQueuePresentKHR; + return p_vkGetInstanceProcAddr( instance, name ); }
diff --git a/include/wine/vulkan_driver.h b/include/wine/vulkan_driver.h index 2cf6d99cfd8..6c72548e02f 100644 --- a/include/wine/vulkan_driver.h +++ b/include/wine/vulkan_driver.h @@ -46,55 +46,4 @@ struct vulkan_funcs VkSurfaceKHR (*p_wine_get_host_surface)(VkSurfaceKHR); };
-static inline void *get_vulkan_driver_device_proc_addr( - const struct vulkan_funcs *vulkan_funcs, const char *name) -{ - if (!name || name[0] != 'v' || name[1] != 'k') return NULL; - - name += 2; - - if (!strcmp(name, "CreateSwapchainKHR")) - return vulkan_funcs->p_vkCreateSwapchainKHR; - if (!strcmp(name, "DestroySwapchainKHR")) - return vulkan_funcs->p_vkDestroySwapchainKHR; - if (!strcmp(name, "GetDeviceProcAddr")) - return vulkan_funcs->p_vkGetDeviceProcAddr; - if (!strcmp(name, "GetSwapchainImagesKHR")) - return vulkan_funcs->p_vkGetSwapchainImagesKHR; - if (!strcmp(name, "QueuePresentKHR")) - return vulkan_funcs->p_vkQueuePresentKHR; - - return NULL; -} - -static inline void *get_vulkan_driver_instance_proc_addr( - const struct vulkan_funcs *vulkan_funcs, VkInstance instance, const char *name) -{ - if (!name || name[0] != 'v' || name[1] != 'k') return NULL; - - name += 2; - - if (!strcmp(name, "CreateInstance")) - return vulkan_funcs->p_vkCreateInstance; - if (!strcmp(name, "EnumerateInstanceExtensionProperties")) - return vulkan_funcs->p_vkEnumerateInstanceExtensionProperties; - - if (!instance) return NULL; - - if (!strcmp(name, "CreateWin32SurfaceKHR")) - return vulkan_funcs->p_vkCreateWin32SurfaceKHR; - if (!strcmp(name, "DestroyInstance")) - return vulkan_funcs->p_vkDestroyInstance; - if (!strcmp(name, "DestroySurfaceKHR")) - return vulkan_funcs->p_vkDestroySurfaceKHR; - if (!strcmp(name, "GetInstanceProcAddr")) - return vulkan_funcs->p_vkGetInstanceProcAddr; - if (!strcmp(name, "GetPhysicalDeviceWin32PresentationSupportKHR")) - return vulkan_funcs->p_vkGetPhysicalDeviceWin32PresentationSupportKHR; - - name -= 2; - - return get_vulkan_driver_device_proc_addr(vulkan_funcs, name); -} - #endif /* __WINE_VULKAN_DRIVER_H */