Commit f30f8a42 authored by Rémi Bernon's avatar Rémi Bernon Committed by Alexandre Julliard

win32u: Return the host surface directly from vulkan_surface_create.

parent 7d2d8c7e
...@@ -52,7 +52,7 @@ static void *(*p_vkGetInstanceProcAddr)(VkInstance, const char *); ...@@ -52,7 +52,7 @@ static void *(*p_vkGetInstanceProcAddr)(VkInstance, const char *);
struct surface struct surface
{ {
VkSurfaceKHR host_surface; VkSurfaceKHR host_surface;
VkSurfaceKHR driver_surface; void *driver_private;
HWND hwnd; HWND hwnd;
}; };
...@@ -76,14 +76,13 @@ static VkResult win32u_vkCreateWin32SurfaceKHR( VkInstance instance, const VkWin ...@@ -76,14 +76,13 @@ static VkResult win32u_vkCreateWin32SurfaceKHR( VkInstance instance, const VkWin
if (allocator) FIXME( "Support for allocation callbacks not implemented yet\n" ); if (allocator) FIXME( "Support for allocation callbacks not implemented yet\n" );
if (!(surface = calloc( 1, sizeof(*surface) ))) return VK_ERROR_OUT_OF_HOST_MEMORY; if (!(surface = calloc( 1, sizeof(*surface) ))) return VK_ERROR_OUT_OF_HOST_MEMORY;
if ((res = driver_funcs->p_vulkan_surface_create( info->hwnd, instance, &surface->driver_surface ))) if ((res = driver_funcs->p_vulkan_surface_create( info->hwnd, instance, &surface->host_surface, &surface->driver_private )))
{ {
free( surface ); free( surface );
return res; return res;
} }
surface->hwnd = info->hwnd; surface->hwnd = info->hwnd;
surface->host_surface = driver_funcs->p_wine_get_host_surface( surface->driver_surface );
*handle = surface_to_handle( surface ); *handle = surface_to_handle( surface );
return VK_SUCCESS; return VK_SUCCESS;
} }
...@@ -96,7 +95,7 @@ static void win32u_vkDestroySurfaceKHR( VkInstance instance, VkSurfaceKHR handle ...@@ -96,7 +95,7 @@ static void win32u_vkDestroySurfaceKHR( VkInstance instance, VkSurfaceKHR handle
if (allocator) FIXME( "Support for allocation callbacks not implemented yet\n" ); if (allocator) FIXME( "Support for allocation callbacks not implemented yet\n" );
p_vkDestroySurfaceKHR( instance, surface->host_surface, NULL /* allocator */ ); p_vkDestroySurfaceKHR( instance, surface->host_surface, NULL /* allocator */ );
driver_funcs->p_vulkan_surface_destroy( surface->hwnd, surface->driver_surface ); driver_funcs->p_vulkan_surface_destroy( surface->hwnd, surface->driver_private );
free( surface ); free( surface );
} }
...@@ -164,13 +163,13 @@ static struct vulkan_funcs vulkan_funcs = ...@@ -164,13 +163,13 @@ static struct vulkan_funcs vulkan_funcs =
.p_wine_get_host_surface = win32u_wine_get_host_surface, .p_wine_get_host_surface = win32u_wine_get_host_surface,
}; };
static VkResult nulldrv_vulkan_surface_create( HWND hwnd, VkInstance instance, VkSurfaceKHR *surface ) static VkResult nulldrv_vulkan_surface_create( HWND hwnd, VkInstance instance, VkSurfaceKHR *surface, void **private )
{ {
FIXME( "stub!\n" ); FIXME( "stub!\n" );
return VK_ERROR_INCOMPATIBLE_DRIVER; return VK_ERROR_INCOMPATIBLE_DRIVER;
} }
static void nulldrv_vulkan_surface_destroy( HWND hwnd, VkSurfaceKHR surface ) static void nulldrv_vulkan_surface_destroy( HWND hwnd, void *private )
{ {
} }
...@@ -188,11 +187,6 @@ static const char *nulldrv_get_host_surface_extension(void) ...@@ -188,11 +187,6 @@ static const char *nulldrv_get_host_surface_extension(void)
return "VK_WINE_nulldrv_surface"; return "VK_WINE_nulldrv_surface";
} }
static VkSurfaceKHR nulldrv_wine_get_host_surface( VkSurfaceKHR surface )
{
return surface;
}
static const struct vulkan_driver_funcs nulldrv_funcs = static const struct vulkan_driver_funcs nulldrv_funcs =
{ {
.p_vulkan_surface_create = nulldrv_vulkan_surface_create, .p_vulkan_surface_create = nulldrv_vulkan_surface_create,
...@@ -200,7 +194,6 @@ static const struct vulkan_driver_funcs nulldrv_funcs = ...@@ -200,7 +194,6 @@ static const struct vulkan_driver_funcs nulldrv_funcs =
.p_vulkan_surface_presented = nulldrv_vulkan_surface_presented, .p_vulkan_surface_presented = nulldrv_vulkan_surface_presented,
.p_vkGetPhysicalDeviceWin32PresentationSupportKHR = nulldrv_vkGetPhysicalDeviceWin32PresentationSupportKHR, .p_vkGetPhysicalDeviceWin32PresentationSupportKHR = nulldrv_vkGetPhysicalDeviceWin32PresentationSupportKHR,
.p_get_host_surface_extension = nulldrv_get_host_surface_extension, .p_get_host_surface_extension = nulldrv_get_host_surface_extension,
.p_wine_get_host_surface = nulldrv_wine_get_host_surface,
}; };
static void vulkan_init(void) static void vulkan_init(void)
......
...@@ -56,7 +56,6 @@ struct wine_vk_surface ...@@ -56,7 +56,6 @@ struct wine_vk_surface
{ {
macdrv_metal_device device; macdrv_metal_device device;
macdrv_metal_view view; macdrv_metal_view view;
VkSurfaceKHR host_surface; /* host surface */
}; };
typedef struct VkMacOSSurfaceCreateInfoMVK typedef struct VkMacOSSurfaceCreateInfoMVK
...@@ -81,11 +80,6 @@ static VkResult (*pvkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice, ...@@ -81,11 +80,6 @@ static VkResult (*pvkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice,
static const struct vulkan_driver_funcs macdrv_vulkan_driver_funcs; static const struct vulkan_driver_funcs macdrv_vulkan_driver_funcs;
static inline struct wine_vk_surface *surface_from_handle(VkSurfaceKHR handle)
{
return (struct wine_vk_surface *)(uintptr_t)handle;
}
static void wine_vk_surface_destroy(struct wine_vk_surface *surface) static void wine_vk_surface_destroy(struct wine_vk_surface *surface)
{ {
if (surface->view) if (surface->view)
...@@ -97,13 +91,13 @@ static void wine_vk_surface_destroy(struct wine_vk_surface *surface) ...@@ -97,13 +91,13 @@ static void wine_vk_surface_destroy(struct wine_vk_surface *surface)
free(surface); free(surface);
} }
static VkResult macdrv_vulkan_surface_create(HWND hwnd, VkInstance instance, VkSurfaceKHR *surface) static VkResult macdrv_vulkan_surface_create(HWND hwnd, VkInstance instance, VkSurfaceKHR *surface, void **private)
{ {
VkResult res; VkResult res;
struct wine_vk_surface *mac_surface; struct wine_vk_surface *mac_surface;
struct macdrv_win_data *data; struct macdrv_win_data *data;
TRACE("%p %p %p\n", hwnd, instance, surface); TRACE("%p %p %p %p\n", hwnd, instance, surface, private);
if (!(data = get_win_data(hwnd))) if (!(data = get_win_data(hwnd)))
{ {
...@@ -144,7 +138,7 @@ static VkResult macdrv_vulkan_surface_create(HWND hwnd, VkInstance instance, VkS ...@@ -144,7 +138,7 @@ static VkResult macdrv_vulkan_surface_create(HWND hwnd, VkInstance instance, VkS
create_info_host.flags = 0; /* reserved */ create_info_host.flags = 0; /* reserved */
create_info_host.pLayer = macdrv_view_get_metal_layer(mac_surface->view); create_info_host.pLayer = macdrv_view_get_metal_layer(mac_surface->view);
res = pvkCreateMetalSurfaceEXT(instance, &create_info_host, NULL /* allocator */, &mac_surface->host_surface); res = pvkCreateMetalSurfaceEXT(instance, &create_info_host, NULL /* allocator */, surface);
} }
else else
{ {
...@@ -154,7 +148,7 @@ static VkResult macdrv_vulkan_surface_create(HWND hwnd, VkInstance instance, VkS ...@@ -154,7 +148,7 @@ static VkResult macdrv_vulkan_surface_create(HWND hwnd, VkInstance instance, VkS
create_info_host.flags = 0; /* reserved */ create_info_host.flags = 0; /* reserved */
create_info_host.pView = macdrv_view_get_metal_layer(mac_surface->view); create_info_host.pView = macdrv_view_get_metal_layer(mac_surface->view);
res = pvkCreateMacOSSurfaceMVK(instance, &create_info_host, NULL /* allocator */, &mac_surface->host_surface); res = pvkCreateMacOSSurfaceMVK(instance, &create_info_host, NULL /* allocator */, surface);
} }
if (res != VK_SUCCESS) if (res != VK_SUCCESS)
{ {
...@@ -162,11 +156,11 @@ static VkResult macdrv_vulkan_surface_create(HWND hwnd, VkInstance instance, VkS ...@@ -162,11 +156,11 @@ static VkResult macdrv_vulkan_surface_create(HWND hwnd, VkInstance instance, VkS
goto err; goto err;
} }
*surface = (uintptr_t)mac_surface;
release_win_data(data); release_win_data(data);
TRACE("Created surface=0x%s\n", wine_dbgstr_longlong(*surface)); *private = mac_surface;
TRACE("Created surface=0x%s, private=%p\n", wine_dbgstr_longlong(*surface), *private);
return VK_SUCCESS; return VK_SUCCESS;
err: err:
...@@ -175,11 +169,11 @@ err: ...@@ -175,11 +169,11 @@ err:
return res; return res;
} }
static void macdrv_vulkan_surface_destroy(HWND hwnd, VkSurfaceKHR surface) static void macdrv_vulkan_surface_destroy(HWND hwnd, void *private)
{ {
struct wine_vk_surface *mac_surface = surface_from_handle(surface); struct wine_vk_surface *mac_surface = private;
TRACE("%p 0x%s\n", hwnd, wine_dbgstr_longlong(surface)); TRACE("%p %p\n", hwnd, private);
wine_vk_surface_destroy(mac_surface); wine_vk_surface_destroy(mac_surface);
} }
...@@ -201,15 +195,6 @@ static const char *macdrv_get_host_surface_extension(void) ...@@ -201,15 +195,6 @@ static const char *macdrv_get_host_surface_extension(void)
return pvkCreateMetalSurfaceEXT ? "VK_EXT_metal_surface" : "VK_MVK_macos_surface"; return pvkCreateMetalSurfaceEXT ? "VK_EXT_metal_surface" : "VK_MVK_macos_surface";
} }
static VkSurfaceKHR macdrv_wine_get_host_surface(VkSurfaceKHR surface)
{
struct wine_vk_surface *mac_surface = surface_from_handle(surface);
TRACE("0x%s\n", wine_dbgstr_longlong(surface));
return mac_surface->host_surface;
}
static const struct vulkan_driver_funcs macdrv_vulkan_driver_funcs = static const struct vulkan_driver_funcs macdrv_vulkan_driver_funcs =
{ {
.p_vulkan_surface_create = macdrv_vulkan_surface_create, .p_vulkan_surface_create = macdrv_vulkan_surface_create,
...@@ -218,7 +203,6 @@ static const struct vulkan_driver_funcs macdrv_vulkan_driver_funcs = ...@@ -218,7 +203,6 @@ static const struct vulkan_driver_funcs macdrv_vulkan_driver_funcs =
.p_vkGetPhysicalDeviceWin32PresentationSupportKHR = macdrv_vkGetPhysicalDeviceWin32PresentationSupportKHR, .p_vkGetPhysicalDeviceWin32PresentationSupportKHR = macdrv_vkGetPhysicalDeviceWin32PresentationSupportKHR,
.p_get_host_surface_extension = macdrv_get_host_surface_extension, .p_get_host_surface_extension = macdrv_get_host_surface_extension,
.p_wine_get_host_surface = macdrv_wine_get_host_surface,
}; };
UINT macdrv_VulkanInit(UINT version, void *vulkan_handle, const struct vulkan_driver_funcs **driver_funcs) UINT macdrv_VulkanInit(UINT version, void *vulkan_handle, const struct vulkan_driver_funcs **driver_funcs)
......
...@@ -61,14 +61,8 @@ static const struct vulkan_driver_funcs wayland_vulkan_driver_funcs; ...@@ -61,14 +61,8 @@ static const struct vulkan_driver_funcs wayland_vulkan_driver_funcs;
struct wine_vk_surface struct wine_vk_surface
{ {
struct wayland_client_surface *client; struct wayland_client_surface *client;
VkSurfaceKHR host_surface;
}; };
static struct wine_vk_surface *wine_vk_surface_from_handle(VkSurfaceKHR handle)
{
return (struct wine_vk_surface *)(uintptr_t)handle;
}
static HWND wine_vk_surface_get_hwnd(struct wine_vk_surface *wine_vk_surface) static HWND wine_vk_surface_get_hwnd(struct wine_vk_surface *wine_vk_surface)
{ {
return wl_surface_get_user_data(wine_vk_surface->client->wl_surface); return wl_surface_get_user_data(wine_vk_surface->client->wl_surface);
...@@ -93,21 +87,20 @@ static void wine_vk_surface_destroy(struct wine_vk_surface *wine_vk_surface) ...@@ -93,21 +87,20 @@ static void wine_vk_surface_destroy(struct wine_vk_surface *wine_vk_surface)
free(wine_vk_surface); free(wine_vk_surface);
} }
static VkResult wayland_vulkan_surface_create(HWND hwnd, VkInstance instance, VkSurfaceKHR *vk_surface) static VkResult wayland_vulkan_surface_create(HWND hwnd, VkInstance instance, VkSurfaceKHR *surface, void **private)
{ {
VkResult res; VkResult res;
VkWaylandSurfaceCreateInfoKHR create_info_host; VkWaylandSurfaceCreateInfoKHR create_info_host;
struct wine_vk_surface *wine_vk_surface; struct wine_vk_surface *wine_vk_surface;
struct wayland_surface *wayland_surface; struct wayland_surface *wayland_surface;
TRACE("%p %p %p\n", hwnd, instance, vk_surface); TRACE("%p %p %p %p\n", hwnd, instance, surface, private);
wine_vk_surface = calloc(1, sizeof(*wine_vk_surface)); wine_vk_surface = calloc(1, sizeof(*wine_vk_surface));
if (!wine_vk_surface) if (!wine_vk_surface)
{ {
ERR("Failed to allocate memory for wayland vulkan surface\n"); ERR("Failed to allocate memory for wayland vulkan surface\n");
res = VK_ERROR_OUT_OF_HOST_MEMORY; return VK_ERROR_OUT_OF_HOST_MEMORY;
goto err;
} }
wayland_surface = wayland_surface_lock_hwnd(hwnd); wayland_surface = wayland_surface_lock_hwnd(hwnd);
...@@ -138,28 +131,28 @@ static VkResult wayland_vulkan_surface_create(HWND hwnd, VkInstance instance, Vk ...@@ -138,28 +131,28 @@ static VkResult wayland_vulkan_surface_create(HWND hwnd, VkInstance instance, Vk
res = pvkCreateWaylandSurfaceKHR(instance, &create_info_host, res = pvkCreateWaylandSurfaceKHR(instance, &create_info_host,
NULL /* allocator */, NULL /* allocator */,
&wine_vk_surface->host_surface); surface);
if (res != VK_SUCCESS) if (res != VK_SUCCESS)
{ {
ERR("Failed to create vulkan wayland surface, res=%d\n", res); ERR("Failed to create vulkan wayland surface, res=%d\n", res);
goto err; goto err;
} }
*vk_surface = (uintptr_t)wine_vk_surface; *private = wine_vk_surface;
TRACE("Created surface=0x%s\n", wine_dbgstr_longlong(*vk_surface)); TRACE("Created surface=0x%s, private=%p\n", wine_dbgstr_longlong(*surface), *private);
return VK_SUCCESS; return VK_SUCCESS;
err: err:
if (wine_vk_surface) wine_vk_surface_destroy(wine_vk_surface); wine_vk_surface_destroy(wine_vk_surface);
return res; return res;
} }
static void wayland_vulkan_surface_destroy(HWND hwnd, VkSurfaceKHR surface) static void wayland_vulkan_surface_destroy(HWND hwnd, void *private)
{ {
struct wine_vk_surface *wine_vk_surface = wine_vk_surface_from_handle(surface); struct wine_vk_surface *wine_vk_surface = private;
TRACE("%p 0x%s\n", hwnd, wine_dbgstr_longlong(surface)); TRACE("%p %p\n", hwnd, private);
wine_vk_surface_destroy(wine_vk_surface); wine_vk_surface_destroy(wine_vk_surface);
} }
...@@ -199,11 +192,6 @@ static const char *wayland_get_host_surface_extension(void) ...@@ -199,11 +192,6 @@ static const char *wayland_get_host_surface_extension(void)
return "VK_KHR_wayland_surface"; return "VK_KHR_wayland_surface";
} }
static VkSurfaceKHR wayland_wine_get_host_surface(VkSurfaceKHR surface)
{
return wine_vk_surface_from_handle(surface)->host_surface;
}
static const struct vulkan_driver_funcs wayland_vulkan_driver_funcs = static const struct vulkan_driver_funcs wayland_vulkan_driver_funcs =
{ {
.p_vulkan_surface_create = wayland_vulkan_surface_create, .p_vulkan_surface_create = wayland_vulkan_surface_create,
...@@ -212,7 +200,6 @@ static const struct vulkan_driver_funcs wayland_vulkan_driver_funcs = ...@@ -212,7 +200,6 @@ static const struct vulkan_driver_funcs wayland_vulkan_driver_funcs =
.p_vkGetPhysicalDeviceWin32PresentationSupportKHR = wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR, .p_vkGetPhysicalDeviceWin32PresentationSupportKHR = wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR,
.p_get_host_surface_extension = wayland_get_host_surface_extension, .p_get_host_surface_extension = wayland_get_host_surface_extension,
.p_wine_get_host_surface = wayland_wine_get_host_surface,
}; };
/********************************************************************** /**********************************************************************
......
...@@ -59,7 +59,6 @@ struct wine_vk_surface ...@@ -59,7 +59,6 @@ struct wine_vk_surface
LONG ref; LONG ref;
struct list entry; struct list entry;
Window window; Window window;
VkSurfaceKHR host_surface;
HWND hwnd; HWND hwnd;
DWORD hwnd_thread_id; DWORD hwnd_thread_id;
}; };
...@@ -78,11 +77,6 @@ static VkBool32 (*pvkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevi ...@@ -78,11 +77,6 @@ static VkBool32 (*pvkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevi
static const struct vulkan_driver_funcs x11drv_vulkan_driver_funcs; static const struct vulkan_driver_funcs x11drv_vulkan_driver_funcs;
static inline struct wine_vk_surface *surface_from_handle(VkSurfaceKHR handle)
{
return (struct wine_vk_surface *)(uintptr_t)handle;
}
static void wine_vk_surface_release( struct wine_vk_surface *surface ) static void wine_vk_surface_release( struct wine_vk_surface *surface )
{ {
if (InterlockedDecrement(&surface->ref)) if (InterlockedDecrement(&surface->ref))
...@@ -131,13 +125,13 @@ void vulkan_thread_detach(void) ...@@ -131,13 +125,13 @@ void vulkan_thread_detach(void)
pthread_mutex_unlock(&vulkan_mutex); pthread_mutex_unlock(&vulkan_mutex);
} }
static VkResult X11DRV_vulkan_surface_create( HWND hwnd, VkInstance instance, VkSurfaceKHR *surface ) static VkResult X11DRV_vulkan_surface_create( HWND hwnd, VkInstance instance, VkSurfaceKHR *surface, void **private )
{ {
VkResult res; VkResult res;
VkXlibSurfaceCreateInfoKHR create_info_host; VkXlibSurfaceCreateInfoKHR create_info_host;
struct wine_vk_surface *x11_surface; struct wine_vk_surface *x11_surface;
TRACE( "%p %p %p\n", hwnd, instance, surface ); TRACE( "%p %p %p %p\n", hwnd, instance, surface, private );
/* TODO: support child window rendering. */ /* TODO: support child window rendering. */
if (NtUserGetAncestor( hwnd, GA_PARENT ) != NtUserGetDesktopWindow()) if (NtUserGetAncestor( hwnd, GA_PARENT ) != NtUserGetDesktopWindow())
...@@ -157,7 +151,7 @@ static VkResult X11DRV_vulkan_surface_create( HWND hwnd, VkInstance instance, Vk ...@@ -157,7 +151,7 @@ static VkResult X11DRV_vulkan_surface_create( HWND hwnd, VkInstance instance, Vk
if (!x11_surface->window) if (!x11_surface->window)
{ {
ERR( "Failed to allocate client window for hwnd=%p\n", hwnd ); ERR("Failed to allocate client window for hwnd=%p\n", hwnd);
/* VK_KHR_win32_surface only allows out of host and device memory as errors. */ /* VK_KHR_win32_surface only allows out of host and device memory as errors. */
free(x11_surface); free(x11_surface);
...@@ -170,7 +164,7 @@ static VkResult X11DRV_vulkan_surface_create( HWND hwnd, VkInstance instance, Vk ...@@ -170,7 +164,7 @@ static VkResult X11DRV_vulkan_surface_create( HWND hwnd, VkInstance instance, Vk
create_info_host.dpy = gdi_display; create_info_host.dpy = gdi_display;
create_info_host.window = x11_surface->window; create_info_host.window = x11_surface->window;
res = pvkCreateXlibSurfaceKHR( instance, &create_info_host, NULL /* allocator */, &x11_surface->host_surface ); res = pvkCreateXlibSurfaceKHR( instance, &create_info_host, NULL /* allocator */, surface );
if (res != VK_SUCCESS) if (res != VK_SUCCESS)
{ {
ERR("Failed to create Xlib surface, res=%d\n", res); ERR("Failed to create Xlib surface, res=%d\n", res);
...@@ -183,17 +177,17 @@ static VkResult X11DRV_vulkan_surface_create( HWND hwnd, VkInstance instance, Vk ...@@ -183,17 +177,17 @@ static VkResult X11DRV_vulkan_surface_create( HWND hwnd, VkInstance instance, Vk
list_add_tail(&surface_list, &x11_surface->entry); list_add_tail(&surface_list, &x11_surface->entry);
pthread_mutex_unlock(&vulkan_mutex); pthread_mutex_unlock(&vulkan_mutex);
*surface = (uintptr_t)x11_surface; *private = x11_surface;
TRACE("Created surface=0x%s\n", wine_dbgstr_longlong(*surface)); TRACE("Created surface 0x%s, private %p\n", wine_dbgstr_longlong(*surface), *private);
return VK_SUCCESS; return VK_SUCCESS;
} }
static void X11DRV_vulkan_surface_destroy( HWND hwnd, VkSurfaceKHR surface ) static void X11DRV_vulkan_surface_destroy( HWND hwnd, void *private )
{ {
struct wine_vk_surface *x11_surface = surface_from_handle(surface); struct wine_vk_surface *x11_surface = private;
TRACE( "%p 0x%s\n", hwnd, wine_dbgstr_longlong(surface) ); TRACE( "%p %p\n", hwnd, private );
wine_vk_surface_release(x11_surface); wine_vk_surface_release(x11_surface);
} }
...@@ -216,15 +210,6 @@ static const char *X11DRV_get_host_surface_extension(void) ...@@ -216,15 +210,6 @@ static const char *X11DRV_get_host_surface_extension(void)
return "VK_KHR_xlib_surface"; return "VK_KHR_xlib_surface";
} }
static VkSurfaceKHR X11DRV_wine_get_host_surface( VkSurfaceKHR surface )
{
struct wine_vk_surface *x11_surface = surface_from_handle(surface);
TRACE("0x%s\n", wine_dbgstr_longlong(surface));
return x11_surface->host_surface;
}
static const struct vulkan_driver_funcs x11drv_vulkan_driver_funcs = static const struct vulkan_driver_funcs x11drv_vulkan_driver_funcs =
{ {
.p_vulkan_surface_create = X11DRV_vulkan_surface_create, .p_vulkan_surface_create = X11DRV_vulkan_surface_create,
...@@ -233,7 +218,6 @@ static const struct vulkan_driver_funcs x11drv_vulkan_driver_funcs = ...@@ -233,7 +218,6 @@ static const struct vulkan_driver_funcs x11drv_vulkan_driver_funcs =
.p_vkGetPhysicalDeviceWin32PresentationSupportKHR = X11DRV_vkGetPhysicalDeviceWin32PresentationSupportKHR, .p_vkGetPhysicalDeviceWin32PresentationSupportKHR = X11DRV_vkGetPhysicalDeviceWin32PresentationSupportKHR,
.p_get_host_surface_extension = X11DRV_get_host_surface_extension, .p_get_host_surface_extension = X11DRV_get_host_surface_extension,
.p_wine_get_host_surface = X11DRV_wine_get_host_surface,
}; };
UINT X11DRV_VulkanInit( UINT version, void *vulkan_handle, const struct vulkan_driver_funcs **driver_funcs ) UINT X11DRV_VulkanInit( UINT version, void *vulkan_handle, const struct vulkan_driver_funcs **driver_funcs )
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
#define __WINE_VULKAN_DRIVER_H #define __WINE_VULKAN_DRIVER_H
/* Wine internal vulkan driver version, needs to be bumped upon vulkan_funcs changes. */ /* Wine internal vulkan driver version, needs to be bumped upon vulkan_funcs changes. */
#define WINE_VULKAN_DRIVER_VERSION 32 #define WINE_VULKAN_DRIVER_VERSION 33
struct vulkan_funcs struct vulkan_funcs
{ {
...@@ -44,13 +44,12 @@ struct vulkan_funcs ...@@ -44,13 +44,12 @@ struct vulkan_funcs
/* interface between win32u and the user drivers */ /* interface between win32u and the user drivers */
struct vulkan_driver_funcs struct vulkan_driver_funcs
{ {
VkResult (*p_vulkan_surface_create)(HWND, VkInstance, VkSurfaceKHR *); VkResult (*p_vulkan_surface_create)(HWND, VkInstance, VkSurfaceKHR *, void **);
void (*p_vulkan_surface_destroy)(HWND, VkSurfaceKHR); void (*p_vulkan_surface_destroy)(HWND, void *);
void (*p_vulkan_surface_presented)(HWND, VkResult); void (*p_vulkan_surface_presented)(HWND, VkResult);
VkBool32 (*p_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice, uint32_t); VkBool32 (*p_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice, uint32_t);
const char *(*p_get_host_surface_extension)(void); const char *(*p_get_host_surface_extension)(void);
VkSurfaceKHR (*p_wine_get_host_surface)(VkSurfaceKHR);
}; };
#endif /* __WINE_VULKAN_DRIVER_H */ #endif /* __WINE_VULKAN_DRIVER_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment