You are not logged in.
Hi there,
i had this before and i was able to solve it just with a mesa downgrade: https://bbs.archlinux.org/viewtopic.php?id=311089
Today steam client made an update and here we are again. This time i dug a litte deeper....
System:
Arch Linux, GNOME 49.4 (mutter 49.4-1), Wayland
AMD RX 7900 XT
Valve Index
Mesa 25.2.7-1, SteamVR 2.15.5, steamvr-linux-fixes-layer-bin 0.1.3
What did NOT help:
Trying previous and beta version of steam VR
Mesa downgrade to 25.2.7
This time
steamvr-linux-fixes layer v0.1.3 (patches CreateDirectModeSurface, not FindDirectDisplayWayland)
Disabling steamvr-linux-fixes entirely
MESA_VK_DEVICE_SELECT
VK_ADD_LAYER_PATH=/usr/share/vulkan/implicit_layer.d
History of errors:
1. Error 307/303 vrcompositor segfault at CreateDirectModeSurface because mutter advertised two wp_drm_lease_device_v1 globals (card0 + card1). card0 (iGPU) had an empty connector → NULL deref.
Fixed by a systemd service that unbinds the iGPU before the display manager starts:
echo 0000:19:00.0 > /sys/bus/pci/drivers/amdgpu/unbind2. Error 498 now the only remaining issue.
What error 498 seems to be:
VRInitError_Compositor_GnomeNoDRMLeasing, CHmdWindowSDL::FindDirectDisplayWayland() returns nil.
The Wayland DRM lease protocol is working correctly: mutter advertises card1, sends connector_id=273, name="DP-2", description="VLV Index HMD". Everything is received by vrcompositor. No Vulkan call explicitly fails.
So i did some testing and identified a possible root cause:
FindDirectDisplayWayland() internally calls FindDirectDisplayVulkan(), which calls vkGetPhysicalDeviceDisplayPropertiesKHR. In Mesa 25.2.7, this returns count=0 because the internal WSI connector list is empty, it only gets populated after vkGetDrmDisplayEXT() has been called first. But FindDirectDisplayVulkan runs before vkGetDrmDisplayEXT is ever called, so it sees 0 displays and returns nil. The total time between UUID log and the "(nil)" result is ~0.016ms, consistent with an immediate early-exit, not a DRM ioctl call.
Confirmed with test programs:
BEFORE vkGetDrmDisplayEXT: vkGetDisplayPropertiesKHR → count=0
AFTER vkGetDrmDisplayEXT: vkGetDisplayPropertiesKHR → count=1vkGetDrmDisplayEXT(physdev, card1_fd, 273, &display) itself works fine and returns VK_SUCCESS with a valid handle, both with a directly-opened FD and with an FD transferred via SCM_RIGHTS (as Wayland does it). The Mesa display name returned is "monitor" (hardcoded).
Hypothesis for fix:
Mesa 26.x may pre-populate the WSI connector list at init time (by scanning DRM connectors), so vkGetDisplayPropertiesKHR returns results immediately without needing vkGetDrmDisplayEXT to be called first. Testing Mesa 26 + steamvr-linux-fixes (which patches the sampler crash introduced in Mesa 26) would be my next step.
Question:
Has anyone gotten error 498 working on GNOME with Mesa 26.x + steamvr-linux-fixes?
Is there another known workaround for the empty WSI display list at init time?
Or am i on a totally wrong path here?
I really dont want to give it up...
Last edited by prokrastinator (Yesterday 23:50:52)
Offline