VR Gear & GPUs

Hardware #

NVIDIA WIRED VR ISSUES: Nvidia proprietary drivers currently have a critical issue with DRM lease causing substantial presentation latency for wired VR headsets, resulting in a delayed viewport effect that makes VR uncomfortable. This affects all known driver versions. Wireless VR through WiVRn still works well. Users with Nvidia GPUs should consider wireless options or switching to AMD for the best experience. For details and to report your experience, see this forum thread.

GPU support matrix #

Manufacturer Driver VR Support Reprojection Support Hybrid Graphics Support Notes
Nvidia Nvidia (Closed Source or Open Module) ⚠️ Limited ⚠️ Limited ✅ Supported Requires driver version 565+. Critical DRM lease issue causes uncomfortable latency in wired VR. Best used with wireless solutions (WiVRn).
Nvidia 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 RADV (Open Source) ✅ Excellent ✅ Robust (RDNA+) ✅ Supported Recommended for wired VR. RDNA generation and newer supported with compute tunneling for reprojection. Pre-RDNA GPUs have functional but less robust reprojection.
AMD 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 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 i915 (Open Source) ⚡ Functional ❓ Unknown ✅ Supported Relatively old driver, likely poor support for newer GPUs. Limited testing with VR applications.
Intel Intel/Xe (Open Source) ❌ No wired HMDs ❌ N/A ✅ Supported Lacks direct mode implementation in driver, unable to drive wired HMDs.

Notes:

  • VR Support: Indicates how well supported the necessary Vulkan API components are.
  • Reprojection Support: Describes the support and quality of reprojection features for VR. Poor support indicates that the driver is not able to properly handle Vulkan realtime shaders and it will present as visual stutter. Non-robust solutions will suffer stutter under very high GPU load.
  • PRIME/ Hybrid GPU Support: Compatibility with systems using multiple GPUs for render offload. Monado and all clients must be run on a single select GPU due to memory tiling requirements.
  • For Nvidia proprietary drivers older than 565, (please try to update!), the vulkan-layers must be installed in order to not crash: AURFedora
  • Nvidia Wired VR Workaround: Some users report setting U_PACING_COMP_MIN_TIME_MS to approximately 10 can slightly reduce the latency effect with Nvidia GPUs, but this is only a partial mitigation, not a solution.
  • Nvidia GPUs work well for wireless VR through WiVRn, but have significant issues with wired headsets until the DRM lease presentation latency issue is resolved.
  • AMD GPUs lower than RDNA generation have functional but less robust reprojection capabilities, expected to be similar to Intel.
  • Audio over displayport is known to temporarily cut out when new audio sources spring up on pipewire without a fix to add alsa headroom
  • X11 configurations are discouraged but workable, please upgrade your system to Wayland if at all possible.

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 🚧 (WiVRn PC-PC stream)
HTC Vive 🚧 (WiVRn PC-PC stream)
HTC Vive Pro 🚧 (WiVRn PC-PC stream)
HTC Vive Pro Eye 🚧 (WiVRn PC-PC stream)
HTC Vive Pro 2 ✅ (custom driver and patches) ✅ (With two kernel patches 1 2, AMD GPUs only.)
Bigscreen Beyond ✅ (with kernel patch, AMD GPUs only.) ✅ (with kernel patch, AMD GPUs only.)
Somnium VR1 ? ? ?
VRgineers XTAL ? ? ?
StarVR One ? ? ?
Varjo VR-1 ? ? ?
Varjo VR-2 ? ? ?
Varjo VR-3 ? ? ?
Pimax 4K ❌ (Planned) 🚧 (WIP, with kernel patches, AMD GPUs only.) 🚧 (WiVRn PC-PC stream)
Pimax 5K Plus ❌ (Planned) ✅ (WIP, with kernel patches, AMD GPUs only.) 🚧 (WiVRn PC-PC stream)
Pimax 5K XR ❌ (Planned) ✅ (WIP, with kernel patches, AMD GPUs only.) 🚧 (WiVRn PC-PC stream)
Pimax 5K SUPER ❌ (Planned) ✅ (WIP, with kernel patches, AMD GPUs only.) 🚧 (WiVRn PC-PC stream)
Pimax 8K ❌ (Planned) ✅ (WIP, with kernel patches, AMD GPUs only.) 🚧 (WiVRn PC-PC stream)
Pimax Vision 8K X ❌ (Planned) ✅ (WIP, with kernel patches, AMD GPUs only.) 🚧 (WiVRn PC-PC stream)
Pimax Vision 8K PLUS ❌ (Planned) ✅ (WIP, with kernel patches, AMD GPUs only.) 🚧 (WiVRn PC-PC stream)
Lenovo Explorer ✅ (Monado SteamVR plugin) ✅ (experimental 6dof controllers) 🚧 (WiVRn PC-PC stream)
Acer AH101 ✅ (Monado SteamVR plugin) ✅ (experimental 6dof controllers) 🚧 (WiVRn PC-PC stream)
Dell Visor ✅ (Monado SteamVR plugin) ✅ (experimental 6dof controllers) 🚧 (WiVRn PC-PC stream)
HP WMR headset ✅ (Monado SteamVR plugin) ✅ (experimental 6dof controllers) 🚧 (WiVRn PC-PC stream)
Samsung Odyssey ✅ (Monado SteamVR plugin) ✅ (experimental 6dof controllers) 🚧 (WiVRn PC-PC stream)
Asus HC102 ✅ (Monado SteamVR plugin) ✅ (experimental 6dof controllers) 🚧 (WiVRn PC-PC stream)
Samsung Odyssey+ ✅ (Monado SteamVR plugin) ✅ (experimental 6dof controllers) 🚧 (WiVRn PC-PC stream)
HP Reverb ✅ (Monado SteamVR plugin, 60Hz only mode on Nvidia) ✅ (experimental 6dof controllers, 60Hz only mode on Nvidia) 🚧 (WiVRn PC-PC stream)
Acer OJO 500 ✅ (Monado SteamVR plugin) ✅ (experimental 6dof controllers) 🚧 (WiVRn PC-PC stream)
HP Reverb G2 ✅ (Monado SteamVR plugin) ✅ (experimental 6dof controllers) 🚧 (WiVRn PC-PC stream)
Oculus Rift CV1 ✅ (OpenHMD SteamVR plugin) ✅ (OpenHMD plugin based support) 🚧 (WiVRn PC-PC stream)
Oculus Rift S ✅ (Monado SteamVR plugin) ✅ (experimental 6dof controllers) 🚧 (WiVRn PC-PC stream)
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) ❌ (Broken XR SDK)
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 🚧 (Monado SteamVR plugin, win only) ✅ (survive driver only)
Ultraleap v1 ? ✅ (with openxr-layer-ultraleap) ?
Lucid VR Gloves ? ✅ (survive driver only)
Kinect FBT ✅ (experimental) 🚧
Standable FBT
Razer Hydra ✅ (Monado SteamVR plugin)

