--- weight: 45 title: VR Gear & GPUs --- # Hardware {{% hint warning %}} **NVIDIA WIRED VR ISSUES**: Nvidia proprietary drivers currently have a number of critical issues with DRM lease causing substantial presentation latency for wired VR headsets, or making DRM lease impossible, resulting in discomfort or breakage. Wireless VR through WiVRn is entirely unaffected only direct display type wired headsets. Users with Nvidia GPUs should consider the **Nvidia Wired VR Workaround** footnotes of the GPU table below or switch to AMD for the best experience. For details and to report your experience, see [this forum thread](https://forums.developer.nvidia.com/t/substantial-drm-lease-presentation-latency-resulting-in-unusable-vr-hmd-experience/332386) and [this issue as well](https://forums.developer.nvidia.com/t/nvidia-proprietary-non-open-modules-completely-unable-to-acquire-a-drm-lease-on-any-display-server-all-known-nvidia-drivers-any-hardware/341244). {{% /hint %}} ## 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+. [Critical DRM lease issue](https://forums.developer.nvidia.com/t/substantial-drm-lease-presentation-latency-resulting-in-unusable-vr-hmd-experience/332386) causes uncomfortable latency in wired VR, requires runtime mitigation found below support table. Best used with wireless solutions (WiVRn). Works for wired VR. | | Nvidia <= 10XX Series GPU | Nvidia (Closed Source Module) | ⚡ No wired VR | ⚠️ Partial | ✅ Supported | Requires driver version 565+. Best used with wireless solutions (WiVRn). [No wired VR support.](https://forums.developer.nvidia.com/t/nvidia-proprietary-non-open-modules-completely-unable-to-acquire-a-drm-lease-on-any-display-server-all-known-nvidia-drivers-any-hardware/341244) | | 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:** - **Nvidia Wired VR Workaround**: Wired users should certainly set `XRT_COMPOSITOR_USE_PRESENT_WAIT` to 1 which changes the swapchain to explicit sync behavior and `U_PACING_COMP_TIME_FRACTION_PERCENT` to 90, representing 90% of the time it takes to render a frame can significantly reduce the latency effect with Nvidia GPUs. There are notable frametime issues in the driver still which may result in stutter but this should vastly improve the experience. - For Nvidia proprietary drivers *older* than 565, (please try to update!), the [vulkan-layers](https://gitlab.freedesktop.org/monado/utilities/vulkan-layers) must be installed in order to not crash: [*AUR*](https://aur.archlinux.org/packages/monado-vulkan-layers-git)・[*Fedora*](https://packages.fedoraproject.org/pkgs/monado-vulkan-layers/monado-vulkan-layers/) - 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](https://wiki.archlinux.org/title/PipeWire#Audio_cutting_out_when_multiple_streams_start_playing). - 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 sinks` to identify the Sink Name that your HMD is currently connected to, and edit the headroom fix file by changing the `node.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](https://forums.developer.nvidia.com/t/substantial-drm-lease-presentation-latency-resulting-in-unusable-vr-hmd-experience/332386). | Device | [SteamVR](/docs/steamvr/) | [Monado](/docs/fossvr/monado/) | [WiVRn](/docs/fossvr/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](https://github.com/CertainLach/VivePro2-Linux-Driver)) | ✅ (With two kernel patches [1](https://github.com/CertainLach/VivePro2-Linux-Driver/blob/master/kernel-patches/0002-drm-edid-parse-DRM-VESA-dsc-bpp-target.patch) [2](https://github.com/CertainLach/VivePro2-Linux-Driver/blob/master/kernel-patches/0003-drm-amd-use-fixed-dsc-bits-per-pixel-from-edid.patch), AMD GPUs or Nvidia driver 580+ open kernel modules.) | -- | | Bigscreen Beyond | ✅ (with kernel patch for [<= 6.14](https://gist.github.com/galister/08cddf10ac18929647d5fb6308df3e4b/raw/0f6417b6cb069f19d6c28b730499c07de06ec413/combined-bsb-6-10.patch) and [>= 6.15](bigscreen-beyond-kernel-6.15.patch), AMD GPUs or Nvidia driver 580+ open kernel modules.) | ✅ (with kernel patch for [<= 6.14](https://gist.github.com/galister/08cddf10ac18929647d5fb6308df3e4b/raw/0f6417b6cb069f19d6c28b730499c07de06ec413/combined-bsb-6-10.patch) and [>= 6.15](bigscreen-beyond-kernel-6.15.patch), AMD GPUs or Nvidia driver 580+ open kernel modules.) | -- | | Somnium VR1 | ⚠️ Rumored successful internal test by Somnium. | ⚠️ Rumored successful internal test by Somnium. | ⚠️🚧 (WiVRn PC-PC stream) | | VRgineers XTAL | ? | ? | ? | | StarVR One | ? | ? | ? | | Varjo VR-1 | ? | ? | ? | | Varjo VR-2 | ? | ? | ? | | Varjo VR-3 | ? | ? | ? | | Pimax 4K | ❌ (Planned) | 🚧 (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch), Nvidia requires patching EDID.) | 🚧 (WiVRn PC-PC stream) | | Pimax 5K Plus | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch), Nvidia requires patching EDID.) | 🚧 (WiVRn PC-PC stream) | | Pimax 5K XR | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch), Nvidia requires patching EDID.) | 🚧 (WiVRn PC-PC stream) | | Pimax 5K SUPER | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch), Nvidia requires patching EDID.) | 🚧 (WiVRn PC-PC stream) | | Pimax 8K | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch), Nvidia requires patching EDID.) | 🚧 (WiVRn PC-PC stream) | | Pimax Vision 8K X | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch).) | 🚧 (WiVRn PC-PC stream) | | Pimax Vision 8K PLUS | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch), Nvidia requires patching EDID.) | 🚧 (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](/docs/steamvr/alvr/)) | -- | ✅ | | Quest 2 | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | | Quest Pro | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | | Quest 3 | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | | Pico 4 | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | | Pico Neo 3 | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | | HTC Vive Focus 3 | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | | HTC Vive XR Elite | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | | Lynx R1 | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | | Apple Vision Pro | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ❌ | | **Trackers** | | | | | Vive/Tundra trackers | ✅ (native or spacecal) | ✅ (native or motoc) | ✅ (motoc) | | SlimeVR trackers | ✅ | ✅ (OSC + experimental driver) | ✅ | | Project Babble | ✅ ([OscAvMgr](https://github.com/galister/oscavmgr) or [VRCFT.Avalonia](https://github.com/dfgHiatus/VRCFaceTracking.Avalonia)) | ✅ ([OscAvMgr](https://github.com/galister/oscavmgr) or [VRCFT.Avalonia](https://github.com/dfgHiatus/VRCFaceTracking.Avalonia)) | ✅ ([OscAvMgr](https://github.com/galister/oscavmgr) or [VRCFT.Avalonia](https://github.com/dfgHiatus/VRCFaceTracking.Avalonia)) | | Eyetrack VR | ✅ ([OscAvMgr](https://github.com/galister/oscavmgr) or [VRCFT.Avalonia](https://github.com/dfgHiatus/VRCFaceTracking.Avalonia)) | ✅ ([OscAvMgr](https://github.com/galister/oscavmgr) or [VRCFT.Avalonia](https://github.com/dfgHiatus/VRCFaceTracking.Avalonia)) | ✅ ([OscAvMgr](https://github.com/galister/oscavmgr) or [VRCFT.Avalonia](https://github.com/dfgHiatus/VRCFaceTracking.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) | ✅ | ❌ | ## 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](https://forums.developer.nvidia.com/t/substantial-drm-lease-presentation-latency-resulting-in-unusable-vr-hmd-experience/332386) 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** first presentation to system each fresh boot or first runtime plug in will yield no display, resulting in VR refusing to start. Replug the barrel connector that provides power to the HMD to reset it to make it available. - **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](https://github.com/Blue-Doggo/ReVision) - **Pimax** initialization code WIP. Distortion matrix dump work in progress. - Eyetrack VR and Project Babble will both be implemented through [oscavmgr](https://github.com/galister/oscavmgr) to emit proper unified flexes over OSC. - Tracking technologies can be mixed Monado/WiVRn by using [motoc](https://github.com/galister/motoc). ## 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 "`.patch`" to the `source` array: ```pkgbuild source=( https://cdn.kernel.org/pub/linux/kernel/v${pkgver%%.*}.x/${_srcname}.tar.{xz,sign} .patch $url/releases/download/$_srctag/linux-$_srctag.patch.zst{,.sig} config # the main kernel config file ) ``` 4. close `PKGBUILD`. (may not be necessary but i ran `updpkgsums`) -> `makepkg -s --skippgpcheck` (i didn't feel like fixing a pgp error) 5. then section 4 of https://wiki.archlinux.org/title/Kernel/Arch_build_system#Installing and restart ### Fedora 1. Prepare the kernel ```sh 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 ``` 2. Replace `linux-kernel-test.patch` with the actual patch file downloaded from the table above 3. Build RPMs: ```sh fedpkg local ``` 4. Install kernel: ```sh sudo dnf install --nogpgcheck ./x86_64/kernel-*.rpm ``` 5. Reboot and check that using `uname -a` that the `bsb` kernel is running. Official guide: [Building a Kernel from the Fedora dist-git](https://docs.fedoraproject.org/en-US/quick-docs/kernel-build-custom/#_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: ```nix 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