And the other cleanup suggested in https://gitlab.winehq.org/wine/wine/-/merge_requests/5835.
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/d3dkmt.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/dlls/win32u/d3dkmt.c b/dlls/win32u/d3dkmt.c index a97ab5d3c33..d6eedc44a9b 100644 --- a/dlls/win32u/d3dkmt.c +++ b/dlls/win32u/d3dkmt.c @@ -65,7 +65,6 @@ static PFN_vkGetPhysicalDeviceMemoryProperties2KHR pvkGetPhysicalDeviceMemoryPro static PFN_vkGetPhysicalDeviceMemoryProperties pvkGetPhysicalDeviceMemoryProperties; static PFN_vkGetPhysicalDeviceProperties2KHR pvkGetPhysicalDeviceProperties2KHR; static PFN_vkEnumeratePhysicalDevices pvkEnumeratePhysicalDevices; -static const struct vulkan_funcs *vulkan_funcs;
static void d3dkmt_init_vulkan(void) { @@ -94,7 +93,6 @@ static void d3dkmt_init_vulkan(void) if ((vr = p_vkCreateInstance( &create_info, NULL, &d3dkmt_vk_instance ))) { WARN( "Failed to create a Vulkan instance, vr %d.\n", vr ); - vulkan_funcs = NULL; return; }
@@ -104,7 +102,7 @@ static void d3dkmt_init_vulkan(void) { \ WARN( "Failed to load " #f ".\n" ); \ p_vkDestroyInstance( d3dkmt_vk_instance, NULL ); \ - vulkan_funcs = NULL; \ + d3dkmt_vk_instance = NULL; \ return; \ } LOAD_VK_FUNC( vkEnumeratePhysicalDevices ) @@ -118,7 +116,7 @@ static BOOL d3dkmt_use_vulkan(void) { static pthread_once_t once = PTHREAD_ONCE_INIT; pthread_once( &once, d3dkmt_init_vulkan ); - return !!vulkan_funcs; + return !!d3dkmt_vk_instance; }
/* d3dkmt_lock must be held */
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winex11.drv/xrandr.c | 108 +++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 53 deletions(-)
diff --git a/dlls/winex11.drv/xrandr.c b/dlls/winex11.drv/xrandr.c index edad0712927..e68826fff90 100644 --- a/dlls/winex11.drv/xrandr.c +++ b/dlls/winex11.drv/xrandr.c @@ -48,10 +48,17 @@ WINE_DECLARE_DEBUG_CHANNEL(winediag); #include "wine/vulkan.h" #include "wine/vulkan_driver.h"
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR) + static void *xrandr_handle; static void *vulkan_handle; static void *(*p_vkGetInstanceProcAddr)(VkInstance, const char *);
+static VkInstance vk_instance; /* Vulkan instance for XRandR functions */ +static VkResult (*p_vkGetRandROutputDisplayEXT)( VkPhysicalDevice, Display *, RROutput, VkDisplayKHR * ); +static PFN_vkGetPhysicalDeviceProperties2KHR p_vkGetPhysicalDeviceProperties2KHR; +static PFN_vkEnumeratePhysicalDevices p_vkEnumeratePhysicalDevices; + #define MAKE_FUNCPTR(f) static typeof(f) * p##f; MAKE_FUNCPTR(XRRConfigCurrentConfiguration) MAKE_FUNCPTR(XRRConfigCurrentRate) @@ -142,6 +149,26 @@ sym_not_found:
static void vulkan_init_once(void) { + static const char *extensions[] = + { + VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, + VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, + "VK_EXT_acquire_xlib_display", + "VK_EXT_direct_mode_display", + "VK_KHR_display", + VK_KHR_SURFACE_EXTENSION_NAME, + }; + VkInstanceCreateInfo create_info = + { + .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, + .ppEnabledExtensionNames = extensions, + .enabledExtensionCount = ARRAY_SIZE(extensions), + }; + + PFN_vkDestroyInstance p_vkDestroyInstance; + PFN_vkCreateInstance p_vkCreateInstance; + VkResult vr; + if (!(vulkan_handle = dlopen( SONAME_LIBVULKAN, RTLD_NOW ))) { ERR( "Failed to load %s\n", SONAME_LIBVULKAN ); @@ -153,12 +180,33 @@ static void vulkan_init_once(void) { \ ERR( "Failed to find " #f "\n" ); \ dlclose( vulkan_handle ); \ - vulkan_handle = NULL; \ return; \ }
LOAD_FUNCPTR( vkGetInstanceProcAddr ); #undef LOAD_FUNCPTR + + p_vkCreateInstance = p_vkGetInstanceProcAddr( NULL, "vkCreateInstance" ); + if ((vr = p_vkCreateInstance( &create_info, NULL, &vk_instance ))) + { + WARN( "Failed to create a Vulkan instance, vr %d.\n", vr ); + return; + } + + p_vkDestroyInstance = p_vkGetInstanceProcAddr( vk_instance, "vkDestroyInstance" ); +#define LOAD_VK_FUNC(f) \ + if (!(p_##f = (void *)p_vkGetInstanceProcAddr( vk_instance, #f ))) \ + { \ + WARN("Failed to load " #f ".\n"); \ + p_vkDestroyInstance( vk_instance, NULL ); \ + vk_instance = NULL; \ + return; \ + } + + LOAD_VK_FUNC( vkEnumeratePhysicalDevices ) + LOAD_VK_FUNC( vkGetPhysicalDeviceProperties2KHR ) + LOAD_VK_FUNC( vkGetRandROutputDisplayEXT ) +#undef LOAD_VK_FUNC }
#else /* SONAME_LIBVULKAN */ @@ -174,7 +222,7 @@ static BOOL vulkan_init(void) { static pthread_once_t init_once = PTHREAD_ONCE_INIT; pthread_once( &init_once, vulkan_init_once ); - return !!vulkan_handle; + return !!vk_instance; }
static int XRandRErrorHandler(Display *dpy, XErrorEvent *event, void *arg) @@ -668,65 +716,20 @@ static BOOL is_crtc_primary( RECT primary, const XRRCrtcInfo *crtc ) crtc->y + crtc->height == primary.bottom; }
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR) - static BOOL get_gpu_properties_from_vulkan( struct x11drv_gpu *gpu, const XRRProviderInfo *provider_info, struct x11drv_gpu *prev_gpus, int prev_gpu_count ) { - static const char *extensions[] = - { - VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, - VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, - "VK_EXT_acquire_xlib_display", - "VK_EXT_direct_mode_display", - "VK_KHR_display", - VK_KHR_SURFACE_EXTENSION_NAME, - }; - VkResult (*pvkGetRandROutputDisplayEXT)( VkPhysicalDevice, Display *, RROutput, VkDisplayKHR * ); - PFN_vkGetPhysicalDeviceProperties2KHR pvkGetPhysicalDeviceProperties2KHR; - PFN_vkEnumeratePhysicalDevices pvkEnumeratePhysicalDevices; uint32_t device_count, device_idx, output_idx, i; - PFN_vkDestroyInstance pvkDestroyInstance = NULL; VkPhysicalDevice *vk_physical_devices = NULL; VkPhysicalDeviceProperties2 properties2; - PFN_vkCreateInstance pvkCreateInstance; - VkInstanceCreateInfo create_info; VkPhysicalDeviceIDProperties id; - VkInstance vk_instance = NULL; VkDisplayKHR vk_display; BOOL ret = FALSE; VkResult vr;
if (!vulkan_init()) goto done;
- memset( &create_info, 0, sizeof(create_info) ); - create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; - create_info.enabledExtensionCount = ARRAY_SIZE(extensions); - create_info.ppEnabledExtensionNames = extensions; - -#define LOAD_VK_FUNC(f) \ - if (!(p##f = (void *)p_vkGetInstanceProcAddr( vk_instance, #f ))) \ - { \ - WARN("Failed to load " #f ".\n"); \ - goto done; \ - } - - LOAD_VK_FUNC( vkCreateInstance ) - - vr = pvkCreateInstance( &create_info, NULL, &vk_instance ); - if (vr != VK_SUCCESS) - { - WARN( "Failed to create a Vulkan instance, vr %d.\n", vr ); - goto done; - } - - LOAD_VK_FUNC(vkEnumeratePhysicalDevices) - LOAD_VK_FUNC(vkGetPhysicalDeviceProperties2KHR) - LOAD_VK_FUNC(vkGetRandROutputDisplayEXT) - LOAD_VK_FUNC(vkDestroyInstance) -#undef LOAD_VK_FUNC - - vr = pvkEnumeratePhysicalDevices( vk_instance, &device_count, NULL ); + vr = p_vkEnumeratePhysicalDevices( vk_instance, &device_count, NULL ); if (vr != VK_SUCCESS || !device_count) { WARN("No Vulkan device found, vr %d, device_count %d.\n", vr, device_count); @@ -736,7 +739,7 @@ static BOOL get_gpu_properties_from_vulkan( struct x11drv_gpu *gpu, const XRRPro if (!(vk_physical_devices = calloc( device_count, sizeof(*vk_physical_devices) ))) goto done;
- vr = pvkEnumeratePhysicalDevices( vk_instance, &device_count, vk_physical_devices ); + vr = p_vkEnumeratePhysicalDevices( vk_instance, &device_count, vk_physical_devices ); if (vr != VK_SUCCESS) { WARN("vkEnumeratePhysicalDevices failed, vr %d.\n", vr); @@ -749,8 +752,8 @@ static BOOL get_gpu_properties_from_vulkan( struct x11drv_gpu *gpu, const XRRPro { for (output_idx = 0; output_idx < provider_info->noutputs; ++output_idx) { - vr = pvkGetRandROutputDisplayEXT( vk_physical_devices[device_idx], gdi_display, - provider_info->outputs[output_idx], &vk_display ); + vr = p_vkGetRandROutputDisplayEXT( vk_physical_devices[device_idx], gdi_display, + provider_info->outputs[output_idx], &vk_display ); if (vr != VK_SUCCESS || vk_display == VK_NULL_HANDLE) continue;
@@ -759,7 +762,7 @@ static BOOL get_gpu_properties_from_vulkan( struct x11drv_gpu *gpu, const XRRPro properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; properties2.pNext = &id;
- pvkGetPhysicalDeviceProperties2KHR( vk_physical_devices[device_idx], &properties2 ); + p_vkGetPhysicalDeviceProperties2KHR( vk_physical_devices[device_idx], &properties2 ); for (i = 0; i < prev_gpu_count; ++i) { if (!memcmp( &prev_gpus[i].vulkan_uuid, &id.deviceUUID, sizeof(id.deviceUUID) )) @@ -788,7 +791,6 @@ static BOOL get_gpu_properties_from_vulkan( struct x11drv_gpu *gpu, const XRRPro
done: free( vk_physical_devices ); - if (vk_instance && pvkDestroyInstance) pvkDestroyInstance( vk_instance, NULL ); return ret; }
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=146401
Your paranoid android.
=== debian11b (64 bit WoW report) ===
kernel32: comm.c:1574: Test failed: AbortWaitCts hComPortEvent failed comm.c:1586: Test failed: Unexpected time 1001, expected around 500