win32u: Move vkGet(Instance|Device)ProcAddr out the drivers.
This commit is contained in:
parent
28873ce8c4
commit
9ee2adba14
4 changed files with 46 additions and 90 deletions
|
@ -30,6 +30,9 @@
|
||||||
#include "ntstatus.h"
|
#include "ntstatus.h"
|
||||||
#define WIN32_NO_STATUS
|
#define WIN32_NO_STATUS
|
||||||
#include "win32u_private.h"
|
#include "win32u_private.h"
|
||||||
|
|
||||||
|
#define VK_NO_PROTOTYPES
|
||||||
|
#define WINE_VK_HOST
|
||||||
#include "wine/vulkan.h"
|
#include "wine/vulkan.h"
|
||||||
#include "wine/vulkan_driver.h"
|
#include "wine/vulkan_driver.h"
|
||||||
|
|
||||||
|
@ -40,6 +43,29 @@ WINE_DEFAULT_DEBUG_CHANNEL(vulkan);
|
||||||
static void *vulkan_handle;
|
static void *vulkan_handle;
|
||||||
static struct vulkan_funcs vulkan_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)
|
static void vulkan_init(void)
|
||||||
{
|
{
|
||||||
UINT status;
|
UINT status;
|
||||||
|
@ -58,6 +84,22 @@ static void vulkan_init(void)
|
||||||
vulkan_handle = NULL;
|
vulkan_handle = NULL;
|
||||||
return;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
|
@ -85,8 +85,6 @@ static void (*pvkDestroyInstance)(VkInstance, const VkAllocationCallbacks *);
|
||||||
static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *);
|
static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *);
|
||||||
static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *);
|
static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *);
|
||||||
static VkResult (*pvkEnumerateInstanceExtensionProperties)(const char *, uint32_t *, VkExtensionProperties *);
|
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 (*pvkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *, VkSurfaceCapabilities2KHR *);
|
||||||
static VkResult (*pvkGetSwapchainImagesKHR)(VkDevice, VkSwapchainKHR, uint32_t *, VkImage *);
|
static VkResult (*pvkGetSwapchainImagesKHR)(VkDevice, VkSwapchainKHR, uint32_t *, VkImage *);
|
||||||
static VkResult (*pvkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *);
|
static VkResult (*pvkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *);
|
||||||
|
@ -373,30 +371,6 @@ static VkResult macdrv_vkEnumerateInstanceExtensionProperties(const char *layer_
|
||||||
return res;
|
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,
|
static VkBool32 macdrv_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice phys_dev,
|
||||||
uint32_t index)
|
uint32_t index)
|
||||||
{
|
{
|
||||||
|
@ -459,8 +433,8 @@ static const struct vulkan_funcs vulkan_funcs =
|
||||||
macdrv_vkDestroySurfaceKHR,
|
macdrv_vkDestroySurfaceKHR,
|
||||||
macdrv_vkDestroySwapchainKHR,
|
macdrv_vkDestroySwapchainKHR,
|
||||||
macdrv_vkEnumerateInstanceExtensionProperties,
|
macdrv_vkEnumerateInstanceExtensionProperties,
|
||||||
macdrv_vkGetDeviceProcAddr,
|
NULL,
|
||||||
macdrv_vkGetInstanceProcAddr,
|
NULL,
|
||||||
macdrv_vkGetPhysicalDeviceWin32PresentationSupportKHR,
|
macdrv_vkGetPhysicalDeviceWin32PresentationSupportKHR,
|
||||||
macdrv_vkGetSwapchainImagesKHR,
|
macdrv_vkGetSwapchainImagesKHR,
|
||||||
macdrv_vkQueuePresentKHR,
|
macdrv_vkQueuePresentKHR,
|
||||||
|
@ -485,8 +459,6 @@ UINT macdrv_VulkanInit(UINT version, void *vulkan_handle, struct vulkan_funcs *d
|
||||||
LOAD_FUNCPTR(vkDestroySurfaceKHR)
|
LOAD_FUNCPTR(vkDestroySurfaceKHR)
|
||||||
LOAD_FUNCPTR(vkDestroySwapchainKHR)
|
LOAD_FUNCPTR(vkDestroySwapchainKHR)
|
||||||
LOAD_FUNCPTR(vkEnumerateInstanceExtensionProperties)
|
LOAD_FUNCPTR(vkEnumerateInstanceExtensionProperties)
|
||||||
LOAD_FUNCPTR(vkGetDeviceProcAddr)
|
|
||||||
LOAD_FUNCPTR(vkGetInstanceProcAddr)
|
|
||||||
LOAD_FUNCPTR(vkGetSwapchainImagesKHR)
|
LOAD_FUNCPTR(vkGetSwapchainImagesKHR)
|
||||||
LOAD_FUNCPTR(vkQueuePresentKHR)
|
LOAD_FUNCPTR(vkQueuePresentKHR)
|
||||||
#undef LOAD_FUNCPTR
|
#undef LOAD_FUNCPTR
|
||||||
|
|
|
@ -60,8 +60,6 @@ static void (*pvkDestroyInstance)(VkInstance, const VkAllocationCallbacks *);
|
||||||
static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *);
|
static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *);
|
||||||
static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *);
|
static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *);
|
||||||
static VkResult (*pvkEnumerateInstanceExtensionProperties)(const char *, uint32_t *, VkExtensionProperties *);
|
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 VkBool32 (*pvkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice, uint32_t, struct wl_display *);
|
||||||
static VkResult (*pvkGetSwapchainImagesKHR)(VkDevice, VkSwapchainKHR, uint32_t *, VkImage *);
|
static VkResult (*pvkGetSwapchainImagesKHR)(VkDevice, VkSwapchainKHR, uint32_t *, VkImage *);
|
||||||
static VkResult (*pvkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *);
|
static VkResult (*pvkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *);
|
||||||
|
@ -486,30 +484,6 @@ static VkResult wayland_vkEnumerateInstanceExtensionProperties(const char *layer
|
||||||
return res;
|
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,
|
static VkBool32 wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice phys_dev,
|
||||||
uint32_t index)
|
uint32_t index)
|
||||||
{
|
{
|
||||||
|
@ -552,8 +526,6 @@ static const struct vulkan_funcs vulkan_funcs =
|
||||||
.p_vkDestroySurfaceKHR = wayland_vkDestroySurfaceKHR,
|
.p_vkDestroySurfaceKHR = wayland_vkDestroySurfaceKHR,
|
||||||
.p_vkDestroySwapchainKHR = wayland_vkDestroySwapchainKHR,
|
.p_vkDestroySwapchainKHR = wayland_vkDestroySwapchainKHR,
|
||||||
.p_vkEnumerateInstanceExtensionProperties = wayland_vkEnumerateInstanceExtensionProperties,
|
.p_vkEnumerateInstanceExtensionProperties = wayland_vkEnumerateInstanceExtensionProperties,
|
||||||
.p_vkGetDeviceProcAddr = wayland_vkGetDeviceProcAddr,
|
|
||||||
.p_vkGetInstanceProcAddr = wayland_vkGetInstanceProcAddr,
|
|
||||||
.p_vkGetPhysicalDeviceWin32PresentationSupportKHR = wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR,
|
.p_vkGetPhysicalDeviceWin32PresentationSupportKHR = wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR,
|
||||||
.p_vkGetSwapchainImagesKHR = wayland_vkGetSwapchainImagesKHR,
|
.p_vkGetSwapchainImagesKHR = wayland_vkGetSwapchainImagesKHR,
|
||||||
.p_vkQueuePresentKHR = wayland_vkQueuePresentKHR,
|
.p_vkQueuePresentKHR = wayland_vkQueuePresentKHR,
|
||||||
|
@ -579,8 +551,6 @@ UINT WAYLAND_VulkanInit(UINT version, void *vulkan_handle, struct vulkan_funcs *
|
||||||
LOAD_FUNCPTR(vkDestroySurfaceKHR);
|
LOAD_FUNCPTR(vkDestroySurfaceKHR);
|
||||||
LOAD_FUNCPTR(vkDestroySwapchainKHR);
|
LOAD_FUNCPTR(vkDestroySwapchainKHR);
|
||||||
LOAD_FUNCPTR(vkEnumerateInstanceExtensionProperties);
|
LOAD_FUNCPTR(vkEnumerateInstanceExtensionProperties);
|
||||||
LOAD_FUNCPTR(vkGetDeviceProcAddr);
|
|
||||||
LOAD_FUNCPTR(vkGetInstanceProcAddr);
|
|
||||||
LOAD_FUNCPTR(vkGetPhysicalDeviceWaylandPresentationSupportKHR);
|
LOAD_FUNCPTR(vkGetPhysicalDeviceWaylandPresentationSupportKHR);
|
||||||
LOAD_FUNCPTR(vkGetSwapchainImagesKHR);
|
LOAD_FUNCPTR(vkGetSwapchainImagesKHR);
|
||||||
LOAD_FUNCPTR(vkQueuePresentKHR);
|
LOAD_FUNCPTR(vkQueuePresentKHR);
|
||||||
|
|
|
@ -83,8 +83,6 @@ static void (*pvkDestroyInstance)(VkInstance, const VkAllocationCallbacks *);
|
||||||
static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *);
|
static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *);
|
||||||
static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *);
|
static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *);
|
||||||
static VkResult (*pvkEnumerateInstanceExtensionProperties)(const char *, uint32_t *, VkExtensionProperties *);
|
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 VkBool32 (*pvkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice, uint32_t, Display *, VisualID);
|
||||||
static VkResult (*pvkGetSwapchainImagesKHR)(VkDevice, VkSwapchainKHR, uint32_t *, VkImage *);
|
static VkResult (*pvkGetSwapchainImagesKHR)(VkDevice, VkSwapchainKHR, uint32_t *, VkImage *);
|
||||||
static VkResult (*pvkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *);
|
static VkResult (*pvkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *);
|
||||||
|
@ -392,30 +390,6 @@ static VkResult X11DRV_vkEnumerateInstanceExtensionProperties(const char *layer_
|
||||||
return res;
|
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,
|
static VkBool32 X11DRV_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice phys_dev,
|
||||||
uint32_t index)
|
uint32_t index)
|
||||||
{
|
{
|
||||||
|
@ -482,8 +456,8 @@ static const struct vulkan_funcs vulkan_funcs =
|
||||||
X11DRV_vkDestroySurfaceKHR,
|
X11DRV_vkDestroySurfaceKHR,
|
||||||
X11DRV_vkDestroySwapchainKHR,
|
X11DRV_vkDestroySwapchainKHR,
|
||||||
X11DRV_vkEnumerateInstanceExtensionProperties,
|
X11DRV_vkEnumerateInstanceExtensionProperties,
|
||||||
X11DRV_vkGetDeviceProcAddr,
|
NULL,
|
||||||
X11DRV_vkGetInstanceProcAddr,
|
NULL,
|
||||||
X11DRV_vkGetPhysicalDeviceWin32PresentationSupportKHR,
|
X11DRV_vkGetPhysicalDeviceWin32PresentationSupportKHR,
|
||||||
X11DRV_vkGetSwapchainImagesKHR,
|
X11DRV_vkGetSwapchainImagesKHR,
|
||||||
X11DRV_vkQueuePresentKHR,
|
X11DRV_vkQueuePresentKHR,
|
||||||
|
@ -509,8 +483,6 @@ UINT X11DRV_VulkanInit( UINT version, void *vulkan_handle, struct vulkan_funcs *
|
||||||
LOAD_FUNCPTR( vkDestroySurfaceKHR );
|
LOAD_FUNCPTR( vkDestroySurfaceKHR );
|
||||||
LOAD_FUNCPTR( vkDestroySwapchainKHR );
|
LOAD_FUNCPTR( vkDestroySwapchainKHR );
|
||||||
LOAD_FUNCPTR( vkEnumerateInstanceExtensionProperties );
|
LOAD_FUNCPTR( vkEnumerateInstanceExtensionProperties );
|
||||||
LOAD_FUNCPTR( vkGetDeviceProcAddr );
|
|
||||||
LOAD_FUNCPTR( vkGetInstanceProcAddr );
|
|
||||||
LOAD_FUNCPTR( vkGetPhysicalDeviceXlibPresentationSupportKHR );
|
LOAD_FUNCPTR( vkGetPhysicalDeviceXlibPresentationSupportKHR );
|
||||||
LOAD_FUNCPTR( vkGetSwapchainImagesKHR );
|
LOAD_FUNCPTR( vkGetSwapchainImagesKHR );
|
||||||
LOAD_FUNCPTR( vkQueuePresentKHR );
|
LOAD_FUNCPTR( vkQueuePresentKHR );
|
||||||
|
|
Loading…
Add table
Reference in a new issue