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.
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/vulkan.c | 18 ++++++++++++++++++ dlls/winevulkan/vulkan.c | 14 +++++++++++++- include/wine/vulkan_driver.h | 12 +++++++++++- 3 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index 6866dbcb076..54c0fde841e 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -24,6 +24,7 @@
#include "config.h"
+#include <assert.h> #include <dlfcn.h> #include <pthread.h>
@@ -43,9 +44,23 @@ WINE_DEFAULT_DEBUG_CHANNEL(vulkan); static void *vulkan_handle; static struct vulkan_funcs vulkan_funcs;
+static VkResult (*p_vkQueuePresentKHR)(VkQueue, const VkPresentInfoKHR *); static void *(*p_vkGetDeviceProcAddr)(VkDevice, const char *); static void *(*p_vkGetInstanceProcAddr)(VkInstance, const char *);
+static VkResult win32u_vkQueuePresentKHR( VkQueue queue, const VkPresentInfoKHR *present_info ) +{ + const VkPresentSurfacesInfoWine *surfaces_info = present_info->pNext; + VkPresentInfoKHR host_present_info = *present_info; + + TRACE( "queue %p, present_info %p\n", queue, present_info ); + + assert( surfaces_info && surfaces_info->sType == VK_STRUCTURE_TYPE_PRESENT_SURFACES_INFO_WINE ); + host_present_info.pNext = surfaces_info->pNext; + + return p_vkQueuePresentKHR( queue, &host_present_info ); +} + static void *win32u_vkGetDeviceProcAddr( VkDevice device, const char *name ) { TRACE( "device %p, name %s\n", device, debugstr_a(name) ); @@ -112,6 +127,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/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index 972de3cedaf..b915147e927 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -1739,7 +1739,9 @@ void wine_vkDestroySwapchainKHR(VkDevice device_handle, VkSwapchainKHR swapchain
VkResult wine_vkQueuePresentKHR(VkQueue queue_handle, const VkPresentInfoKHR *present_info) { + VkPresentSurfacesInfoWine surfaces_info = {.sType = VK_STRUCTURE_TYPE_PRESENT_SURFACES_INFO_WINE, .pNext = present_info->pNext}; 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; @@ -1747,16 +1749,25 @@ VkResult wine_vkQueuePresentKHR(VkQueue queue_handle, const VkPresentInfoKHR *pr 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; + present_info_host.pNext = &surfaces_info; + surfaces_info.swapchainCount = present_info_host.swapchainCount; + surfaces_info.pSurfaces = surfaces;
res = device->funcs.p_vkQueuePresentKHR(queue->host_queue, &present_info_host);
@@ -1786,6 +1797,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/include/wine/vulkan_driver.h b/include/wine/vulkan_driver.h index e707a56269c..d6002d88b80 100644 --- a/include/wine/vulkan_driver.h +++ b/include/wine/vulkan_driver.h @@ -21,7 +21,17 @@ #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 + +#define VK_STRUCTURE_TYPE_PRESENT_SURFACES_INFO_WINE (UINT)VK_STRUCTURE_TYPE_MAX_ENUM + 1 + +typedef struct VkPresentSurfacesInfoWine +{ + VkStructureType sType; + const void *pNext; + uint32_t swapchainCount; + HWND *pSurfaces; +} VkPresentSurfacesInfoWine;
struct vulkan_funcs {
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/vulkan.c | 12 +++++++++++- dlls/winewayland.drv/vulkan.c | 33 ++++++++++++++++++++++----------- include/wine/vulkan_driver.h | 4 +++- 3 files changed, 36 insertions(+), 13 deletions(-)
diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index 54c0fde841e..2ed70a95b2f 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -52,13 +52,23 @@ static VkResult win32u_vkQueuePresentKHR( VkQueue queue, const VkPresentInfoKHR { const VkPresentSurfacesInfoWine *surfaces_info = present_info->pNext; VkPresentInfoKHR host_present_info = *present_info; + VkResult res; + UINT i;
TRACE( "queue %p, present_info %p\n", queue, present_info );
assert( surfaces_info && surfaces_info->sType == VK_STRUCTURE_TYPE_PRESENT_SURFACES_INFO_WINE ); host_present_info.pNext = surfaces_info->pNext;
- return p_vkQueuePresentKHR( queue, &host_present_info ); + res = p_vkQueuePresentKHR( queue, &host_present_info ); + + for (i = 0; vulkan_funcs.p_vulkan_surface_presented && i < present_info->swapchainCount; i++) + { + VkResult swapchain_res = present_info->pResults ? present_info->pResults[i] : res; + vulkan_funcs.p_vulkan_surface_presented( surfaces_info->pSurfaces[i], swapchain_res ); + } + + return res; }
static void *win32u_vkGetDeviceProcAddr( VkDevice device, const char *name ) diff --git a/dlls/winewayland.drv/vulkan.c b/dlls/winewayland.drv/vulkan.c index 8fd13fa7761..ac1ecd58936 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/include/wine/vulkan_driver.h b/include/wine/vulkan_driver.h index d6002d88b80..e0475f007bd 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
#define VK_STRUCTURE_TYPE_PRESENT_SURFACES_INFO_WINE (UINT)VK_STRUCTURE_TYPE_MAX_ENUM + 1
@@ -51,6 +51,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 ac1ecd58936..e4fa2b473ac 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) { - 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 e4fa2b473ac..efa8c5d824f 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 | 3 +-- dlls/winemac.drv/vulkan.c | 10 +--------- dlls/winewayland.drv/vulkan.c | 10 ---------- dlls/winex11.drv/vulkan.c | 10 +--------- 4 files changed, 3 insertions(+), 30 deletions(-)
diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index 2ed70a95b2f..68bffd02f9c 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -133,12 +133,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 f32269c7237..bf8bad935fe 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) -{ - 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"; @@ -264,7 +257,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, @@ -284,7 +277,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 efa8c5d824f..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) -{ - 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 36edcffa997..b9b971669f2 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) -{ - 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"; @@ -281,7 +274,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, @@ -303,7 +296,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 68bffd02f9c..9dd20071658 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -76,7 +76,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;
@@ -96,7 +95,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 bf8bad935fe..fe7dab6d3e4 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) { @@ -253,7 +241,6 @@ static const struct vulkan_funcs vulkan_funcs = macdrv_vkCreateSwapchainKHR, macdrv_vkCreateWin32SurfaceKHR, macdrv_vkDestroySurfaceKHR, - macdrv_vkDestroySwapchainKHR, NULL, NULL, macdrv_vkGetPhysicalDeviceWin32PresentationSupportKHR, @@ -276,7 +263,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 b9b971669f2..193beec301d 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) { @@ -270,7 +258,6 @@ static const struct vulkan_funcs vulkan_funcs = X11DRV_vkCreateSwapchainKHR, X11DRV_vkCreateWin32SurfaceKHR, X11DRV_vkDestroySurfaceKHR, - X11DRV_vkDestroySwapchainKHR, NULL, NULL, X11DRV_vkGetPhysicalDeviceWin32PresentationSupportKHR, @@ -294,7 +281,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 e0475f007bd..e546a36012e 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
#define VK_STRUCTURE_TYPE_PRESENT_SURFACES_INFO_WINE (UINT)VK_STRUCTURE_TYPE_MAX_ENUM + 1
@@ -42,7 +42,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 9dd20071658..8d7b0d091d9 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -75,7 +75,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;
@@ -94,7 +93,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 fe7dab6d3e4..3a26c85b266 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) @@ -238,7 +220,6 @@ static VkSurfaceKHR macdrv_wine_get_host_surface(VkSurfaceKHR surface)
static const struct vulkan_funcs vulkan_funcs = { - macdrv_vkCreateSwapchainKHR, macdrv_vkCreateWin32SurfaceKHR, macdrv_vkDestroySurfaceKHR, NULL, @@ -259,7 +240,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 b915147e927..fd6e797ccef 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 193beec301d..c786057fd11 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) @@ -255,7 +234,6 @@ static VkSurfaceKHR X11DRV_wine_get_host_surface( VkSurfaceKHR surface )
static const struct vulkan_funcs vulkan_funcs = { - X11DRV_vkCreateSwapchainKHR, X11DRV_vkCreateWin32SurfaceKHR, X11DRV_vkDestroySurfaceKHR, NULL, @@ -278,7 +256,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 e546a36012e..6d2ca73429c 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
#define VK_STRUCTURE_TYPE_PRESENT_SURFACES_INFO_WINE (UINT)VK_STRUCTURE_TYPE_MAX_ENUM + 1
@@ -39,7 +39,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 *);
CC @afrantzis wrt the wayland queue present changes, I think this should be similar to the current logic right?
This merge request was closed by Rémi Bernon.