protonscr

Display issues and crashes with multiple GPUs.

protonclosed
ValveSoftware/Proton#3765 · opened 2020-04-14 by jboero · updated 2026-10-08 · 3 comments · github
Jjboero 2020-04-14 github

This may be more of a Wine issue than Proton, but I just found out why no versions of Proton (4.x - 5.6) were working for me. This issue comes from part of a thread started here: https://github.com/ValveSoftware/Proton/issues/3224#issuecomment-612948434

I have a primary NVidia card and a secondary AMD card with no monitor attached. Any app starting that attempts to set resolution fails as the AMD card has no screen and thus no modes available. I finally found the answers in a D3D log. The only solution I've found is to physically remove the AMD device so everything defaults to my primary. Not sure if Wine is sorting GPU devices by alphabetical order or what but how frustrating...

Kkisak-valve maintainer 2020-04-14 github

Hello @jboero, you should be able to workaround this issue with VK_ICD_FILENAMES or https://github.com/aejsmith/vkdevicechooser (from https://github.com/ValveSoftware/Proton/issues/2870#issuecomment-510670875).

Jjboero 2020-04-23 github

Thanks I'll try it out later. Need to pass that env var through the maze of layered processes to the right one? Or is this global for dxvk?

DDaxAvalon 2026-10-07 github

I had a very similar issue:

Summary: winex11: under Xwayland with zero XRandR providers, the faked GPU is bound to the first
Vulkan device instead of the GPU driving the display, so all monitors land on a display-less GPU

Component: winex11.drv (fallback lives in win32u/sysparams.c)
Version: 11.0 (observed on Wine 11.0 staging as shipped in GE-Proton11-7; fallback code
confirmed present in upstream wine-11.0 source)
Platform: x86_64 Linux, Pop!_OS 24.04, COSMIC on Wayland, Xwayland

Hardware: two discrete GPUs. NVIDIA GeForce RTX 3080 Ti (01:00.0, nvidia 580.173.02) drives all
four monitors. AMD Radeon Pro Vega 20 (07:00.0, RADV, Mesa 26.1.6) has six DisplayPort
connectors, all disconnected. Xwayland runs on the NVIDIA device.

Symptom: D3D11 and D3D12 applications through DXVK render on the Vega and present fails every
frame (DXGI Present returns 0x80004005), giving a black window with working audio and cursor.
The application's own log shows it chose the Vega because DXVK reports every monitor attached
to that adapter and none to the NVIDIA adapter. Applications that select a GPU by name work.

Cause (from WINEDEBUG=+system,+xrandr during wineboot):
warn:xrandr:xrandr14_get_gpus XRandR implementation doesn't report any providers, faking one.
trace:system:add_gpu (null) 0000 0000 00000000 00 {00000000-0000-0000-0000-000000000000}
warn:system:find_gpu_info Using GPU pci_id 0x1002:0x66a0, uuid {00000000-0007-0000-0000-000000000000}, name "AMD Radeon Graphics (RADV VEGA20)"
trace:system:add_monitor 0 (0,0)-(3840,1080) ... (x4, all on this GPU)
trace:system:commit_display_devices adding vulkan-only gpu uuid {54a0c70c-...}, name "NVIDIA GeForce RTX 3080 Ti"

xrandr --listproviders reports 0 providers under Xwayland, so winex11 fakes a GPU with no
name, PCI ID, or UUID. In win32u add_gpu, find_gpu_info finds no UUID or PCI match and falls
back to list_head(&ctx->vulkan_gpus), which is the Vega. All monitors are attached to it. The
NVIDIA GPU is added afterward as a vulkan-only GPU with no monitors. Any D3D app using the
"adapter with outputs" heuristic therefore picks a GPU that cannot present.

Expected: when the display driver cannot identify the GPU, the fallback should prefer the
Vulkan device that can present to the display (e.g. match the DRM device Xwayland uses via
DRI3, or prefer the device that supports presentation to the surface), not the first
enumerated device.

Environment experiments (fresh prefixes, Wine GPU order read from the Display class registry keys):

  • no DRI_PRIME: AMD 0000, NVIDIA 0001
  • NODEVICE_SELECT=1: unchanged
  • __VK_LAYER_NV_optimus=NVIDIA_only: unchanged
  • MESA_VK_DEVICE_SELECT=10de:2208 (non-exclusive): unchanged
  • MESA_VK_DEVICE_SELECT=10de:2208! (exclusive): NVIDIA becomes 0000, monitors attach to it,
    apps render correctly. Only working workaround short of setting a GPU name per application.

Regression note: on Wine 10.0 (Proton 10, April 2026) DXVK listed the monitors under both
adapters, so name-based selection worked and the auto heuristic was less harmful. On Wine 11.0
the monitors appear only under the Vega.

Related threads

Proton versions

Launch options

Upstream links

Error codes