[PATCH v3 0/2] MR6948: Vulkan object rework hotfixes.
This allows 32-bit DXVK games (like NFS Underground) to work again after the recent Vulkan changes. -- v3: win32u: Make sure some Vulkan defines get defined. https://gitlab.winehq.org/wine/wine/-/merge_requests/6948
From: Aida Jonikienė <aidas957(a)gmail.com> 32-bit DXVK doesn't find the surface creation function without this. --- dlls/winevulkan/vulkan.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index f6de197f720..61b3a42d63f 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -2144,8 +2144,14 @@ NTSTATUS vk_is_available_instance_function32(void *arg) UINT32 instance; UINT32 name; } *params = arg; - struct vulkan_instance *instance = vulkan_instance_from_handle(UlongToPtr(params->instance)); - return !!vk_funcs->p_vkGetInstanceProcAddr(instance->host.instance, UlongToPtr(params->name)); + struct wine_instance *instance = wine_instance_from_handle(UlongToPtr(params->instance)); + + if (!strcmp(UlongToPtr(params->name), "vkCreateWin32SurfaceKHR")) + return instance->enable_win32_surface; + if (!strcmp(UlongToPtr(params->name), "vkGetPhysicalDeviceWin32PresentationSupportKHR")) + return instance->enable_win32_surface; + + return !!vk_funcs->p_vkGetInstanceProcAddr(instance->obj.host.instance, UlongToPtr(params->name)); } NTSTATUS vk_is_available_device_function32(void *arg) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6948
From: Aida Jonikienė <aidas957(a)gmail.com> The alignment of some Vulkan structs doesn't match the winevulkan Unix library otherwise (causing strange segfaults on 32-bit). --- dlls/win32u/d3dkmt.c | 2 -- dlls/win32u/ntuser_private.h | 4 ++++ dlls/win32u/vulkan.c | 5 ----- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/dlls/win32u/d3dkmt.c b/dlls/win32u/d3dkmt.c index 15b0b870b56..24a668a85b4 100644 --- a/dlls/win32u/d3dkmt.c +++ b/dlls/win32u/d3dkmt.c @@ -29,8 +29,6 @@ #include "ntgdi_private.h" #include "win32u_private.h" #include "ntuser_private.h" -#include "wine/vulkan.h" -#include "wine/vulkan_driver.h" WINE_DEFAULT_DEBUG_CHANNEL(vulkan); diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h index 6cc47dcada4..bef1ab0bcfa 100644 --- a/dlls/win32u/ntuser_private.h +++ b/dlls/win32u/ntuser_private.h @@ -26,7 +26,11 @@ #include "shellapi.h" #include "shlobj.h" #include "wine/list.h" + +#define VK_NO_PROTOTYPES +#define WINE_VK_HOST #include "wine/vulkan.h" +#include "wine/vulkan_driver.h" #define WM_POPUPSYSTEMMENU 0x0313 diff --git a/dlls/win32u/vulkan.c b/dlls/win32u/vulkan.c index ae6ab974a53..c676ae10e54 100644 --- a/dlls/win32u/vulkan.c +++ b/dlls/win32u/vulkan.c @@ -32,11 +32,6 @@ #include "win32u_private.h" #include "ntuser_private.h" -#define VK_NO_PROTOTYPES -#define WINE_VK_HOST -#include "wine/vulkan.h" -#include "wine/vulkan_driver.h" - WINE_DEFAULT_DEBUG_CHANNEL(vulkan); PFN_vkGetDeviceProcAddr p_vkGetDeviceProcAddr = NULL; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6948
On Tue Dec 3 11:58:23 2024 +0000, Jacek Caban wrote:
I was thinking about getting rid of `WINE_VK_HOST` and using `WINE_UNIX_LIB` in `vulkan.h` instead. We could also default to no prototypes for unixlibs too. I moved the Vulkan defines to a common place
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/6948#note_89561
On Tue Dec 3 13:19:17 2024 +0000, Aida Jonikienė wrote:
I moved the Vulkan defines to a common place Would you mind updating the MR to https://gitlab.winehq.org/rbernon/wine/-/commit/405484e1dae6681150998de20f1c... to implement what @jacek is suggesting?
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/6948#note_89562
participants (2)
-
Aida Jonikienė -
Rémi Bernon