Commit 6f9d2080 authored by Paul Gofman's avatar Paul Gofman Committed by Alexandre Julliard

winex11.drv: Handle X error from vkGetRandROutputDisplayEXT().

Nvidia implementation of vkGetRandROutputDisplayEXT() generates X exception when rrOutput is from different provider (or if rrOutput is just invalid). That can happen on certain multiple GPU configurations, on which Wine is currently unable to initialize display driver and thus create any window. According to Vulkan spec, vkGetRandROutputDisplayEXT is supposed to just return VK_NULL_HANDLE if there is no corresponding VkDisplayKHR. But it is probably better to workaround the problem to avoid long standing regression. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49407Signed-off-by: 's avatarPaul Gofman <pgofman@codeweavers.com> Signed-off-by: 's avatarLiam Middlebrook <lmiddlebrook@nvidia.com> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent 500a8135
...@@ -756,9 +756,11 @@ static void get_vulkan_device_uuid( GUID *uuid, const XRRProviderInfo *provider_ ...@@ -756,9 +756,11 @@ static void get_vulkan_device_uuid( GUID *uuid, const XRRProviderInfo *provider_
{ {
for (output_idx = 0; output_idx < provider_info->noutputs; ++output_idx) for (output_idx = 0; output_idx < provider_info->noutputs; ++output_idx)
{ {
X11DRV_expect_error( gdi_display, XRandRErrorHandler, NULL );
vr = pvkGetRandROutputDisplayEXT( vk_physical_devices[device_idx], gdi_display, vr = pvkGetRandROutputDisplayEXT( vk_physical_devices[device_idx], gdi_display,
provider_info->outputs[output_idx], &vk_display ); provider_info->outputs[output_idx], &vk_display );
if (vr != VK_SUCCESS || vk_display == VK_NULL_HANDLE) XSync( gdi_display, FALSE );
if (X11DRV_check_error() || vr != VK_SUCCESS || vk_display == VK_NULL_HANDLE)
continue; continue;
memset( &id, 0, sizeof(id) ); memset( &id, 0, sizeof(id) );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment