Hardware #
GPU support matrix #
| Manufacturer/ Hardware | Driver | VR Support | Reprojection Support | Hybrid Graphics Support | Notes |
|---|---|---|---|---|---|
| Nvidia >= 16XX Series GPU | Nvidia (Open Module) | ✅ Acceptable | ⚠️ Partial | ✅ Supported | Requires driver version 565+. By default there will be noticeable present latency - see the notes below. |
| Nvidia <= 10XX Series GPU | Nvidia (Closed Source Module) | ✅ Acceptable | ⚠️ Partial | ✅ Supported | Requires driver version 565+. No Valve Index support. |
| Nvidia/ Any | Nouveau (Open Source) | ⚠️ Limited | ❌ Not Viable | ✅ Supported | Cannot reproject due to lack of realtime compute shader support needed by Monado. Lacks DisplayPort audio. Not recommended for VR. |
| AMD RDNA generation GPU | RADV (Open Source) | ✅ Excellent | ✅ Robust (RDNA+) | ✅ Supported | Recommended for wired VR. |
| AMD GCN generation GPU | RADV (Open Source) | ✅ Excellent | ⚠️ Limited | ✅ Supported | Not recommended for wired VR. Pre-RDNA GPUs have functional but less robust reprojection. |
| AMD/ Any | AMDVLK (Open Source) | ❌ Not Viable | ❌ Not Viable | ❌ N/A | RADV preferred in all circumstances. Unable to drive wired HMDs. Do not use. Do not seek support. |
| AMD/ Any | AMDGPU PRO (Closed Source) | ❌ Not Viable | ❌ Not Viable | ❌ N/A | RADV preferred in all circumstances. Unable to drive wired HMDs. Do not use. Do not seek support. |
| Intel/ Any | i915 (Open Source) | ⚡ Functional | ✅ Robust (Limited testing) | ✅ Supported | Relatively old driver. SteamVR/ALVR doesn’t start. WiVRn tested working. Graphical glitches in some games. |
| Intel/ Any | Intel/Xe (Open Source) | ❌ No wired HMDs | ✅ Robust (Limited testing) | ✅ Supported | Lacks direct mode implementation in driver, unable to drive wired HMDs. WiVRn tested working. Graphical glitches in some games. |
Notes:
- AMD GPU users: Make sure you are using the RADV Vulkan driver. AMDVLK is deprecated, is unable to lease displays when using SteamVR/Monado, and will cause video corruption on WiVRn.
- Monado NVIDIA Wired Latency Fix: Wired HMD users should set environment variables
XRT_COMPOSITOR_USE_PRESENT_WAIT=1andU_PACING_COMP_TIME_FRACTION_PERCENT=90. There are still notable frametime issues in the driver that may result in stutter, but this should vastly improve the experience. This does not work on SteamVR. - For Nvidia proprietary drivers older than 565, (please try to update!), the vulkan-layers must be installed in order to not crash: AUR・Fedora
- Wired HMDs on Intel Arc GPUs: Only DisplayPort-based HMDs work, only with i915 driver. Tested: A580, A770 with HP Reverb G2 (OK), Acer AH101 (FAIL).
- Direct Display Mode doesn’t work with HDMI-based HMDs.
- Xe driver currently doesn’t support Direct Display Mode at all.
- Audio over DisplayPort is known to temporarily cut out whenever new audio sources spring up on PipeWire without a fix to add ALSA headroom.
- This fix’s default values adds a lot of audio latency to the entire system. If you’re someone who is sensitive to audio latency, you can try changing period-size=64 and headroom=512. If audio continues to cut off, double these values.
- Also, this fix will change the latency of all audio output devices. To tweak the audio output latency of your HMD only, which is usually sufficient to prevent cutouts, use
pactl list sinksto identify the Sink Name that your HMD is currently connected to, and edit the headroom fix file by changing thenode.name. - For example:
node.name = "alsa_output.pci-0000_03_00.1.hdmi-stereo-extra2"(not a typo, it’s still connected via DisplayPort)
XR Devices #
A non-comprehensive table of various VR/XR devices and the drivers that support them. Note that wired headset experiences with Nvidia GPUs will be affected by the DRM lease presentation latency issue.
| Device | SteamVR | Monado | WiVRn |
|---|---|---|---|
| PC VR | |||
| Valve Index | ✅ | ✅ | ❌ |
| HTC Vive | ✅ | ✅ | ❌ |
| HTC Vive Pro | ✅ | ✅ | ❌ |
| HTC Vive Pro Eye | ✅ | ✅ | ❌ |
| HTC Vive Pro 2 | ✅ (custom driver and patches) | ✅ (With two kernel patches 1 2, AMD GPUs or Nvidia driver 580+ open kernel modules.) | – |
| Bigscreen Beyond | ✅ (with kernel patch for <= 6.14 or with the patch for >= 6.15, AMD GPUs or Nvidia driver 580+ open kernel modules.) | ✅ (with kernel patch for <= 6.14 or with the patch for >= 6.15, AMD GPUs or Nvidia driver 580+ open kernel modules.) | – |
| Bigscreen Beyond 2/e | ✅ (with kernel patch for <= 6.14 or with the patch for >= 6.15, AMD GPUs or Nvidia driver 580+ open kernel modules.) | ✅ (with kernel patch for <= 6.14 or with the patch for >= 6.15, AMD GPUs or Nvidia driver 580+ open kernel modules.) | – |
| Somnium VR1 | ⚠️ Rumored successful internal test by Somnium. | ⚠️ Rumored successful internal test by Somnium. | ❌ |
| VRgineers XTAL | ? | ? | ? |
| StarVR One | ? | ? | ? |
| Varjo VR-1 | ? | ? | ? |
| Varjo VR-2 | ? | ? | ? |
| Varjo VR-3 | ? | ? | ? |
| Pimax 4K | ❌ (Planned) | 🚧 (WIP, with kernel patches, Nvidia requires patching EDID.) | ❌ |
| Pimax 5K Plus | ❌ (Planned) | ✅ (WIP, with kernel patches, Nvidia requires patching EDID.) | ❌ |
| Pimax 5K XR | ❌ (Planned) | ✅ (WIP, with kernel patches, Nvidia requires patching EDID.) | ❌ |
| Pimax 5K SUPER | ❌ (Planned) | ✅ (WIP, with kernel patches, Nvidia requires patching EDID.) | ❌ |
| Pimax 8K | ❌ (Planned) | ✅ (WIP, with kernel patches, Nvidia requires patching EDID.) | ❌ |
| Pimax Vision 8K X | ❌ (Planned) | ✅ (WIP, with kernel patches.) | ❌ |
| Pimax Vision 8K PLUS | ❌ (Planned) | ✅ (WIP, with kernel patches, Nvidia requires patching EDID.) | ❌ |
| Lenovo Explorer | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | ❌ |
| Acer AH101 | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | ❌ |
| Dell Visor | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | ❌ |
| HP WMR headset | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | ❌ |
| Samsung Odyssey | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | ❌ |
| Asus HC102 | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | ❌ |
| Samsung Odyssey+ | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | ❌ |
| HP Reverb | ✅ (Monado SteamVR plugin, 60Hz only mode on Nvidia) | ✅ (experimental 6dof controllers, 60Hz only mode on Nvidia) | ❌ |
| Acer OJO 500 | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | ❌ |
| HP Reverb G2 | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | ❌ |
| Oculus Rift CV1 | ✅ (OpenHMD SteamVR plugin) | ✅ (OpenHMD plugin based support) | ❌ |
| Oculus Rift S | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | ❌ |
| Standalone | |||
| Quest | ✅ (via ALVR) | – | ✅ |
| Quest 2 | ✅ (via ALVR) | – | ✅ |
| Quest Pro | ✅ (via ALVR) | – | ✅ |
| Quest 3 | ✅ (via ALVR) | – | ✅ |
| Pico 4 | ✅ (via ALVR) | – | ✅ |
| Pico Neo 3 | ✅ (via ALVR) | – | ✅ |
| HTC Vive Focus 3 | ✅ (via ALVR) | – | ✅ |
| HTC Vive XR Elite | ✅ (via ALVR) | – | ✅ |
| Lynx R1 | ✅ (via ALVR) | – | ✅ |
| Apple Vision Pro | ✅ (via ALVR) | – | ❌ |
| Trackers | |||
| Vive/Tundra trackers | ✅ (native or spacecal) | ✅ (native or motoc) | ✅ (motoc) |
| SlimeVR trackers | ✅ | ✅ (OSC + experimental driver) | ✅ |
| Project Babble | ✅ (OscAvMgr or VRCFT.Avalonia) | ✅ (OscAvMgr or VRCFT.Avalonia) | ✅ (OscAvMgr or VRCFT.Avalonia) |
| Eyetrack VR | ✅ (OscAvMgr or VRCFT.Avalonia) | ✅ (OscAvMgr or VRCFT.Avalonia) | ✅ (OscAvMgr or VRCFT.Avalonia) |
| Mercury Handtrack | ❌ | ✅ (no steamvr_lh driver support) | ❌ |
| Ultraleap v1 | ? | ✅ (with openxr-layer-ultraleap) |
? |
| Lucid VR Gloves | ? | ✅ (survive driver only) | ❌ |
| Kinect FBT | ✅ | ✅ (experimental) | 🚧 |
| Standable FBT | ❌ | ❌ | ❌ |
| Razer Hydra | ✅ (Monado SteamVR plugin) | ✅ | ❌ |
Vive Pro quirks #
- The Vive Pro microphone’s sample rate should be set at 44.1khz, as feeding in 48khz raises the pitch of the audio.
- The Vive Pro creates an HDMI Output Source after startup of SteamVR/Monado. Use it instead of the Vive Pro USB Audio Source, since the audio might appear distorted.
Valve Index quirks #
- The Valve Index uses your GPU’s DisplayPort for audio output. If you are unable to hear audio after switching to the GPU output, try changing the output port in an application like pavucontrol.
- The Valve Index audio output sample rate to 48khz, or else no audio will be output.
- The Valve Index may be put in a bad state the first time it is connected to the system, or when plugged in before the system boots up, causing symptoms such as DRM lease failing. You should try replugging the power connector to reset the HMD.
Other HMD hardware notes #
- Vive Pro Eye HMD functional, eye tracking functionality with ReVision
- Pimax initialization code WIP. Distortion matrix dump work in progress.
- Eyetrack VR and Project Babble will both be implemented through oscavmgr to emit proper unified flexes over OSC.
- Tracking technologies can be mixed Monado/WiVRn by using motoc.
- Beyond 2e users: to use eyetracking on your headset please follow the guide in the Bigscreen Beyond page
Desktop hangs on start of SteamVR or Monado #
Symptoms:
- When starting the SteamVR or Monado for the first time after a reboot, the desktop freezes and after 15 seconds the SteamVR window is open but the Headset does not show a picture.
- Restarting SteamVR solves this.
- Unplugging the headset and plugging it back in solves this.
dmesg | grep amdgpuprints a line containingERROR dc_stream_state is NULL for crtc '1'!(or some other number).
This is a regression with the current (linux-kernel 6.18 and below) RADV driver, and will most likely be fixed in linux-6.19. A kernel patch is available (for kernel 6.16 and below) on this GitLab issue. See the section on how to apply a kernel patch.
Applying a kernel patch (for Vive Pro 2, Bigscreen Beyond, Pimax) #
Arch #
- download the patch(es), then follow the steps on https://wiki.archlinux.org/title/Kernel/Arch_build_system,
which should be roughly:
mkdir ~/build/->cd ~/build/->pkgctl repo clone --protocol=https linux->cd linux - (section 2 of link) open
PKGBUILDin that directory and modify thepkgbaseline (at the top) to read e.g. “pkgbase=linux-customvr”. then add a line containing “<patchfilename>.patch” to thesourcearray:
source=(
https://cdn.kernel.org/pub/linux/kernel/v${pkgver%%.*}.x/${_srcname}.tar.{xz,sign}
<patchfilename>.patch
$url/releases/download/$_srctag/linux-$_srctag.patch.zst{,.sig}
config # the main kernel config file
)
- close
PKGBUILD. (may not be necessary but i ranupdpkgsums) ->makepkg -s --skippgpcheck(i didn’t feel like fixing a pgp error) - then section 4 of https://wiki.archlinux.org/title/Kernel/Arch_build_system#Installing and restart
Fedora #
- Prepare the kernel
git clone https://src.fedoraproject.org/rpms/kernel.git
cd kernel
# replace 41 with your fedora version
git switch f41
# install the build dependencies for the kernel, if you haven't already
sudo dnf builddep kernel.spec
# name this the 'bsb' build
sed -i 's/# define buildid .*/%define buildid .bsb/g' kernel.spec
-
Replace
linux-kernel-test.patchwith the actual patch file downloaded from the table above -
Build RPMs:
fedpkg local
- Install kernel:
sudo dnf install --nogpgcheck ./x86_64/kernel-*.rpm
- Reboot and check that using
uname -athat thebsbkernel is running.
Official guide: Building a Kernel from the Fedora dist-git
NixOS #
- download the patch(es)
- add this to your configuration.nix or other nix file you use:
boot.kernelPatches = [
{
name = "type what the patch is for here";
patch = /path/to/patch/file.patch;
}
];
reference commit on my nix files: https://github.com/TayouVR/nixfiles/commit/d6ef568a2642c5a26eb92611be7335afdb6047de