This introduces a custom `VkPresentSurfacesInfoWine` struct to the driver queue present. It could very well be a separate vkQueuePresent parameter, now that the driver interface is manually written.
For now it provides the swapchains HWND, for vulkan_surface_presented, which is mostly just for winewayland purposes. Later I intend to change it to pass win32u surfaces wrappers.
-- v4: winevulkan: Remove now unnecessary vkCreateSwapchainKHR driver entry. winevulkan: Remove now unnecessary vkDestroySwapchain driver entry. win32u: Move vkQueuePresent implementation out of the user drivers. winewayland: Remove now unnecessary swapchain wrapper. winewayland: Remove now unnecessary swapchain extents checks. win32u: Introduce a new vulkan_surface_presented driver entry. winevulkan: Pass surface info for each vkQueuePresent swapchain to win32u.
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/vulkan.c | 13 +++++++++++++ dlls/winemac.drv/vulkan.c | 2 +- dlls/winevulkan/vulkan.c | 13 ++++++++++--- dlls/winewayland.drv/vulkan.c | 2 +- dlls/winex11.drv/vulkan.c | 2 +- include/wine/vulkan_driver.h | 4 ++-- 6 files changed, 28 insertions(+), 8 deletions(-)
diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index 6866dbcb076..73e0b276bbe 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -43,9 +43,19 @@ WINE_DEFAULT_DEBUG_CHANNEL(vulkan); static void *vulkan_handle; static struct vulkan_funcs vulkan_funcs;
+static VkResult (*p_vkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *, HWND *); static void *(*p_vkGetDeviceProcAddr)(VkDevice, const char *); static void *(*p_vkGetInstanceProcAddr)(VkInstance, const char *);
+static VkResult win32u_vkQueuePresentKHR( VkQueue queue, const VkPresentInfoKHR *present_info, HWND *surfaces ) +{ + VkPresentInfoKHR host_present_info = *present_info; + + TRACE( "queue %p, present_info %p\n", queue, present_info ); + + return p_vkQueuePresentKHR( queue, &host_present_info, surfaces ); +} + static void *win32u_vkGetDeviceProcAddr( VkDevice device, const char *name ) { TRACE( "device %p, name %s\n", device, debugstr_a(name) ); @@ -112,6 +122,9 @@ static void vulkan_init(void)
vulkan_funcs.p_vkGetDeviceProcAddr = win32u_vkGetDeviceProcAddr; vulkan_funcs.p_vkGetInstanceProcAddr = win32u_vkGetInstanceProcAddr; + + p_vkQueuePresentKHR = vulkan_funcs.p_vkQueuePresentKHR; + vulkan_funcs.p_vkQueuePresentKHR = win32u_vkQueuePresentKHR; }
/*********************************************************************** diff --git a/dlls/winemac.drv/vulkan.c b/dlls/winemac.drv/vulkan.c index f32269c7237..fd25b862ac9 100644 --- a/dlls/winemac.drv/vulkan.c +++ b/dlls/winemac.drv/vulkan.c @@ -235,7 +235,7 @@ static VkBool32 macdrv_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysical return VK_TRUE; }
-static VkResult macdrv_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *present_info) +static VkResult macdrv_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *present_info, HWND *surfaces) { TRACE("%p, %p\n", queue, present_info); return pvkQueuePresentKHR(queue, present_info); diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index 972de3cedaf..ab757e19a61 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -1740,25 +1740,31 @@ void wine_vkDestroySwapchainKHR(VkDevice device_handle, VkSwapchainKHR swapchain VkResult wine_vkQueuePresentKHR(VkQueue queue_handle, const VkPresentInfoKHR *present_info) { VkSwapchainKHR swapchains_buffer[16], *swapchains = swapchains_buffer; + HWND surfaces_buffer[ARRAY_SIZE(swapchains_buffer)], *surfaces = surfaces_buffer; struct wine_queue *queue = wine_queue_from_handle(queue_handle); VkPresentInfoKHR present_info_host = *present_info; - struct wine_device *device = queue->device; VkResult res; UINT i;
if (present_info->swapchainCount > ARRAY_SIZE(swapchains_buffer) && - !(swapchains = malloc(present_info->swapchainCount * sizeof(*swapchains)))) + (!(swapchains = malloc(present_info->swapchainCount * sizeof(*swapchains))) || + !(surfaces = malloc(present_info->swapchainCount * sizeof(*surfaces))))) + { + free(swapchains); return VK_ERROR_OUT_OF_HOST_MEMORY; + }
for (i = 0; i < present_info->swapchainCount; i++) { struct wine_swapchain *swapchain = wine_swapchain_from_handle(present_info->pSwapchains[i]); + struct wine_surface *surface = swapchain->surface; swapchains[i] = swapchain->host_swapchain; + surfaces[i] = surface->hwnd; }
present_info_host.pSwapchains = swapchains;
- res = device->funcs.p_vkQueuePresentKHR(queue->host_queue, &present_info_host); + res = vk_funcs->p_vkQueuePresentKHR(queue->host_queue, &present_info_host, surfaces);
for (i = 0; i < present_info->swapchainCount; i++) { @@ -1786,6 +1792,7 @@ VkResult wine_vkQueuePresentKHR(VkQueue queue_handle, const VkPresentInfoKHR *pr }
if (swapchains != swapchains_buffer) free(swapchains); + if (surfaces != surfaces_buffer) free(surfaces);
if (TRACE_ON(fps)) { diff --git a/dlls/winewayland.drv/vulkan.c b/dlls/winewayland.drv/vulkan.c index 8fd13fa7761..9246e70439c 100644 --- a/dlls/winewayland.drv/vulkan.c +++ b/dlls/winewayland.drv/vulkan.c @@ -365,7 +365,7 @@ static VkBool32 wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysica process_wayland.wl_display); }
-static VkResult wayland_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *present_info) +static VkResult wayland_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *present_info, HWND *surfaces) { VkResult res;
diff --git a/dlls/winex11.drv/vulkan.c b/dlls/winex11.drv/vulkan.c index 36edcffa997..4aa76103995 100644 --- a/dlls/winex11.drv/vulkan.c +++ b/dlls/winex11.drv/vulkan.c @@ -252,7 +252,7 @@ static VkBool32 X11DRV_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysical default_visual.visual->visualid); }
-static VkResult X11DRV_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *present_info) +static VkResult X11DRV_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *present_info, HWND *surfaces) { TRACE("%p, %p\n", queue, present_info); return pvkQueuePresentKHR(queue, present_info); diff --git a/include/wine/vulkan_driver.h b/include/wine/vulkan_driver.h index e707a56269c..cd08f525f40 100644 --- a/include/wine/vulkan_driver.h +++ b/include/wine/vulkan_driver.h @@ -21,7 +21,7 @@ #define __WINE_VULKAN_DRIVER_H
/* Wine internal vulkan driver version, needs to be bumped upon vulkan_funcs changes. */ -#define WINE_VULKAN_DRIVER_VERSION 23 +#define WINE_VULKAN_DRIVER_VERSION 24
struct vulkan_funcs { @@ -36,7 +36,7 @@ struct vulkan_funcs void * (*p_vkGetDeviceProcAddr)(VkDevice, const char *); void * (*p_vkGetInstanceProcAddr)(VkInstance, const char *); VkBool32 (*p_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice, uint32_t); - VkResult (*p_vkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *); + VkResult (*p_vkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *, HWND *surfaces);
/* winevulkan specific functions */ const char *(*p_get_host_surface_extension)(void);
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/vulkan.c | 12 +++++++++++- dlls/winemac.drv/vulkan.c | 5 +++++ dlls/winewayland.drv/vulkan.c | 33 ++++++++++++++++++++++----------- dlls/winex11.drv/vulkan.c | 5 +++++ include/wine/vulkan_driver.h | 4 +++- 5 files changed, 46 insertions(+), 13 deletions(-)
diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index 73e0b276bbe..ffe8d804c54 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -50,10 +50,20 @@ static void *(*p_vkGetInstanceProcAddr)(VkInstance, const char *); static VkResult win32u_vkQueuePresentKHR( VkQueue queue, const VkPresentInfoKHR *present_info, HWND *surfaces ) { VkPresentInfoKHR host_present_info = *present_info; + VkResult res; + UINT i;
TRACE( "queue %p, present_info %p\n", queue, present_info );
- return p_vkQueuePresentKHR( queue, &host_present_info, surfaces ); + res = p_vkQueuePresentKHR( queue, &host_present_info, surfaces ); + + for (i = 0; i < present_info->swapchainCount; i++) + { + VkResult swapchain_res = present_info->pResults ? present_info->pResults[i] : res; + vulkan_funcs.p_vulkan_surface_presented( surfaces[i], swapchain_res ); + } + + return res; }
static void *win32u_vkGetDeviceProcAddr( VkDevice device, const char *name ) diff --git a/dlls/winemac.drv/vulkan.c b/dlls/winemac.drv/vulkan.c index fd25b862ac9..55451b2b093 100644 --- a/dlls/winemac.drv/vulkan.c +++ b/dlls/winemac.drv/vulkan.c @@ -255,6 +255,10 @@ static VkSurfaceKHR macdrv_wine_get_host_surface(VkSurfaceKHR surface) return mac_surface->host_surface; }
+static void macdrv_vulkan_surface_presented(HWND hwnd, VkResult result) +{ +} + static const struct vulkan_funcs vulkan_funcs = { macdrv_vkCreateSwapchainKHR, @@ -268,6 +272,7 @@ static const struct vulkan_funcs vulkan_funcs =
macdrv_get_host_surface_extension, macdrv_wine_get_host_surface, + macdrv_vulkan_surface_presented, };
UINT macdrv_VulkanInit(UINT version, void *vulkan_handle, struct vulkan_funcs *driver_funcs) diff --git a/dlls/winewayland.drv/vulkan.c b/dlls/winewayland.drv/vulkan.c index 9246e70439c..f93ece1c068 100644 --- a/dlls/winewayland.drv/vulkan.c +++ b/dlls/winewayland.drv/vulkan.c @@ -171,17 +171,6 @@ static VkResult check_queue_present(const VkPresentInfoKHR *present_info, int client_height = wayland_surface->window.client_rect.bottom - wayland_surface->window.client_rect.top;
- wayland_surface_ensure_contents(wayland_surface); - - /* Handle any processed configure request, to ensure the related - * surface state is applied by the compositor. */ - if (wayland_surface->processing.serial && - wayland_surface->processing.processed && - wayland_surface_reconfigure(wayland_surface)) - { - wl_surface_commit(wayland_surface->wl_surface); - } - pthread_mutex_unlock(&wayland_surface->mutex);
if (client_width == wine_vk_swapchain->extent.width && @@ -386,6 +375,27 @@ static VkSurfaceKHR wayland_wine_get_host_surface(VkSurfaceKHR surface) return wine_vk_surface_from_handle(surface)->host_surface; }
+static void wayland_vulkan_surface_presented(HWND hwnd, VkResult result) +{ + struct wayland_surface *wayland_surface; + + if ((wayland_surface = wayland_surface_lock_hwnd(hwnd))) + { + wayland_surface_ensure_contents(wayland_surface); + + /* Handle any processed configure request, to ensure the related + * surface state is applied by the compositor. */ + if (wayland_surface->processing.serial && + wayland_surface->processing.processed && + wayland_surface_reconfigure(wayland_surface)) + { + wl_surface_commit(wayland_surface->wl_surface); + } + + pthread_mutex_unlock(&wayland_surface->mutex); + } +} + static const struct vulkan_funcs vulkan_funcs = { .p_vkCreateSwapchainKHR = wayland_vkCreateSwapchainKHR, @@ -396,6 +406,7 @@ static const struct vulkan_funcs vulkan_funcs = .p_vkQueuePresentKHR = wayland_vkQueuePresentKHR, .p_get_host_surface_extension = wayland_get_host_surface_extension, .p_wine_get_host_surface = wayland_wine_get_host_surface, + .p_vulkan_surface_presented = wayland_vulkan_surface_presented, };
/********************************************************************** diff --git a/dlls/winex11.drv/vulkan.c b/dlls/winex11.drv/vulkan.c index 4aa76103995..35da6994075 100644 --- a/dlls/winex11.drv/vulkan.c +++ b/dlls/winex11.drv/vulkan.c @@ -272,6 +272,10 @@ static VkSurfaceKHR X11DRV_wine_get_host_surface( VkSurfaceKHR surface ) return x11_surface->host_surface; }
+static void X11DRV_vulkan_surface_presented(HWND hwnd, VkResult result) +{ +} + static const struct vulkan_funcs vulkan_funcs = { X11DRV_vkCreateSwapchainKHR, @@ -285,6 +289,7 @@ static const struct vulkan_funcs vulkan_funcs =
X11DRV_get_host_surface_extension, X11DRV_wine_get_host_surface, + X11DRV_vulkan_surface_presented, };
UINT X11DRV_VulkanInit( UINT version, void *vulkan_handle, struct vulkan_funcs *driver_funcs ) diff --git a/include/wine/vulkan_driver.h b/include/wine/vulkan_driver.h index cd08f525f40..aa6db2d5e19 100644 --- a/include/wine/vulkan_driver.h +++ b/include/wine/vulkan_driver.h @@ -21,7 +21,7 @@ #define __WINE_VULKAN_DRIVER_H
/* Wine internal vulkan driver version, needs to be bumped upon vulkan_funcs changes. */ -#define WINE_VULKAN_DRIVER_VERSION 24 +#define WINE_VULKAN_DRIVER_VERSION 25
struct vulkan_funcs { @@ -41,6 +41,8 @@ struct vulkan_funcs /* winevulkan specific functions */ const char *(*p_get_host_surface_extension)(void); VkSurfaceKHR (*p_wine_get_host_surface)(VkSurfaceKHR); + + void (*p_vulkan_surface_presented)(HWND, VkResult); };
#endif /* __WINE_VULKAN_DRIVER_H */
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winewayland.drv/vulkan.c | 63 +---------------------------------- 1 file changed, 1 insertion(+), 62 deletions(-)
diff --git a/dlls/winewayland.drv/vulkan.c b/dlls/winewayland.drv/vulkan.c index f93ece1c068..99f20fe76d4 100644 --- a/dlls/winewayland.drv/vulkan.c +++ b/dlls/winewayland.drv/vulkan.c @@ -75,8 +75,6 @@ struct wine_vk_swapchain { struct list entry; VkSwapchainKHR host_swapchain; - HWND hwnd; - VkExtent2D extent; };
static struct wine_vk_surface *wine_vk_surface_from_handle(VkSurfaceKHR handle) @@ -141,58 +139,6 @@ static struct wine_vk_swapchain *wine_vk_swapchain_from_handle(VkSwapchainKHR ha return NULL; }
-static void vk_result_update_out_of_date(VkResult *res) -{ - /* If the current result is less severe than out_of_date, which for - * now applies to all non-failure results, update it. - * TODO: Handle VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT when - * it is supported by winevulkan, since it's also considered - * less severe than out_of_date. */ - if (*res >= 0) *res = VK_ERROR_OUT_OF_DATE_KHR; -} - -static VkResult check_queue_present(const VkPresentInfoKHR *present_info, - VkResult present_res) -{ - VkResult res = present_res; - uint32_t i; - - for (i = 0; i < present_info->swapchainCount; ++i) - { - struct wine_vk_swapchain *wine_vk_swapchain = - wine_vk_swapchain_from_handle(present_info->pSwapchains[i]); - HWND hwnd = wine_vk_swapchain->hwnd; - struct wayland_surface *wayland_surface; - - if ((wayland_surface = wayland_surface_lock_hwnd(hwnd))) - { - int client_width = wayland_surface->window.client_rect.right - - wayland_surface->window.client_rect.left; - int client_height = wayland_surface->window.client_rect.bottom - - wayland_surface->window.client_rect.top; - - pthread_mutex_unlock(&wayland_surface->mutex); - - if (client_width == wine_vk_swapchain->extent.width && - client_height == wine_vk_swapchain->extent.height) - { - /* The window is still available and matches the swapchain size, - * so there is no new error to report. */ - continue; - } - } - - /* We use the out_of_date error even if the window is no longer - * available, to match win32 behavior (e.g., nvidia). The application - * will get surface_lost when it tries to recreate the swapchain. */ - if (present_info->pResults) - vk_result_update_out_of_date(&present_info->pResults[i]); - vk_result_update_out_of_date(&res); - } - - return res; -} - static VkResult wayland_vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *create_info, const VkAllocationCallbacks *allocator, @@ -216,9 +162,6 @@ static VkResult wayland_vkCreateSwapchainKHR(VkDevice device, if (!wine_vk_swapchain) return VK_ERROR_OUT_OF_HOST_MEMORY;
- wine_vk_swapchain->hwnd = wine_vk_surface_get_hwnd(wine_vk_surface); - wine_vk_swapchain->extent = create_info->imageExtent; - create_info_host = *create_info; create_info_host.surface = wine_vk_surface->host_surface;
@@ -356,13 +299,9 @@ static VkBool32 wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysica
static VkResult wayland_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *present_info, HWND *surfaces) { - VkResult res; - TRACE("%p, %p\n", queue, present_info);
- res = pvkQueuePresentKHR(queue, present_info); - - return check_queue_present(present_info, res); + return pvkQueuePresentKHR(queue, present_info); }
static const char *wayland_get_host_surface_extension(void)
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winewayland.drv/vulkan.c | 81 +---------------------------------- 1 file changed, 2 insertions(+), 79 deletions(-)
diff --git a/dlls/winewayland.drv/vulkan.c b/dlls/winewayland.drv/vulkan.c index 99f20fe76d4..cf80556b8e6 100644 --- a/dlls/winewayland.drv/vulkan.c +++ b/dlls/winewayland.drv/vulkan.c @@ -62,21 +62,12 @@ static VkResult (*pvkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *);
static const struct vulkan_funcs vulkan_funcs;
-static pthread_mutex_t wine_vk_swapchain_mutex = PTHREAD_MUTEX_INITIALIZER; -static struct list wine_vk_swapchain_list = LIST_INIT(wine_vk_swapchain_list); - struct wine_vk_surface { struct wayland_client_surface *client; VkSurfaceKHR host_surface; };
-struct wine_vk_swapchain -{ - struct list entry; - VkSwapchainKHR host_swapchain; -}; - static struct wine_vk_surface *wine_vk_surface_from_handle(VkSurfaceKHR handle) { return (struct wine_vk_surface *)(uintptr_t)handle; @@ -106,82 +97,24 @@ static void wine_vk_surface_destroy(struct wine_vk_surface *wine_vk_surface) free(wine_vk_surface); }
-static BOOL wine_vk_surface_is_valid(struct wine_vk_surface *wine_vk_surface) -{ - HWND hwnd = wine_vk_surface_get_hwnd(wine_vk_surface); - struct wayland_surface *wayland_surface; - - if ((wayland_surface = wayland_surface_lock_hwnd(hwnd))) - { - pthread_mutex_unlock(&wayland_surface->mutex); - return TRUE; - } - - return FALSE; -} - -static struct wine_vk_swapchain *wine_vk_swapchain_from_handle(VkSwapchainKHR handle) -{ - struct wine_vk_swapchain *wine_vk_swapchain; - - pthread_mutex_lock(&wine_vk_swapchain_mutex); - LIST_FOR_EACH_ENTRY(wine_vk_swapchain, &wine_vk_swapchain_list, - struct wine_vk_swapchain, entry) - { - if (wine_vk_swapchain->host_swapchain == handle) - { - pthread_mutex_unlock(&wine_vk_swapchain_mutex); - return wine_vk_swapchain; - } - } - pthread_mutex_unlock(&wine_vk_swapchain_mutex); - - return NULL; -} - static VkResult wayland_vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *create_info, const VkAllocationCallbacks *allocator, VkSwapchainKHR *swapchain) { - VkResult res; VkSwapchainCreateInfoKHR create_info_host; - struct wine_vk_surface *wine_vk_surface; - struct wine_vk_swapchain *wine_vk_swapchain; + struct wine_vk_surface *wine_vk_surface = wine_vk_surface_from_handle(create_info->surface);
TRACE("%p %p %p %p\n", device, create_info, allocator, swapchain);
if (allocator) FIXME("Support for allocation callbacks not implemented yet\n");
- wine_vk_surface = wine_vk_surface_from_handle(create_info->surface); - if (!wine_vk_surface_is_valid(wine_vk_surface)) - return VK_ERROR_SURFACE_LOST_KHR; - - wine_vk_swapchain = calloc(1, sizeof(*wine_vk_swapchain)); - if (!wine_vk_swapchain) - return VK_ERROR_OUT_OF_HOST_MEMORY; - create_info_host = *create_info; create_info_host.surface = wine_vk_surface->host_surface;
- res = pvkCreateSwapchainKHR(device, &create_info_host, NULL /* allocator */, + return pvkCreateSwapchainKHR(device, &create_info_host, NULL /* allocator */, swapchain); - if (res != VK_SUCCESS) - { - ERR("Failed to create vulkan wayland swapchain, res=%d\n", res); - free(wine_vk_swapchain); - return res; - } - - wine_vk_swapchain->host_swapchain = *swapchain; - - pthread_mutex_lock(&wine_vk_swapchain_mutex); - list_add_head(&wine_vk_swapchain_list, &wine_vk_swapchain->entry); - pthread_mutex_unlock(&wine_vk_swapchain_mutex); - - TRACE("Created swapchain=0x%s\n", wine_dbgstr_longlong(*swapchain)); - return res; }
static VkResult wayland_vkCreateWin32SurfaceKHR(VkInstance instance, @@ -270,22 +203,12 @@ static void wayland_vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks *allocator) { - struct wine_vk_swapchain *wine_vk_swapchain; - TRACE("%p, 0x%s %p\n", device, wine_dbgstr_longlong(swapchain), allocator);
if (allocator) FIXME("Support for allocation callbacks not implemented yet\n");
pvkDestroySwapchainKHR(device, swapchain, NULL /* allocator */); - - if ((wine_vk_swapchain = wine_vk_swapchain_from_handle(swapchain))) - { - pthread_mutex_lock(&wine_vk_swapchain_mutex); - list_remove(&wine_vk_swapchain->entry); - pthread_mutex_unlock(&wine_vk_swapchain_mutex); - free(wine_vk_swapchain); - } }
static VkBool32 wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice phys_dev,
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/vulkan.c | 7 +++---- dlls/winemac.drv/vulkan.c | 10 +--------- dlls/winewayland.drv/vulkan.c | 10 ---------- dlls/winex11.drv/vulkan.c | 10 +--------- 4 files changed, 5 insertions(+), 32 deletions(-)
diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index ffe8d804c54..6f3fcfa7f85 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -43,7 +43,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(vulkan); static void *vulkan_handle; static struct vulkan_funcs vulkan_funcs;
-static VkResult (*p_vkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *, HWND *); +static VkResult (*p_vkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *); static void *(*p_vkGetDeviceProcAddr)(VkDevice, const char *); static void *(*p_vkGetInstanceProcAddr)(VkInstance, const char *);
@@ -55,7 +55,7 @@ static VkResult win32u_vkQueuePresentKHR( VkQueue queue, const VkPresentInfoKHR
TRACE( "queue %p, present_info %p\n", queue, present_info );
- res = p_vkQueuePresentKHR( queue, &host_present_info, surfaces ); + res = p_vkQueuePresentKHR( queue, &host_present_info );
for (i = 0; i < present_info->swapchainCount; i++) { @@ -128,12 +128,11 @@ static void vulkan_init(void)
LOAD_FUNCPTR( vkGetDeviceProcAddr ); LOAD_FUNCPTR( vkGetInstanceProcAddr ); + LOAD_FUNCPTR( vkQueuePresentKHR ); #undef LOAD_FUNCPTR
vulkan_funcs.p_vkGetDeviceProcAddr = win32u_vkGetDeviceProcAddr; vulkan_funcs.p_vkGetInstanceProcAddr = win32u_vkGetInstanceProcAddr; - - p_vkQueuePresentKHR = vulkan_funcs.p_vkQueuePresentKHR; vulkan_funcs.p_vkQueuePresentKHR = win32u_vkQueuePresentKHR; }
diff --git a/dlls/winemac.drv/vulkan.c b/dlls/winemac.drv/vulkan.c index 55451b2b093..6863e965f72 100644 --- a/dlls/winemac.drv/vulkan.c +++ b/dlls/winemac.drv/vulkan.c @@ -81,7 +81,6 @@ static VkResult (*pvkCreateMetalSurfaceEXT)(VkInstance, const VkMetalSurfaceCrea static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *); static VkResult (*pvkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *, VkSurfaceCapabilities2KHR *); -static VkResult (*pvkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *);
static const struct vulkan_funcs vulkan_funcs;
@@ -235,12 +234,6 @@ static VkBool32 macdrv_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysical return VK_TRUE; }
-static VkResult macdrv_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *present_info, HWND *surfaces) -{ - TRACE("%p, %p\n", queue, present_info); - return pvkQueuePresentKHR(queue, present_info); -} - static const char *macdrv_get_host_surface_extension(void) { return pvkCreateMetalSurfaceEXT ? "VK_EXT_metal_surface" : "VK_MVK_macos_surface"; @@ -268,7 +261,7 @@ static const struct vulkan_funcs vulkan_funcs = NULL, NULL, macdrv_vkGetPhysicalDeviceWin32PresentationSupportKHR, - macdrv_vkQueuePresentKHR, + NULL,
macdrv_get_host_surface_extension, macdrv_wine_get_host_surface, @@ -289,7 +282,6 @@ UINT macdrv_VulkanInit(UINT version, void *vulkan_handle, struct vulkan_funcs *d LOAD_FUNCPTR(vkCreateMetalSurfaceEXT) LOAD_FUNCPTR(vkDestroySurfaceKHR) LOAD_FUNCPTR(vkDestroySwapchainKHR) - LOAD_FUNCPTR(vkQueuePresentKHR) #undef LOAD_FUNCPTR
*driver_funcs = vulkan_funcs; diff --git a/dlls/winewayland.drv/vulkan.c b/dlls/winewayland.drv/vulkan.c index cf80556b8e6..cc11fed2786 100644 --- a/dlls/winewayland.drv/vulkan.c +++ b/dlls/winewayland.drv/vulkan.c @@ -58,7 +58,6 @@ static VkResult (*pvkCreateWaylandSurfaceKHR)(VkInstance, const VkWaylandSurface static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *); static VkBool32 (*pvkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice, uint32_t, struct wl_display *); -static VkResult (*pvkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *);
static const struct vulkan_funcs vulkan_funcs;
@@ -220,13 +219,6 @@ static VkBool32 wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysica process_wayland.wl_display); }
-static VkResult wayland_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *present_info, HWND *surfaces) -{ - TRACE("%p, %p\n", queue, present_info); - - return pvkQueuePresentKHR(queue, present_info); -} - static const char *wayland_get_host_surface_extension(void) { return "VK_KHR_wayland_surface"; @@ -265,7 +257,6 @@ static const struct vulkan_funcs vulkan_funcs = .p_vkDestroySurfaceKHR = wayland_vkDestroySurfaceKHR, .p_vkDestroySwapchainKHR = wayland_vkDestroySwapchainKHR, .p_vkGetPhysicalDeviceWin32PresentationSupportKHR = wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR, - .p_vkQueuePresentKHR = wayland_vkQueuePresentKHR, .p_get_host_surface_extension = wayland_get_host_surface_extension, .p_wine_get_host_surface = wayland_wine_get_host_surface, .p_vulkan_surface_presented = wayland_vulkan_surface_presented, @@ -288,7 +279,6 @@ UINT WAYLAND_VulkanInit(UINT version, void *vulkan_handle, struct vulkan_funcs * LOAD_FUNCPTR(vkDestroySurfaceKHR); LOAD_FUNCPTR(vkDestroySwapchainKHR); LOAD_FUNCPTR(vkGetPhysicalDeviceWaylandPresentationSupportKHR); - LOAD_FUNCPTR(vkQueuePresentKHR); #undef LOAD_FUNCPTR
*driver_funcs = vulkan_funcs; diff --git a/dlls/winex11.drv/vulkan.c b/dlls/winex11.drv/vulkan.c index 35da6994075..d1e9afbac30 100644 --- a/dlls/winex11.drv/vulkan.c +++ b/dlls/winex11.drv/vulkan.c @@ -78,7 +78,6 @@ static VkResult (*pvkCreateXlibSurfaceKHR)(VkInstance, const VkXlibSurfaceCreate static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *); static VkBool32 (*pvkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice, uint32_t, Display *, VisualID); -static VkResult (*pvkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *);
static const struct vulkan_funcs vulkan_funcs;
@@ -252,12 +251,6 @@ static VkBool32 X11DRV_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysical default_visual.visual->visualid); }
-static VkResult X11DRV_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *present_info, HWND *surfaces) -{ - TRACE("%p, %p\n", queue, present_info); - return pvkQueuePresentKHR(queue, present_info); -} - static const char *X11DRV_get_host_surface_extension(void) { return "VK_KHR_xlib_surface"; @@ -285,7 +278,7 @@ static const struct vulkan_funcs vulkan_funcs = NULL, NULL, X11DRV_vkGetPhysicalDeviceWin32PresentationSupportKHR, - X11DRV_vkQueuePresentKHR, + NULL,
X11DRV_get_host_surface_extension, X11DRV_wine_get_host_surface, @@ -308,7 +301,6 @@ UINT X11DRV_VulkanInit( UINT version, void *vulkan_handle, struct vulkan_funcs * LOAD_FUNCPTR( vkDestroySurfaceKHR ); LOAD_FUNCPTR( vkDestroySwapchainKHR ); LOAD_FUNCPTR( vkGetPhysicalDeviceXlibPresentationSupportKHR ); - LOAD_FUNCPTR( vkQueuePresentKHR ); #undef LOAD_FUNCPTR
*driver_funcs = vulkan_funcs;
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/vulkan.c | 2 -- dlls/winemac.drv/vulkan.c | 14 -------------- dlls/winevulkan/make_vulkan | 1 - dlls/winewayland.drv/vulkan.c | 15 --------------- dlls/winex11.drv/vulkan.c | 14 -------------- include/wine/vulkan_driver.h | 3 +-- 6 files changed, 1 insertion(+), 48 deletions(-)
diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index 6f3fcfa7f85..f4d7409f13b 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -71,7 +71,6 @@ static void *win32u_vkGetDeviceProcAddr( VkDevice device, const char *name ) TRACE( "device %p, name %s\n", device, debugstr_a(name) );
if (!strcmp( name, "vkCreateSwapchainKHR" )) return vulkan_funcs.p_vkCreateSwapchainKHR; - if (!strcmp( name, "vkDestroySwapchainKHR" )) return vulkan_funcs.p_vkDestroySwapchainKHR; if (!strcmp( name, "vkGetDeviceProcAddr" )) return win32u_vkGetDeviceProcAddr; if (!strcmp( name, "vkQueuePresentKHR" )) return vulkan_funcs.p_vkQueuePresentKHR;
@@ -91,7 +90,6 @@ static void *win32u_vkGetInstanceProcAddr( VkInstance instance, const char *name
/* vkGetInstanceProcAddr also loads any children of instance, so device functions as well. */ if (!strcmp( name, "vkCreateSwapchainKHR" )) return vulkan_funcs.p_vkCreateSwapchainKHR; - if (!strcmp( name, "vkDestroySwapchainKHR" )) return vulkan_funcs.p_vkDestroySwapchainKHR; if (!strcmp( name, "vkGetDeviceProcAddr" )) return win32u_vkGetDeviceProcAddr; if (!strcmp( name, "vkQueuePresentKHR" )) return vulkan_funcs.p_vkQueuePresentKHR;
diff --git a/dlls/winemac.drv/vulkan.c b/dlls/winemac.drv/vulkan.c index 6863e965f72..a82e38734fe 100644 --- a/dlls/winemac.drv/vulkan.c +++ b/dlls/winemac.drv/vulkan.c @@ -79,7 +79,6 @@ static VkResult (*pvkCreateSwapchainKHR)(VkDevice, const VkSwapchainCreateInfoKH static VkResult (*pvkCreateMacOSSurfaceMVK)(VkInstance, const VkMacOSSurfaceCreateInfoMVK*, const VkAllocationCallbacks *, VkSurfaceKHR *); static VkResult (*pvkCreateMetalSurfaceEXT)(VkInstance, const VkMetalSurfaceCreateInfoEXT*, const VkAllocationCallbacks *, VkSurfaceKHR *); static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); -static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *); static VkResult (*pvkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *, VkSurfaceCapabilities2KHR *);
static const struct vulkan_funcs vulkan_funcs; @@ -215,17 +214,6 @@ static void macdrv_vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface wine_vk_surface_destroy(instance, mac_surface); }
-static void macdrv_vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, - const VkAllocationCallbacks *allocator) -{ - TRACE("%p, 0x%s %p\n", device, wine_dbgstr_longlong(swapchain), allocator); - - if (allocator) - FIXME("Support for allocation callbacks not implemented yet\n"); - - pvkDestroySwapchainKHR(device, swapchain, NULL /* allocator */); -} - static VkBool32 macdrv_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice phys_dev, uint32_t index) { @@ -257,7 +245,6 @@ static const struct vulkan_funcs vulkan_funcs = macdrv_vkCreateSwapchainKHR, macdrv_vkCreateWin32SurfaceKHR, macdrv_vkDestroySurfaceKHR, - macdrv_vkDestroySwapchainKHR, NULL, NULL, macdrv_vkGetPhysicalDeviceWin32PresentationSupportKHR, @@ -281,7 +268,6 @@ UINT macdrv_VulkanInit(UINT version, void *vulkan_handle, struct vulkan_funcs *d LOAD_FUNCPTR(vkCreateMacOSSurfaceMVK) LOAD_FUNCPTR(vkCreateMetalSurfaceEXT) LOAD_FUNCPTR(vkDestroySurfaceKHR) - LOAD_FUNCPTR(vkDestroySwapchainKHR) #undef LOAD_FUNCPTR
*driver_funcs = vulkan_funcs; diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index 2f7dec229ba..7ac112cd8ea 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -198,7 +198,6 @@ USER_DRIVER_FUNCS = { "vkCreateSwapchainKHR", "vkCreateWin32SurfaceKHR", "vkDestroySurfaceKHR", - "vkDestroySwapchainKHR", "vkGetDeviceProcAddr", "vkGetInstanceProcAddr", "vkGetPhysicalDeviceWin32PresentationSupportKHR", diff --git a/dlls/winewayland.drv/vulkan.c b/dlls/winewayland.drv/vulkan.c index cc11fed2786..55e8b25af46 100644 --- a/dlls/winewayland.drv/vulkan.c +++ b/dlls/winewayland.drv/vulkan.c @@ -56,7 +56,6 @@ typedef struct VkWaylandSurfaceCreateInfoKHR static VkResult (*pvkCreateSwapchainKHR)(VkDevice, const VkSwapchainCreateInfoKHR *, const VkAllocationCallbacks *, VkSwapchainKHR *); static VkResult (*pvkCreateWaylandSurfaceKHR)(VkInstance, const VkWaylandSurfaceCreateInfoKHR *, const VkAllocationCallbacks *, VkSurfaceKHR *); static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); -static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *); static VkBool32 (*pvkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice, uint32_t, struct wl_display *);
static const struct vulkan_funcs vulkan_funcs; @@ -198,18 +197,6 @@ static void wayland_vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surfac wine_vk_surface_destroy(wine_vk_surface); }
-static void wayland_vkDestroySwapchainKHR(VkDevice device, - VkSwapchainKHR swapchain, - const VkAllocationCallbacks *allocator) -{ - TRACE("%p, 0x%s %p\n", device, wine_dbgstr_longlong(swapchain), allocator); - - if (allocator) - FIXME("Support for allocation callbacks not implemented yet\n"); - - pvkDestroySwapchainKHR(device, swapchain, NULL /* allocator */); -} - static VkBool32 wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice phys_dev, uint32_t index) { @@ -255,7 +242,6 @@ static const struct vulkan_funcs vulkan_funcs = .p_vkCreateSwapchainKHR = wayland_vkCreateSwapchainKHR, .p_vkCreateWin32SurfaceKHR = wayland_vkCreateWin32SurfaceKHR, .p_vkDestroySurfaceKHR = wayland_vkDestroySurfaceKHR, - .p_vkDestroySwapchainKHR = wayland_vkDestroySwapchainKHR, .p_vkGetPhysicalDeviceWin32PresentationSupportKHR = wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR, .p_get_host_surface_extension = wayland_get_host_surface_extension, .p_wine_get_host_surface = wayland_wine_get_host_surface, @@ -277,7 +263,6 @@ UINT WAYLAND_VulkanInit(UINT version, void *vulkan_handle, struct vulkan_funcs * LOAD_FUNCPTR(vkCreateSwapchainKHR); LOAD_FUNCPTR(vkCreateWaylandSurfaceKHR); LOAD_FUNCPTR(vkDestroySurfaceKHR); - LOAD_FUNCPTR(vkDestroySwapchainKHR); LOAD_FUNCPTR(vkGetPhysicalDeviceWaylandPresentationSupportKHR); #undef LOAD_FUNCPTR
diff --git a/dlls/winex11.drv/vulkan.c b/dlls/winex11.drv/vulkan.c index d1e9afbac30..9ea8676693e 100644 --- a/dlls/winex11.drv/vulkan.c +++ b/dlls/winex11.drv/vulkan.c @@ -76,7 +76,6 @@ typedef struct VkXlibSurfaceCreateInfoKHR static VkResult (*pvkCreateSwapchainKHR)(VkDevice, const VkSwapchainCreateInfoKHR *, const VkAllocationCallbacks *, VkSwapchainKHR *); static VkResult (*pvkCreateXlibSurfaceKHR)(VkInstance, const VkXlibSurfaceCreateInfoKHR *, const VkAllocationCallbacks *, VkSurfaceKHR *); static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); -static void (*pvkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *); static VkBool32 (*pvkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice, uint32_t, Display *, VisualID);
static const struct vulkan_funcs vulkan_funcs; @@ -231,17 +230,6 @@ static void X11DRV_vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface wine_vk_surface_release(x11_surface); }
-static void X11DRV_vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, - const VkAllocationCallbacks *allocator) -{ - TRACE("%p, 0x%s %p\n", device, wine_dbgstr_longlong(swapchain), allocator); - - if (allocator) - FIXME("Support for allocation callbacks not implemented yet\n"); - - pvkDestroySwapchainKHR(device, swapchain, NULL /* allocator */); -} - static VkBool32 X11DRV_vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice phys_dev, uint32_t index) { @@ -274,7 +262,6 @@ static const struct vulkan_funcs vulkan_funcs = X11DRV_vkCreateSwapchainKHR, X11DRV_vkCreateWin32SurfaceKHR, X11DRV_vkDestroySurfaceKHR, - X11DRV_vkDestroySwapchainKHR, NULL, NULL, X11DRV_vkGetPhysicalDeviceWin32PresentationSupportKHR, @@ -299,7 +286,6 @@ UINT X11DRV_VulkanInit( UINT version, void *vulkan_handle, struct vulkan_funcs * LOAD_FUNCPTR( vkCreateSwapchainKHR ); LOAD_FUNCPTR( vkCreateXlibSurfaceKHR ); LOAD_FUNCPTR( vkDestroySurfaceKHR ); - LOAD_FUNCPTR( vkDestroySwapchainKHR ); LOAD_FUNCPTR( vkGetPhysicalDeviceXlibPresentationSupportKHR ); #undef LOAD_FUNCPTR
diff --git a/include/wine/vulkan_driver.h b/include/wine/vulkan_driver.h index aa6db2d5e19..4119cb41aa4 100644 --- a/include/wine/vulkan_driver.h +++ b/include/wine/vulkan_driver.h @@ -21,7 +21,7 @@ #define __WINE_VULKAN_DRIVER_H
/* Wine internal vulkan driver version, needs to be bumped upon vulkan_funcs changes. */ -#define WINE_VULKAN_DRIVER_VERSION 25 +#define WINE_VULKAN_DRIVER_VERSION 26
struct vulkan_funcs { @@ -32,7 +32,6 @@ struct vulkan_funcs VkResult (*p_vkCreateSwapchainKHR)(VkDevice, const VkSwapchainCreateInfoKHR *, const VkAllocationCallbacks *, VkSwapchainKHR *); VkResult (*p_vkCreateWin32SurfaceKHR)(VkInstance, const VkWin32SurfaceCreateInfoKHR *, const VkAllocationCallbacks *, VkSurfaceKHR *); void (*p_vkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); - void (*p_vkDestroySwapchainKHR)(VkDevice, VkSwapchainKHR, const VkAllocationCallbacks *); void * (*p_vkGetDeviceProcAddr)(VkDevice, const char *); void * (*p_vkGetInstanceProcAddr)(VkInstance, const char *); VkBool32 (*p_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice, uint32_t);
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/vulkan.c | 2 -- dlls/winemac.drv/vulkan.c | 20 -------------------- dlls/winevulkan/make_vulkan | 1 - dlls/winevulkan/vulkan.c | 2 +- dlls/winewayland.drv/vulkan.c | 23 ----------------------- dlls/winex11.drv/vulkan.c | 23 ----------------------- include/wine/vulkan_driver.h | 3 +-- 7 files changed, 2 insertions(+), 72 deletions(-)
diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index f4d7409f13b..b29a0edee0f 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -70,7 +70,6 @@ static void *win32u_vkGetDeviceProcAddr( VkDevice device, const char *name ) { TRACE( "device %p, name %s\n", device, debugstr_a(name) );
- if (!strcmp( name, "vkCreateSwapchainKHR" )) return vulkan_funcs.p_vkCreateSwapchainKHR; if (!strcmp( name, "vkGetDeviceProcAddr" )) return win32u_vkGetDeviceProcAddr; if (!strcmp( name, "vkQueuePresentKHR" )) return vulkan_funcs.p_vkQueuePresentKHR;
@@ -89,7 +88,6 @@ static void *win32u_vkGetInstanceProcAddr( VkInstance instance, const char *name if (!strcmp( name, "vkGetPhysicalDeviceWin32PresentationSupportKHR" )) return vulkan_funcs.p_vkGetPhysicalDeviceWin32PresentationSupportKHR;
/* vkGetInstanceProcAddr also loads any children of instance, so device functions as well. */ - if (!strcmp( name, "vkCreateSwapchainKHR" )) return vulkan_funcs.p_vkCreateSwapchainKHR; if (!strcmp( name, "vkGetDeviceProcAddr" )) return win32u_vkGetDeviceProcAddr; if (!strcmp( name, "vkQueuePresentKHR" )) return vulkan_funcs.p_vkQueuePresentKHR;
diff --git a/dlls/winemac.drv/vulkan.c b/dlls/winemac.drv/vulkan.c index a82e38734fe..ceae7714a60 100644 --- a/dlls/winemac.drv/vulkan.c +++ b/dlls/winemac.drv/vulkan.c @@ -75,7 +75,6 @@ typedef struct VkMetalSurfaceCreateInfoEXT const void *pLayer; /* CAMetalLayer */ } VkMetalSurfaceCreateInfoEXT;
-static VkResult (*pvkCreateSwapchainKHR)(VkDevice, const VkSwapchainCreateInfoKHR *, const VkAllocationCallbacks *, VkSwapchainKHR *); static VkResult (*pvkCreateMacOSSurfaceMVK)(VkInstance, const VkMacOSSurfaceCreateInfoMVK*, const VkAllocationCallbacks *, VkSurfaceKHR *); static VkResult (*pvkCreateMetalSurfaceEXT)(VkInstance, const VkMetalSurfaceCreateInfoEXT*, const VkAllocationCallbacks *, VkSurfaceKHR *); static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); @@ -101,23 +100,6 @@ static void wine_vk_surface_destroy(VkInstance instance, struct wine_vk_surface free(surface); }
-static VkResult macdrv_vkCreateSwapchainKHR(VkDevice device, - const VkSwapchainCreateInfoKHR *create_info, - const VkAllocationCallbacks *allocator, VkSwapchainKHR *swapchain) -{ - VkSwapchainCreateInfoKHR create_info_host; - TRACE("%p %p %p %p\n", device, create_info, allocator, swapchain); - - if (allocator) - FIXME("Support for allocation callbacks not implemented yet\n"); - - create_info_host = *create_info; - create_info_host.surface = surface_from_handle(create_info->surface)->host_surface; - - return pvkCreateSwapchainKHR(device, &create_info_host, NULL /* allocator */, - swapchain); -} - static VkResult macdrv_vkCreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *create_info, const VkAllocationCallbacks *allocator, VkSurfaceKHR *surface) @@ -242,7 +224,6 @@ static void macdrv_vulkan_surface_presented(HWND hwnd, VkResult result)
static const struct vulkan_funcs vulkan_funcs = { - macdrv_vkCreateSwapchainKHR, macdrv_vkCreateWin32SurfaceKHR, macdrv_vkDestroySurfaceKHR, NULL, @@ -264,7 +245,6 @@ UINT macdrv_VulkanInit(UINT version, void *vulkan_handle, struct vulkan_funcs *d }
#define LOAD_FUNCPTR(f) if ((p##f = dlsym(vulkan_handle, #f)) == NULL) return STATUS_PROCEDURE_NOT_FOUND; - LOAD_FUNCPTR(vkCreateSwapchainKHR) LOAD_FUNCPTR(vkCreateMacOSSurfaceMVK) LOAD_FUNCPTR(vkCreateMetalSurfaceEXT) LOAD_FUNCPTR(vkDestroySurfaceKHR) diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index 7ac112cd8ea..64507a9d2a4 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -195,7 +195,6 @@ FUNCTION_OVERRIDES = {
# functions for which a user driver entry must be generated USER_DRIVER_FUNCS = { - "vkCreateSwapchainKHR", "vkCreateWin32SurfaceKHR", "vkDestroySurfaceKHR", "vkGetDeviceProcAddr", diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index ab757e19a61..4221b7066e6 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -1695,7 +1695,7 @@ VkResult wine_vkCreateSwapchainKHR(VkDevice device_handle, const VkSwapchainCrea return VK_ERROR_INITIALIZATION_FAILED; }
- if (surface) create_info_host.surface = surface->driver_surface; + if (surface) create_info_host.surface = surface->host_surface; if (old_swapchain) create_info_host.oldSwapchain = old_swapchain->host_swapchain;
/* Windows allows client rect to be empty, but host Vulkan often doesn't, adjust extents back to the host capabilities */ diff --git a/dlls/winewayland.drv/vulkan.c b/dlls/winewayland.drv/vulkan.c index 55e8b25af46..6e95fb4b0f6 100644 --- a/dlls/winewayland.drv/vulkan.c +++ b/dlls/winewayland.drv/vulkan.c @@ -53,7 +53,6 @@ typedef struct VkWaylandSurfaceCreateInfoKHR struct wl_surface *surface; } VkWaylandSurfaceCreateInfoKHR;
-static VkResult (*pvkCreateSwapchainKHR)(VkDevice, const VkSwapchainCreateInfoKHR *, const VkAllocationCallbacks *, VkSwapchainKHR *); static VkResult (*pvkCreateWaylandSurfaceKHR)(VkInstance, const VkWaylandSurfaceCreateInfoKHR *, const VkAllocationCallbacks *, VkSurfaceKHR *); static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); static VkBool32 (*pvkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice, uint32_t, struct wl_display *); @@ -95,26 +94,6 @@ static void wine_vk_surface_destroy(struct wine_vk_surface *wine_vk_surface) free(wine_vk_surface); }
-static VkResult wayland_vkCreateSwapchainKHR(VkDevice device, - const VkSwapchainCreateInfoKHR *create_info, - const VkAllocationCallbacks *allocator, - VkSwapchainKHR *swapchain) -{ - VkSwapchainCreateInfoKHR create_info_host; - struct wine_vk_surface *wine_vk_surface = wine_vk_surface_from_handle(create_info->surface); - - TRACE("%p %p %p %p\n", device, create_info, allocator, swapchain); - - if (allocator) - FIXME("Support for allocation callbacks not implemented yet\n"); - - create_info_host = *create_info; - create_info_host.surface = wine_vk_surface->host_surface; - - return pvkCreateSwapchainKHR(device, &create_info_host, NULL /* allocator */, - swapchain); -} - static VkResult wayland_vkCreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *create_info, const VkAllocationCallbacks *allocator, @@ -239,7 +218,6 @@ static void wayland_vulkan_surface_presented(HWND hwnd, VkResult result)
static const struct vulkan_funcs vulkan_funcs = { - .p_vkCreateSwapchainKHR = wayland_vkCreateSwapchainKHR, .p_vkCreateWin32SurfaceKHR = wayland_vkCreateWin32SurfaceKHR, .p_vkDestroySurfaceKHR = wayland_vkDestroySurfaceKHR, .p_vkGetPhysicalDeviceWin32PresentationSupportKHR = wayland_vkGetPhysicalDeviceWin32PresentationSupportKHR, @@ -260,7 +238,6 @@ UINT WAYLAND_VulkanInit(UINT version, void *vulkan_handle, struct vulkan_funcs * }
#define LOAD_FUNCPTR(f) if (!(p##f = dlsym(vulkan_handle, #f))) return STATUS_PROCEDURE_NOT_FOUND; - LOAD_FUNCPTR(vkCreateSwapchainKHR); LOAD_FUNCPTR(vkCreateWaylandSurfaceKHR); LOAD_FUNCPTR(vkDestroySurfaceKHR); LOAD_FUNCPTR(vkGetPhysicalDeviceWaylandPresentationSupportKHR); diff --git a/dlls/winex11.drv/vulkan.c b/dlls/winex11.drv/vulkan.c index 9ea8676693e..0a0a1365b3c 100644 --- a/dlls/winex11.drv/vulkan.c +++ b/dlls/winex11.drv/vulkan.c @@ -73,7 +73,6 @@ typedef struct VkXlibSurfaceCreateInfoKHR Window window; } VkXlibSurfaceCreateInfoKHR;
-static VkResult (*pvkCreateSwapchainKHR)(VkDevice, const VkSwapchainCreateInfoKHR *, const VkAllocationCallbacks *, VkSwapchainKHR *); static VkResult (*pvkCreateXlibSurfaceKHR)(VkInstance, const VkXlibSurfaceCreateInfoKHR *, const VkAllocationCallbacks *, VkSurfaceKHR *); static void (*pvkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); static VkBool32 (*pvkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice, uint32_t, Display *, VisualID); @@ -133,26 +132,6 @@ void vulkan_thread_detach(void) pthread_mutex_unlock(&vulkan_mutex); }
-static VkResult X11DRV_vkCreateSwapchainKHR(VkDevice device, - const VkSwapchainCreateInfoKHR *create_info, - const VkAllocationCallbacks *allocator, VkSwapchainKHR *swapchain) -{ - struct wine_vk_surface *x11_surface = surface_from_handle(create_info->surface); - VkSwapchainCreateInfoKHR create_info_host; - TRACE("%p %p %p %p\n", device, create_info, allocator, swapchain); - - if (allocator) - FIXME("Support for allocation callbacks not implemented yet\n"); - - if (!x11_surface->hwnd) - return VK_ERROR_SURFACE_LOST_KHR; - - create_info_host = *create_info; - create_info_host.surface = x11_surface->host_surface; - - return pvkCreateSwapchainKHR(device, &create_info_host, NULL /* allocator */, swapchain); -} - static VkResult X11DRV_vkCreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *create_info, const VkAllocationCallbacks *allocator, VkSurfaceKHR *surface) @@ -259,7 +238,6 @@ static void X11DRV_vulkan_surface_presented(HWND hwnd, VkResult result)
static const struct vulkan_funcs vulkan_funcs = { - X11DRV_vkCreateSwapchainKHR, X11DRV_vkCreateWin32SurfaceKHR, X11DRV_vkDestroySurfaceKHR, NULL, @@ -283,7 +261,6 @@ UINT X11DRV_VulkanInit( UINT version, void *vulkan_handle, struct vulkan_funcs * init_recursive_mutex( &vulkan_mutex );
#define LOAD_FUNCPTR( f ) if (!(p##f = dlsym( vulkan_handle, #f ))) return STATUS_PROCEDURE_NOT_FOUND; - LOAD_FUNCPTR( vkCreateSwapchainKHR ); LOAD_FUNCPTR( vkCreateXlibSurfaceKHR ); LOAD_FUNCPTR( vkDestroySurfaceKHR ); LOAD_FUNCPTR( vkGetPhysicalDeviceXlibPresentationSupportKHR ); diff --git a/include/wine/vulkan_driver.h b/include/wine/vulkan_driver.h index 4119cb41aa4..638b62c498c 100644 --- a/include/wine/vulkan_driver.h +++ b/include/wine/vulkan_driver.h @@ -21,7 +21,7 @@ #define __WINE_VULKAN_DRIVER_H
/* Wine internal vulkan driver version, needs to be bumped upon vulkan_funcs changes. */ -#define WINE_VULKAN_DRIVER_VERSION 26 +#define WINE_VULKAN_DRIVER_VERSION 27
struct vulkan_funcs { @@ -29,7 +29,6 @@ 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_vkCreateSwapchainKHR)(VkDevice, const VkSwapchainCreateInfoKHR *, const VkAllocationCallbacks *, VkSwapchainKHR *); VkResult (*p_vkCreateWin32SurfaceKHR)(VkInstance, const VkWin32SurfaceCreateInfoKHR *, const VkAllocationCallbacks *, VkSurfaceKHR *); void (*p_vkDestroySurfaceKHR)(VkInstance, VkSurfaceKHR, const VkAllocationCallbacks *); void * (*p_vkGetDeviceProcAddr)(VkDevice, const char *);
v2: Pass the hwnd array to win32u vkQueuePresent, add empty drivers vulkan_surface_presented callbacks instead of checking for NULL.
This merge request was approved by Jacek Caban.
On Thu Apr 11 13:05:13 2024 +0000, Rémi Bernon wrote:
CC @afrantzis wrt the wayland queue present changes, I think this should be similar to the current logic right?
Looks good to me from the Wayland driver perspective. Thanks!