Hardware note #

  • Nvidia GPU users: Due to the DRM lease presentation latency issue, wired VR headsets will experience a delayed viewport effect on Nvidia GPUs. This affects all driver versions since 550. Consider these workarounds:
    • Use WiVRn or ALVR with standalone headsets for wireless VR (recommended)
    • Try setting U_PACING_COMP_MIN_TIME_MS=10 as an environment variable to slightly reduce the effect
    • Consider switching to AMD GPUs for the best wired VR experience
    • Monitor the bug report thread for updates
  • AMD GPU users: If using WiVRn, make sure you are using the RADV Vulkan driver. A green and broken video stream in WiVRn is a telltale sign that you’re using the incompatible AMDVLK driver. Remove AMDVLK and install RADV as AMDVLK is known to be difficult to opt out of as a driver when installed on system.
  • WiVRn PC XR to WiVRn PC client streaming remains mainly for debug use.
  • Vive Pro microphones should be set to use 44.1khz sample rates as feeding in 48khz raises the pitch of the audio.
  • Vive Pro creates HDMI Output Source after startup of SteamVR/Monado/etc. Use it instead of Vive Pro USB Audio Source, since the audio might appear distorted.
  • Valve Index audio output should be set to 48khz or no audio will output.
  • Valve Index may bug out once per boot, resulting in VR refusing to start, or your DE seeing it as a normal monitor. Just unplug and replug the barrel connector that provides power to the HMD.
  • Valve Index may also exhibit unexpected activity with its microphone. If the microphone doesn’t transmit at all during regular VR use, consider changing the DisplayPort slot the headset is currently plugged into. Also, as a reminder, the Index mic only works if the headset is actively being used to display something.
  • 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.
  • Having Ultraleap packages installed causes Monado to not compile.

Applying a kernel patch (for Vive Pro 2, Bigscreen Beyond, Pimax) #

Arch #

  1. 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
  2. (section 2 of link) open PKGBUILD in that directory and modify the pkgbase line (at the top) to read e.g. “pkgbase=linux-customvr”. then add a line containing “<patchfilename>.patch” to the source array:
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
)
  1. close PKGBUILD. (may not be necessary but i ran updpkgsums) -> makepkg -s --skippgpcheck (i didn’t feel like fixing a pgp error)
  2. then section 4 of https://wiki.archlinux.org/title/Kernel/Arch_build_system#Installing and restart

Fedora #

  1. 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
  1. Replace linux-kernel-test.patch with the actual patch file downloaded from the table above

  2. Build RPMs:

fedpkg local
  1. Install kernel:
sudo dnf install --nogpgcheck ./x86_64/kernel-*.rpm
  1. Reboot and check that using uname -a that the bsb kernel is running.

Official guide: Building a Kernel from the Fedora dist-git

NixOS #

  1. download the patch(es)
  2. 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