From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/d3dkmt.c | 4 ++-- dlls/win32u/ntuser_private.h | 4 ++-- dlls/win32u/vulkan.c | 24 ++++++++++++------------ dlls/winevulkan/vulkan.c | 6 +++--- include/wine/vulkan_driver.h | 19 ++++++++++++++----- 5 files changed, 33 insertions(+), 24 deletions(-)
diff --git a/dlls/win32u/d3dkmt.c b/dlls/win32u/d3dkmt.c index 392dc406f69..15b0b870b56 100644 --- a/dlls/win32u/d3dkmt.c +++ b/dlls/win32u/d3dkmt.c @@ -89,14 +89,14 @@ static void d3dkmt_init_vulkan(void) return; }
- p_vkCreateInstance = p_vkGetInstanceProcAddr( NULL, "vkCreateInstance" ); + p_vkCreateInstance = (PFN_vkCreateInstance)p_vkGetInstanceProcAddr( NULL, "vkCreateInstance" ); if ((vr = p_vkCreateInstance( &create_info, NULL, &d3dkmt_vk_instance ))) { WARN( "Failed to create a Vulkan instance, vr %d.\n", vr ); return; }
- p_vkDestroyInstance = p_vkGetInstanceProcAddr( d3dkmt_vk_instance, "vkDestroyInstance" ); + p_vkDestroyInstance = (PFN_vkDestroyInstance)p_vkGetInstanceProcAddr( d3dkmt_vk_instance, "vkDestroyInstance" ); #define LOAD_VK_FUNC( f ) \ if (!(p##f = (void *)p_vkGetInstanceProcAddr( d3dkmt_vk_instance, #f ))) \ { \ diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h index 572a862009b..6cc47dcada4 100644 --- a/dlls/win32u/ntuser_private.h +++ b/dlls/win32u/ntuser_private.h @@ -222,8 +222,8 @@ extern int peek_message( MSG *msg, const struct peek_message_filter *filter ); extern LRESULT system_tray_call( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, void *data );
/* vulkan.c */ -extern void *(*p_vkGetDeviceProcAddr)(VkDevice, const char *); -extern void *(*p_vkGetInstanceProcAddr)(VkInstance, const char *); +extern PFN_vkGetDeviceProcAddr p_vkGetDeviceProcAddr; +extern PFN_vkGetInstanceProcAddr p_vkGetInstanceProcAddr;
extern BOOL vulkan_init(void); extern void vulkan_detach_surfaces( struct list *surfaces ); diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index d103cd94fdb..451a27ac833 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -39,8 +39,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(vulkan);
-void *(*p_vkGetDeviceProcAddr)(VkDevice, const char *) = NULL; -void *(*p_vkGetInstanceProcAddr)(VkInstance, const char *) = NULL; +PFN_vkGetDeviceProcAddr p_vkGetDeviceProcAddr = NULL; +PFN_vkGetInstanceProcAddr p_vkGetInstanceProcAddr = NULL;
static void *vulkan_handle; static struct vulkan_funcs vulkan_funcs; @@ -139,30 +139,30 @@ static VkResult win32u_vkQueuePresentKHR( VkQueue queue, const VkPresentInfoKHR return res; }
-static void *win32u_vkGetDeviceProcAddr( VkDevice device, const char *name ) +static PFN_vkVoidFunction win32u_vkGetDeviceProcAddr( VkDevice device, const char *name ) { TRACE( "device %p, name %s\n", device, debugstr_a(name) );
- if (!strcmp( name, "vkGetDeviceProcAddr" )) return vulkan_funcs.p_vkGetDeviceProcAddr; - if (!strcmp( name, "vkQueuePresentKHR" )) return vulkan_funcs.p_vkQueuePresentKHR; + if (!strcmp( name, "vkGetDeviceProcAddr" )) return (PFN_vkVoidFunction)vulkan_funcs.p_vkGetDeviceProcAddr; + if (!strcmp( name, "vkQueuePresentKHR" )) return (PFN_vkVoidFunction)vulkan_funcs.p_vkQueuePresentKHR;
return p_vkGetDeviceProcAddr( device, name ); }
-static void *win32u_vkGetInstanceProcAddr( VkInstance instance, const char *name ) +static PFN_vkVoidFunction win32u_vkGetInstanceProcAddr( VkInstance instance, const char *name ) { TRACE( "instance %p, name %s\n", instance, debugstr_a(name) );
if (!instance) return p_vkGetInstanceProcAddr( instance, name );
- if (!strcmp( name, "vkCreateWin32SurfaceKHR" )) return vulkan_funcs.p_vkCreateWin32SurfaceKHR; - if (!strcmp( name, "vkDestroySurfaceKHR" )) return vulkan_funcs.p_vkDestroySurfaceKHR; - if (!strcmp( name, "vkGetInstanceProcAddr" )) return vulkan_funcs.p_vkGetInstanceProcAddr; - if (!strcmp( name, "vkGetPhysicalDeviceWin32PresentationSupportKHR" )) return vulkan_funcs.p_vkGetPhysicalDeviceWin32PresentationSupportKHR; + if (!strcmp( name, "vkCreateWin32SurfaceKHR" )) return (PFN_vkVoidFunction)vulkan_funcs.p_vkCreateWin32SurfaceKHR; + if (!strcmp( name, "vkDestroySurfaceKHR" )) return (PFN_vkVoidFunction)vulkan_funcs.p_vkDestroySurfaceKHR; + if (!strcmp( name, "vkGetInstanceProcAddr" )) return (PFN_vkVoidFunction)vulkan_funcs.p_vkGetInstanceProcAddr; + if (!strcmp( name, "vkGetPhysicalDeviceWin32PresentationSupportKHR" )) return (PFN_vkVoidFunction)vulkan_funcs.p_vkGetPhysicalDeviceWin32PresentationSupportKHR;
/* vkGetInstanceProcAddr also loads any children of instance, so device functions as well. */ - if (!strcmp( name, "vkGetDeviceProcAddr" )) return vulkan_funcs.p_vkGetDeviceProcAddr; - if (!strcmp( name, "vkQueuePresentKHR" )) return vulkan_funcs.p_vkQueuePresentKHR; + if (!strcmp( name, "vkGetDeviceProcAddr" )) return (PFN_vkVoidFunction)vulkan_funcs.p_vkGetDeviceProcAddr; + if (!strcmp( name, "vkQueuePresentKHR" )) return (PFN_vkVoidFunction)vulkan_funcs.p_vkQueuePresentKHR;
return p_vkGetInstanceProcAddr( instance, name ); } diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index a76ba027356..56a6ade850d 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -638,9 +638,9 @@ NTSTATUS init_vulkan(void *arg) }
callback_funcs = *funcs; - p_vkCreateInstance = vk_funcs->p_vkGetInstanceProcAddr(NULL, "vkCreateInstance"); - p_vkEnumerateInstanceVersion = vk_funcs->p_vkGetInstanceProcAddr(NULL, "vkEnumerateInstanceVersion"); - p_vkEnumerateInstanceExtensionProperties = vk_funcs->p_vkGetInstanceProcAddr(NULL, "vkEnumerateInstanceExtensionProperties"); + p_vkCreateInstance = (PFN_vkCreateInstance)vk_funcs->p_vkGetInstanceProcAddr(NULL, "vkCreateInstance"); + p_vkEnumerateInstanceVersion = (PFN_vkEnumerateInstanceVersion)vk_funcs->p_vkGetInstanceProcAddr(NULL, "vkEnumerateInstanceVersion"); + p_vkEnumerateInstanceExtensionProperties = (PFN_vkEnumerateInstanceExtensionProperties)vk_funcs->p_vkGetInstanceProcAddr(NULL, "vkEnumerateInstanceExtensionProperties");
if (is_wow64()) { diff --git a/include/wine/vulkan_driver.h b/include/wine/vulkan_driver.h index 4be425f5519..c2b53cc884a 100644 --- a/include/wine/vulkan_driver.h +++ b/include/wine/vulkan_driver.h @@ -20,6 +20,15 @@ #ifndef __WINE_VULKAN_DRIVER_H #define __WINE_VULKAN_DRIVER_H
+#include <stdarg.h> +#include <stddef.h> + +#include <windef.h> +#include <winbase.h> + +#define WINE_VK_HOST +#include "wine/vulkan.h" + /* Wine internal vulkan driver version, needs to be bumped upon vulkan_funcs changes. */ #define WINE_VULKAN_DRIVER_VERSION 35
@@ -29,11 +38,11 @@ struct vulkan_funcs * needs to provide. Other function calls will be provided indirectly by dispatch * tables part of dispatchable Vulkan objects such as VkInstance or vkDevice. */ - VkResult (*p_vkCreateWin32SurfaceKHR)(VkInstance, const VkWin32SurfaceCreateInfoKHR *, const VkAllocationCallbacks *, VkSurfaceKHR *); - void (*p_vkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); - void * (*p_vkGetDeviceProcAddr)(VkDevice, const char *); - void * (*p_vkGetInstanceProcAddr)(VkInstance, const char *); - VkBool32 (*p_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice, uint32_t); + PFN_vkCreateWin32SurfaceKHR p_vkCreateWin32SurfaceKHR; + PFN_vkDestroySurfaceKHR p_vkDestroySurfaceKHR; + PFN_vkGetDeviceProcAddr p_vkGetDeviceProcAddr; + PFN_vkGetInstanceProcAddr p_vkGetInstanceProcAddr; + PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR p_vkGetPhysicalDeviceWin32PresentationSupportKHR; VkResult (*p_vkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *, VkSurfaceKHR *surfaces);
/* winevulkan specific functions */