diff --git a/content/docs/distros/Fedora_Atomic.md b/content/docs/distros/Fedora_Atomic.md new file mode 100644 index 0000000..97d4476 --- /dev/null +++ b/content/docs/distros/Fedora_Atomic.md @@ -0,0 +1,69 @@ +--- +title: Fedora Atomic (Bazzite) +--- + +# Fedora Atomic + +This documentation applies to both Fedora's Atomic images (Silverblue, Kinoite, etc.), as well as Universal Blue images (Bazzite, Bluefin, etc.) + +# AtomicXR + +The recommended way to set up Fedora Atomic for VR is with [AtomicXR](https://tangled.sh/@matrixfurry.com/atomic-xr). See the [README](https://tangled.sh/@matrixfurry.com/atomic-xr/blob/main/README.md) for the most up-to date usage instructions. + +## Installation & Setup +{{% hint info %}} +You'll need to install [Homebrew](https://brew.sh/) to use AtomicXR. See [this page](https://docs.brew.sh/Homebrew-on-Linux#install) for installation instructions. +If you're using a Universal Blue image (Bazzite, Bluefin, etc.), it's already installed for you. +{{% /hint %}} + +1. Add the AtomicXR Homebrew tap: + ```sh + brew tap matrixfurry.com/atomicxr https://tangled.sh/@matrixfurry.com/homebrew-atomicxr + ``` +2. Install the AtomicXR CLI (`axr`): + ```sh + brew install atomicxr-cli + ``` + +## [Envision](/docs/fossvr/envision/) + +### Installation + +After installing the AtomicXR CLI, you can use `axr envision install` to install Envision. + +### Building profiles +{{% hint note %}} +It's bad practice to install development packages on your base system, to improve system stabilty and performance. +AtomicXR will instead set up a container with all your build depencencies installed. +Launching Envision in build mode will start it inside of that container. +{{% /hint %}} + +To build profiles, right click Envision in your application menu and click "Launch in Build Mode". + +## Overlays & Applications + +### Install +- [WlxOverlay-S](/docs/fossvr/wlxoverlay-s/): `brew install wlx-overlay-s` +- [WayVR Dashboard](/docs/fossvr/wlxoverlay-s/#wayvr-dashboard): `brew install --cask wayvr-dashboard` +- [Monado Tracking Origin Calibrator](/docs/fossvr/motoc/): `brew install motoc` +- [OSC Avatar Manager](https://github.com/galister/oscavmgr): `brew install oscavmgr vrc-advert` + +### OscAvMgr +OscAvMgr [requires VrcAdvert to handle OscQuery](https://github.com/galister/oscavmgr?tab=readme-ov-file#setting-up-to-use-with-vrchat). + +A command is included to launch OscAvMgr and VrcAdvert together for you (use `openxr` for WiVRn): +```sh +axr oscavmgr start +``` + +## Troubleshooting + +See [this section](https://tangled.sh/@matrixfurry.com/atomic-xr#troubleshooting) in the README for the most up-to-date troubleshooting steps. + +### Envision Plugin download failed + +Plugins should be installed from the [AtomicXR Homebrew Tap](https://tangled.sh/@matrixfurry.com/homebrew-atomicxr) instead of Envision. Envision doesn't provide a way to download plugins via a command (yet). + +## Support + +You can open an issue on [Tangled](https://tangled.sh/@matrixfurry.com/atomic-xr/issues), ask questions in [this post](https://discord.com/channels/1065291958328758352/1389409336580767775) on the LVRA Discord, or reach out to [the maintainer](https://woosh.link/matrixfurry.com) directly. diff --git a/content/docs/fossvr/democap/_index.md b/content/docs/fossvr/democap/_index.md index 4716f23..825ce8c 100644 --- a/content/docs/fossvr/democap/_index.md +++ b/content/docs/fossvr/democap/_index.md @@ -1,6 +1,6 @@ --- title: DEMoCap - Drag[en]gine Motion Capture -weight: 100 +weight: 1100 --- # DEMoCap - Drag[en]gine Motion Capture @@ -34,4 +34,4 @@ To start a motion capture project you have to first prepare your character model Once done you can create a motion capture project in DEMoCap and get going. See [Project Management](https://developer.dragondreams.ch/wiki/doku.php/democap:projectmanagement#project_management) to create a new project and the various pages under [Documentation and Tutorials](https://developer.dragondreams.ch/wiki/doku.php/democap:main#documentation) for information about the individual steps. -If you have questions or problems drop by the [discord channel](https://discord.gg/Jeg62ns) for help. \ No newline at end of file +If you have questions or problems drop by the [discord channel](https://discord.gg/Jeg62ns) for help. diff --git a/content/docs/fossvr/envision/_index.md b/content/docs/fossvr/envision/_index.md index 02ac465..e786229 100644 --- a/content/docs/fossvr/envision/_index.md +++ b/content/docs/fossvr/envision/_index.md @@ -1,5 +1,5 @@ --- -weight: 49 +weight: 100 title: Envision --- @@ -13,6 +13,10 @@ title: Envision Envision is a graphical app that acts as an orchestrator to get a full [Monado](/docs/fossvr/monado/) or [WiVRn](/docs/fossvr/wivrn/) setup up and running with a few clicks. +{{% hint danger %}} +**Do not** use Envision for WiVRn directly unless you absolutely need it to access experimental patches. See [WiVRn](/docs/fossvr/wivrn/) as WiVRn has it's own GUI much more suited to itself than Envision and may be installed via Flatpak, AUR, or Fedora repos. +{{% /hint %}} + Envision attempts to construct a working runtime with both a native OpenXR and an OpenVR API, provided by [OpenComposite](/docs/fossvr/opencomposite/), for client aplications to utilize. Please note the OpenVR implementation is incomplete and contains only what's necessary to run most games for compatibility. If you plan to implement software, utilize the OpenXR API, specification [here](https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html). {{% hint danger %}} diff --git a/content/docs/fossvr/envision/wmr_controllers_on_arch.md b/content/docs/fossvr/envision/wmr_controllers_on_arch.md index bb9cdf4..f85f03c 100644 --- a/content/docs/fossvr/envision/wmr_controllers_on_arch.md +++ b/content/docs/fossvr/envision/wmr_controllers_on_arch.md @@ -5,6 +5,8 @@ title: WMR Controller Tracking on Arch # Envision Installation on Arch with Controller Tracking +## Install Envision-XR with Paru on Arch + ## Recommendations: - **Paru** as the Arch AUR helper - **KDE** as the desktop environment for better compatibility with SteamVR (may not be necessary) @@ -18,31 +20,15 @@ cd paru makepkg -si ``` -## Monado Vulkan Layers -These are only needed if you have an NVIDIA Card and a Nvidia Driver before 565.77.01. - -[Monado Vulkan Layers AUR](https://aur.archlinux.org/packages/monado-vulkan-layers-git) -### Paru Installation -```bash -paru -S monado-vulkan-layers-git -``` -### Normal Installation with compiling manually -```bash -git clone https://aur.archlinux.org/monado-vulkan-layers-git.git -cd monado-vulkan-layers-git -makepkg -i -``` -- -> Install dependencies and, if needed, run `makepkg -i` again. - -## Envision-XR with Paru +### Install Envision-XR from AUR using Paru: [Envision-XR AUR](https://aur.archlinux.org/packages/envision-xr-git) ```bash paru -S envision-xr-git ``` +## Envision Configuration (Non-Arch users follow from here!) -### Envision Setup -- Select **WMR default**. +- Select profile: **WMR default**. ![WMR default](/images/EnvisionXR_WMR.png "Envision XR Screen with WMR Envision Default selected") - Duplicate and adjust settings: @@ -75,4 +61,28 @@ paru -S envision-xr-git WARN [wmr_controller_send_fw_cmd] Controller fw read timed out after 250 ms ERROR [wmr_bt_controller_create] WMR Controller (Bluetooth): Failed to create controller ERROR [wmr_create_bt_controller] Failed to create WMR controller (Bluetooth) - ``` \ No newline at end of file + ``` + +### Troubleshooting + +#### NVIDIA: No allowlisted displays found! + +1. See the logs: + + ``` + == Current Allowlist (8) == + Sony SIE HMD *08 + HTC Corporation HTC-VIVE + HTC Corporation VIVE Pro + Oculus VR Inc. Rift + Valve Corporation Index HMD + Seiko/Epson SEC144A + HPN + PNP + == Found Displays (2) == + SAMSUNG (HDMI-0) + HP Inc. (DP-2) + ``` +2. Identify which entry under Found Displays is your HMD. +3. Add the following env var to the Envision profile, with the correct name for your HMD: + `XRT_COMPOSITOR_FORCE_NVIDIA_DISPLAY="HP Inc."` \ No newline at end of file diff --git a/content/docs/fossvr/index_camera_passthrough.md b/content/docs/fossvr/index_camera_passthrough.md index 2253e2b..4c4e8f6 100644 --- a/content/docs/fossvr/index_camera_passthrough.md +++ b/content/docs/fossvr/index_camera_passthrough.md @@ -1,5 +1,5 @@ --- -weight: 53 +weight: 900 title: Valve Index Camera Passthrough --- diff --git a/content/docs/fossvr/lovr/_index.md b/content/docs/fossvr/lovr/_index.md index 92aa1c0..0f414e2 100644 --- a/content/docs/fossvr/lovr/_index.md +++ b/content/docs/fossvr/lovr/_index.md @@ -1,5 +1,5 @@ --- -weight: 100 +weight: 800 title: LÖVR --- @@ -12,4 +12,4 @@ title: LÖVR The LÖVR engine is a Lua XR engine, written in C, which supports overlays on monado. Very simple and fun to implement whatever you would like. -- [lovr-playspace](/docs/fossvr/lovr/lovr-playspace/) A barebones room boundary built on the LÖVR engine. \ No newline at end of file +- [lovr-playspace](/docs/fossvr/lovr/lovr-playspace/) A barebones room boundary built on the LÖVR engine. diff --git a/content/docs/fossvr/monado/_index.md b/content/docs/fossvr/monado/_index.md index adcbc60..786974d 100644 --- a/content/docs/fossvr/monado/_index.md +++ b/content/docs/fossvr/monado/_index.md @@ -1,5 +1,5 @@ --- -weight: 50 +weight: 200 title: Monado --- diff --git a/content/docs/fossvr/monado/flipvr.md b/content/docs/fossvr/monado/flipvr.md new file mode 100644 index 0000000..1713b42 --- /dev/null +++ b/content/docs/fossvr/monado/flipvr.md @@ -0,0 +1,27 @@ +--- +weight: 200 +title: FlipVR controllers +--- + +# Using FlipVR with the Monado OpenXR Runtime + +This is currently the only way to use these controllers in [Resonite](/docs/resonite/) as of 2025-08-22 + +From the [ShiftAll Discord](https://discord.com/invite/Z9Tp7tUzmb) ([link to post](https://discord.com/channels/1093765691582185482/1262995177845293076/1408272236703387688)): +> ℹ️ _I expect you are using [Envision](https://gitlab.com/gabmus/envision) to setup Monado and OpenComposite/xrizer. If you aren't, you'll have to manually compile and setup Monado yourself._ +> +> 1. Create a new "Lighthouse Driver" profile in Envision. +> 2. Change the "XR Service Repo" to `https://gitlab.freedesktop.org/PointerOffset/monado` +> 3. Change the "XR Service Branch" to `steamvr_lh-flipvr` +> 4. Build the profile. +> 5. Install the "Shiftall Controller Driver" from Steam if you haven't already: https://store.steampowered.com/app/3036810/Shiftall_Controller_Driver/ +> 6. Copy the contents of the "Shiftall Controller Drivers" folder to SteamVR's driver folder. The directory _must_ be named `shiftall`. +> +> For the last step, if everything is in the default locations, this command should get it copied: +> ``` +> cp -r ~/.local/share/Steam/steamapps/common/Shiftall\ Controller\ Drivers ~/.local/share/Steam/steamapps/common/SteamVR/drivers/shiftall +> ``` +> +> If everything went correctly, you should now have working FlipVR controllers through Monado. **If you're using this to run Resonite on Linux, you'll need to use _xrizer_ for your "OpenVR Compatibility" module.** +> +> If you try it, please let me know if it works and how it feels! I might need to adjust the controller offsets and I'd like to make it so you don't need to copy the Shiftall driver files. Hoping to try and get this merged into Monado sometime in the near-future though. Thank you if you give it a shot! diff --git a/content/docs/fossvr/motoc.md b/content/docs/fossvr/motoc.md index 52344cc..11f8b85 100644 --- a/content/docs/fossvr/motoc.md +++ b/content/docs/fossvr/motoc.md @@ -1,5 +1,5 @@ --- -weight: 50 +weight: 1000 title: Motoc --- @@ -19,4 +19,4 @@ Please take a look at the GitHub Readme for a comprehensive guide. ## Support -Reach out in the `monado` or `wivrn` room in Discord or Matrix. \ No newline at end of file +Reach out in the `monado` or `wivrn` room in Discord or Matrix. diff --git a/content/docs/fossvr/opencomposite/_index.md b/content/docs/fossvr/opencomposite/_index.md index 70d1164..fd7412d 100644 --- a/content/docs/fossvr/opencomposite/_index.md +++ b/content/docs/fossvr/opencomposite/_index.md @@ -1,5 +1,5 @@ --- -weight: 800 +weight: 500 title: OpenComposite --- diff --git a/content/docs/fossvr/stardust/_index.md b/content/docs/fossvr/stardust/_index.md index 1040ab5..d447921 100644 --- a/content/docs/fossvr/stardust/_index.md +++ b/content/docs/fossvr/stardust/_index.md @@ -1,6 +1,6 @@ --- title: Stardust XR -weight: 52 +weight: 700 --- # Stardust XR diff --git a/content/docs/fossvr/wivrn/_index.md b/content/docs/fossvr/wivrn/_index.md index 72c9058..397b250 100644 --- a/content/docs/fossvr/wivrn/_index.md +++ b/content/docs/fossvr/wivrn/_index.md @@ -1,5 +1,5 @@ --- -weight: 50 +weight: 300 title: WiVRn --- @@ -71,6 +71,7 @@ flatpak override --user --filesystem=xdg-config/openxr:ro com.valvesoftware.Stea flatpak override --user --filesystem=xdg-config/openvr:ro com.valvesoftware.Steam flatpak override --user --filesystem=xdg-run/wivrn com.valvesoftware.Steam flatpak override --user --filesystem=/var/lib/flatpak/app/io.github.wivrn.wivrn:ro com.valvesoftware.Steam +flatpak override --user --filesystem=~/.var/app/io.github.wivrn.wivrn:ro com.valvesoftware.Steam ``` As an added bonus to the above, this command will save you the effort of having to set launch options for every single VR game in your Steam library: @@ -101,7 +102,7 @@ Manual steps: See the [README](https://github.com/WiVRn/WiVRn/blob/master/README To use SlimeVR trackers through WiVRn, you currently must use a [fork](https://github.com/notpeelz/WiVRn) of WiVRn: -### Usage with Envision +### Option A: Build with Envision To use this fork within Envision, edit these fields in your profile: - XR Service Repo: `https://github.com/notpeelz/WiVRn.git` @@ -110,7 +111,7 @@ To use this fork within Envision, edit these fields in your profile: Then save and clean build the profile. -### NixOS setup +### Option B: NixOS Override the `wivrn` package from nixpkgs with something resembling the following, replacing `[COMMIT HASH HERE]` with the latest commit hash from https://github.com/notpeelz/WiVRn/commits/solarxr-patches and filling in the correct src hash. Do note you may need to adapt this depending on how you install WiVRn: ```nix { pkgs, lib, ... }: @@ -142,7 +143,9 @@ This section covers using WiVRn 0.19 and newer with any Lighthouse-tracked devic You must have SteamVR installed (no need to run it). -### Using Distro-Native Packages +Upstream xrizer doesn't support FBT, so either **select OpenComposite as the OpenVR library** in WiVRn dashboard settings, or build the [experimental2 branch of xrizer](https://github.com/RinLovesYou/xrizer/tree/experimental2). + +### Option A: Use Distro-Native Packages These packages come with lighthouse support enabled (Flatpak & Envision does NOT) - Arch: Install `wivrn-dashboard wivrn-server` from AUR @@ -153,7 +156,7 @@ Open the WiVRn dashboard and under advanced settings, tick `Enable SteamVR track Warning: distro-native packages are known to have issues with Flatpak Steam. -### Envision +### Option B: Build using Envision Set WiVRn Profile as such: - XR Service CMake Flags: - `WIVRN_FEATURE_STEAMVR_LIGHTHOUSE=ON` @@ -163,7 +166,7 @@ Set WiVRn Profile as such: Perform a **Clean Build** after changing the CMake flags! -### NixOS +### Option C: NixOS Override the `wivrn` package and launch wivrn-server with the required environment variables: ```nix { @@ -183,7 +186,7 @@ Override the `wivrn` package and launch wivrn-server with the required environme } ``` -### Manual +### Option D: Manual Build Simply pass `-DWIVRN_FEATURE_STEAMVR_LIGHTHOUSE=ON` to CMake and export the above environment variables before starting `wivrn-server`. ### Usage tips diff --git a/content/docs/fossvr/wlxoverlay-s.md b/content/docs/fossvr/wlxoverlay-s.md index 1ec99d7..9ea93ef 100644 --- a/content/docs/fossvr/wlxoverlay-s.md +++ b/content/docs/fossvr/wlxoverlay-s.md @@ -1,5 +1,5 @@ --- -weight: 51 +weight: 600 title: WlxOverlay-S --- @@ -21,6 +21,12 @@ WayVR acts as a bridge between Wayland applications and WlxOverlay-S panels, all Read more about setup/usage in the [WayVR README](https://github.com/galister/wlx-overlay-s/tree/main/contrib/wayvr). +## WayVR-Dashboard + +WayVR Dashboard is a work-in-progress overlay application (in the form of a WlxOverlay-S plugin) for launching various applications and games directly into a VR desktop environment. + +For more details, read the [WayVR-Dashboard README](https://github.com/olekolek1000/wayvr-dashboard/). + ## Support -Reach out in the `wlxoverlay` room in Discord or Matrix. \ No newline at end of file +Reach out in the `wlxoverlay` room in Discord or Matrix. diff --git a/content/docs/fossvr/wmr_lighthouse_hacky.md b/content/docs/fossvr/wmr_lighthouse_hacky.md index e602db0..0d8435d 100644 --- a/content/docs/fossvr/wmr_lighthouse_hacky.md +++ b/content/docs/fossvr/wmr_lighthouse_hacky.md @@ -1,6 +1,6 @@ --- title: WMR Lighthouse (No SteamVR) -weight: 9000 +weight: 2000 --- # WMR Lighthouse (No SteamVR) diff --git a/content/docs/fossvr/xrBinder/_index.md b/content/docs/fossvr/xrBinder/_index.md index ef452d7..2e366e0 100644 --- a/content/docs/fossvr/xrBinder/_index.md +++ b/content/docs/fossvr/xrBinder/_index.md @@ -1,5 +1,5 @@ --- -weight: 900 +weight: 1200 title: xrBinder --- diff --git a/content/docs/fossvr/xrizer.md b/content/docs/fossvr/xrizer.md index ebfce00..c6d282f 100644 --- a/content/docs/fossvr/xrizer.md +++ b/content/docs/fossvr/xrizer.md @@ -1,5 +1,5 @@ --- -weight: 300 +weight: 400 title: xrizer --- @@ -20,7 +20,7 @@ title: xrizer If you would like a battle-tested solution, see [OpenComposite](/docs/fossvr/opencomposite/). {{% /hint %}} -Currently xrizer does not support full body tracking, however there is a **work-in-progress** [fork by RinLovesYou](https://github.com/RinLovesYou/xrizer/tree/experimental2) with support while using Monado. +Currently xrizer does not support full body tracking, however there is a **work-in-progress** [fork by RinLovesYou, maintained by Mr-Zero88](https://github.com/Mr-Zero88/xrizer/tree/fbt) with support while using Monado. To use the above fork, follow these steps: @@ -28,8 +28,8 @@ To use the above fork, follow these steps: - Click the three dots next to the profile selector and select 'Edit profile' - If a popup asks if you would like to duplicate the profile, click yes. - Scroll down to 'OpenVR Compatibility' and set the following fields: - - OpenVR Compatibility Repo: `https://github.com/RinLovesYou/xrizer.git` - - OpenVR Compatibility Branch: `experimental2` + - OpenVR Compatibility Repo: `https://github.com/Mr-Zero88/xrizer.git` + - OpenVR Compatibility Branch: `fbt` - Clean build your profile from the menu at the top right, or use the Ctrl+F5 keybind. ### NixOS diff --git a/content/docs/games/assetto-corsa/_index.md b/content/docs/games/assetto-corsa/_index.md new file mode 100644 index 0000000..bc0b0b9 --- /dev/null +++ b/content/docs/games/assetto-corsa/_index.md @@ -0,0 +1,28 @@ +--- +title: Assetto Corsa +weight: 50 +--- + +# Assetto Corsa + +[Assetto Corsa](https://store.steampowered.com/app/244210/Assetto_Corsa/) runs with [Proton](https://www.protondb.com/app/244210). + +## Content Manager + +The most commonly used method to load custom content is [Content Manager](https://assettocorsa.club/content-manager.html). + +Download the executable and place it in `~/.steam/steam/steamapps/common/assettocorsa/` as `Content Manager Safe.exe`. + +In Steam, create the following launch-option: +``` +'~/.steam/steam/steamapps/common/Proton - Experimental/proton' waitforexitandrun '~/.steam/steam/steamapps/common/assettocorsa/Content Manager Safe.exe'; echo %command% +``` +Optionally replace `~/.steam/steam/steamapps/common/Proton - Experimental/proton` with the path to another Proton executable. + +### Content + +All custom content is located in `~/.steam/steam/steamapps/common/assettocorsa/content/`. + +#### Settings/Further Reading + +[raptyyy's AC VR Guide](https://raptyyy.github.io/vr-guide/#/README) \ No newline at end of file diff --git a/content/docs/games/beatsaber/_index.md b/content/docs/games/beatsaber/_index.md new file mode 100644 index 0000000..4237590 --- /dev/null +++ b/content/docs/games/beatsaber/_index.md @@ -0,0 +1,13 @@ +--- +title: Beat Saber +weight: 50 +--- + +# Beat Saber + +[Beat Saber](https://store.steampowered.com/app/620980/Beat_Saber/) runs under Proton without issue. + +## Modding + +[BSManager](https://github.com/Zagrios/bs-manager) is a one-stop modding solution for Beat Saber modding under linux. [Installation instructions](https://github.com/Zagrios/bs-manager/wiki/install-bsmanager-on-linux) + diff --git a/content/docs/games/outer-wilds-vr-mod/_index.md b/content/docs/games/outer-wilds-vr-mod/_index.md index 97511ac..519ccb3 100644 --- a/content/docs/games/outer-wilds-vr-mod/_index.md +++ b/content/docs/games/outer-wilds-vr-mod/_index.md @@ -28,8 +28,6 @@ While in VR, if you have mods that add extra items in the main menu, they will b Currently, Proton 9 and above has an issue ([#8409](https://github.com/ValveSoftware/Proton/issues/8409)) causing NomaiVR to instantly crash on startup, only rendering the game window for a split second.\ The workaround is to just use Proton 8. -Do note that as Proton GE-RTSP is using the latest releases of Proton upstream, it will also not work until this issue is patched. - ### Default Quest/Pico 4 controller bindings only partially work with XRizer When playing the game with XRizer and you use Quest or Pico 4 Controllers, it is recommended to use [this custom bindings file](https://github.com/user-attachments/files/19900420/oculustouch.json) ([more info here](https://github.com/Raicuparta/nomai-vr/issues/558#issue-3018649448)). diff --git a/content/docs/hardware/_index.md b/content/docs/hardware/_index.md index 93ed1a5..3a33ac0 100644 --- a/content/docs/hardware/_index.md +++ b/content/docs/hardware/_index.md @@ -14,19 +14,25 @@ title: VR Gear & GPUs | 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 <= 10XX Series GPU | Nvidia (Closed Source Module) | ✅ Acceptable | ⚠️ Partial | ✅ Supported | Requires driver version 565+. [No Valve Index 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 | ❓ Unknown | ✅ Supported | Relatively old driver, likely poor support for newer GPUs. Limited testing with VR applications. | -| Intel/ Any | Intel/Xe (Open Source) | ❌ No wired HMDs | ❌ N/A | ✅ Supported | Lacks direct mode implementation in driver, unable to drive wired HMDs. | +| 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/) -- Audio over displayport is known to temporarily cut out when 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) +- 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 @@ -40,8 +46,8 @@ A non-comprehensive table of various VR/XR devices and the drivers that support | 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), Nvidia driver 580+ open kernel modules.) | -- | -| Bigscreen Beyond | ✅ (with [kernel patch](https://gist.github.com/galister/08cddf10ac18929647d5fb6308df3e4b/raw/0f6417b6cb069f19d6c28b730499c07de06ec413/combined-bsb-6-10.patch), Nvidia driver 580+ open kernel modules.) | ✅ (with [kernel patch](https://gist.github.com/galister/08cddf10ac18929647d5fb6308df3e4b/raw/0f6417b6cb069f19d6c28b730499c07de06ec413/combined-bsb-6-10.patch), Nvidia driver 580+ open kernel modules.) | -- | +| 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 | ? | ? | ? | @@ -109,6 +115,16 @@ A non-comprehensive table of various VR/XR devices and the drivers that support - 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). +### Desktop hangs on start of SteamVR or Monado + +Symptoms: +- When starting the SteamVR or Monado for the first time, 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 amdgpu` prints a line containing `ERROR dc_stream_state is NULL for crtc '1'!` (or some other number). + +This is a regression with the current RADV driver. A kernel patch is available [on this GitLab issue](https://gitlab.freedesktop.org/drm/amd/-/issues/1856#note_2836580). See the section on [how to apply a kernel patch](#applying-a-kernel-patch-for-vive-pro-2-bigscreen-beyond-pimax). + ## Applying a kernel patch (for Vive Pro 2, Bigscreen Beyond, Pimax) ### Arch diff --git a/content/docs/hardware/bigscreen-beyond-kernel-6.15.patch b/content/docs/hardware/bigscreen-beyond-kernel-6.15.patch new file mode 100644 index 0000000..6875a96 --- /dev/null +++ b/content/docs/hardware/bigscreen-beyond-kernel-6.15.patch @@ -0,0 +1,243 @@ +diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c +index 3b4065099..639699e3b 100644 +--- a/drivers/gpu/drm/drm_edid.c ++++ b/drivers/gpu/drm/drm_edid.c +@@ -189,6 +189,9 @@ static const struct edid_quirk { + /* Rotel RSX-1058 forwards sink's EDID but only does HDMI 1.1*/ + EDID_QUIRK('E', 'T', 'R', 13896, EDID_QUIRK_FORCE_8BPC), + ++ /* Bigscreen Beyond Headset */ ++ EDID_QUIRK('B', 'I', 'G', 0x1234, EDID_QUIRK_NON_DESKTOP), ++ + /* Valve Index Headset */ + EDID_QUIRK('V', 'L', 'V', 0x91a8, EDID_QUIRK_NON_DESKTOP), + EDID_QUIRK('V', 'L', 'V', 0x91b0, EDID_QUIRK_NON_DESKTOP), + +From c33583995576e9ac532c4ad9e260324b1c4fa3a3 Mon Sep 17 00:00:00 2001 +From: Yaroslav Bolyukin +Date: Sun, 30 Oct 2022 19:04:26 +0100 +Subject: [PATCH 3/3] drm/amd: use fixed dsc bits-per-pixel from edid + +VESA vendor header from DisplayID spec may contain fixed bit per pixel +rate, it should be respected by drm driver + +Signed-off-by: Yaroslav Bolyukin +Reviewed-by: Wayne Lin +--- + drivers/gpu/drm/amd/display/dc/core/dc_stream.c | 2 ++ + drivers/gpu/drm/amd/display/dc/dc_types.h | 3 +++ + 2 files changed, 5 insertions(+) + +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c +index 38d71b5c1f2d..f2467b64268b 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c +@@ -103,6 +103,8 @@ static bool dc_stream_construct(struct dc_stream_state *stream, + + /* EDID CAP translation for HDMI 2.0 */ + stream->timing.flags.LTE_340MCSC_SCRAMBLE = dc_sink_data->edid_caps.lte_340mcsc_scramble; ++ stream->timing.dsc_fixed_bits_per_pixel_x16 = ++ dc_sink_data->edid_caps.dsc_fixed_bits_per_pixel_x16; + + memset(&stream->timing.dsc_cfg, 0, sizeof(stream->timing.dsc_cfg)); + stream->timing.dsc_cfg.num_slices_h = 0; +diff --git a/drivers/gpu/drm/amd/display/dc/dc_types.h b/drivers/gpu/drm/amd/display/dc/dc_types.h +index dc78e2404b48..65915a10ab48 100644 +--- a/drivers/gpu/drm/amd/display/dc/dc_types.h ++++ b/drivers/gpu/drm/amd/display/dc/dc_types.h +@@ -231,6 +231,9 @@ struct dc_edid_caps { + bool edid_hdmi; + bool hdr_supported; + ++ /* DisplayPort caps */ ++ uint32_t dsc_fixed_bits_per_pixel_x16; ++ + struct dc_panel_patch panel_patch; + }; + +-- +2.38.1 + + +diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c +index 3b4065099..15268afa3 100644 +--- a/drivers/gpu/drm/drm_edid.c ++++ b/drivers/gpu/drm/drm_edid.c +@@ -6391,7 +6391,7 @@ static void drm_parse_vesa_mso_data(struct drm_connector *connector, + if (oui(vesa->oui[0], vesa->oui[1], vesa->oui[2]) != VESA_IEEE_OUI) + return; + +- if (sizeof(*vesa) != sizeof(*block) + block->num_bytes) { ++ if (block->num_bytes < 5) { + drm_dbg_kms(connector->dev, + "[CONNECTOR:%d:%s] Unexpected VESA vendor block size\n", + connector->base.id, connector->name); +@@ -6414,24 +6414,37 @@ static void drm_parse_vesa_mso_data(struct drm_connector *connector, + break; + } + +- if (!info->mso_stream_count) { +- info->mso_pixel_overlap = 0; +- return; +- } ++ info->mso_pixel_overlap = 0; ++ ++ if (info->mso_stream_count) { ++ info->mso_pixel_overlap = FIELD_GET(DISPLAYID_VESA_MSO_OVERLAP, vesa->mso); ++ ++ if (info->mso_pixel_overlap > 8) { ++ drm_dbg_kms(connector->dev, ++ "[CONNECTOR:%d:%s] Reserved MSO pixel overlap value %u\n", ++ connector->base.id, connector->name, ++ info->mso_pixel_overlap); ++ info->mso_pixel_overlap = 8; ++ } + +- info->mso_pixel_overlap = FIELD_GET(DISPLAYID_VESA_MSO_OVERLAP, vesa->mso); +- if (info->mso_pixel_overlap > 8) { + drm_dbg_kms(connector->dev, +- "[CONNECTOR:%d:%s] Reserved MSO pixel overlap value %u\n", +- connector->base.id, connector->name, +- info->mso_pixel_overlap); +- info->mso_pixel_overlap = 8; ++ "[CONNECTOR:%d:%s] MSO stream count %u, pixel overlap %u\n", ++ connector->base.id, connector->name, ++ info->mso_stream_count, info->mso_pixel_overlap); ++ } ++ ++ if (block->num_bytes < 7) { ++ /* DSC bpp is optional */ ++ return; + } + ++ info->dp_dsc_bpp = FIELD_GET(DISPLAYID_VESA_DSC_BPP_INT, vesa->dsc_bpp_int) * 16 + ++ FIELD_GET(DISPLAYID_VESA_DSC_BPP_FRACT, vesa->dsc_bpp_fract); ++ + drm_dbg_kms(connector->dev, +- "[CONNECTOR:%d:%s] MSO stream count %u, pixel overlap %u\n", +- connector->base.id, connector->name, +- info->mso_stream_count, info->mso_pixel_overlap); ++ "[CONNECTOR:%d:%s] DSC bits per pixel %u\n", ++ connector->base.id, connector->name, ++ info->dp_dsc_bpp); + } + + static void drm_update_mso(struct drm_connector *connector, +@@ -6479,6 +6492,7 @@ static void drm_reset_display_info(struct drm_connector *connector) + info->mso_stream_count = 0; + info->mso_pixel_overlap = 0; + info->max_dsc_bpp = 0; ++ info->dp_dsc_bpp = 0; + + kfree(info->vics); + info->vics = NULL; +diff --git a/drivers/gpu/drm/drm_edid.c.rej b/drivers/gpu/drm/drm_edid.c.rej +new file mode 100644 +index 000000000..de3b3bf4e +--- /dev/null ++++ b/drivers/gpu/drm/drm_edid.c.rej +@@ -0,0 +1,9 @@ ++diff a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c (rejected hunks) ++@@ -6376,6 +6389,7 @@ static void drm_reset_display_info(struct drm_connector *connector) ++ info->mso_stream_count = 0; ++ info->mso_pixel_overlap = 0; ++ info->max_dsc_bpp = 0; +++ info->dp_dsc_bpp = 0; ++ } ++ ++ static u32 update_display_info(struct drm_connector *connector, +diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h +index fe88d7fc6..1de1d1726 100644 +--- a/include/drm/drm_connector.h ++++ b/include/drm/drm_connector.h +@@ -803,6 +803,12 @@ struct drm_display_info { + */ + u32 max_dsc_bpp; + ++ /** ++ * @dp_dsc_bpp: DP Display-Stream-Compression (DSC) timing's target ++ * DST bits per pixel in 6.4 fixed point format. 0 means undefined ++ */ ++ u16 dp_dsc_bpp; ++ + /** + * @vics: Array of vics_len VICs. Internal to EDID parsing. + */ +diff --git a/include/drm/drm_connector.h.rej b/include/drm/drm_connector.h.rej +new file mode 100644 +index 000000000..d54d40443 +--- /dev/null ++++ b/include/drm/drm_connector.h.rej +@@ -0,0 +1,13 @@ ++diff a/include/drm/drm_connector.h b/include/drm/drm_connector.h (rejected hunks) ++@@ -721,6 +721,11 @@ struct drm_display_info { ++ * monitor's default value is used instead. ++ */ ++ u32 max_dsc_bpp; +++ /** +++ * @dp_dsc_bpp: DP Display-Stream-Compression (DSC) timing's target +++ * DST bits per pixel in 6.4 fixed point format. 0 means undefined +++ */ +++ u16 dp_dsc_bpp; ++ }; ++ ++ int drm_display_info_set_bus_formats(struct drm_display_info *info, +diff --git a/include/drm/drm_displayid.h b/include/drm/drm_displayid.h +index 566497eeb..3a4bd0816 100644 +--- a/drivers/gpu/drm/drm_displayid_internal.h ++++ b/drivers/gpu/drm/drm_displayid_internal.h +@@ -131,12 +131,16 @@ struct displayid_detailed_timing_block { + + #define DISPLAYID_VESA_MSO_OVERLAP GENMASK(3, 0) + #define DISPLAYID_VESA_MSO_MODE GENMASK(6, 5) ++#define DISPLAYID_VESA_DSC_BPP_INT GENMASK(5, 0) ++#define DISPLAYID_VESA_DSC_BPP_FRACT GENMASK(3, 0) + + struct displayid_vesa_vendor_specific_block { + struct displayid_block base; + u8 oui[3]; + u8 data_structure_type; + u8 mso; ++ u8 dsc_bpp_int; ++ u8 dsc_bpp_fract; + } __packed; + + /* +diff --git a/include/drm/drm_displayid.h.rej b/include/drm/drm_displayid.h.rej +new file mode 100644 +index 000000000..61fbd38e0 +--- /dev/null ++++ b/include/drm/drm_displayid.h.rej +@@ -0,0 +1,18 @@ ++diff a/include/drm/drm_displayid.h b/include/drm/drm_displayid.h (rejected hunks) ++@@ -131,12 +131,16 @@ struct displayid_detailed_timing_block { ++ ++ #define DISPLAYID_VESA_MSO_OVERLAP GENMASK(3, 0) ++ #define DISPLAYID_VESA_MSO_MODE GENMASK(6, 5) +++#define DISPLAYID_VESA_DSC_BPP_INT GENMASK(5, 0) +++#define DISPLAYID_VESA_DSC_BPP_FRACT GENMASK(3, 0) ++ ++ struct displayid_vesa_vendor_specific_block { ++ struct displayid_block base; ++ u8 oui[3]; ++ u8 data_structure_type; ++ u8 mso; +++ u8 dsc_bpp_int; +++ u8 dsc_bpp_fract; ++ } __packed; ++ ++ /* DisplayID iteration */ + +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +index d4395b92fb85..6c7f589e19ac 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +@@ -136,6 +136,8 @@ enum dc_edid_status dm_helpers_parse_edid_caps( + + edid_caps->edid_hdmi = connector->display_info.is_hdmi; + ++ edid_caps->dsc_fixed_bits_per_pixel_x16 = connector->display_info.dp_dsc_bpp; ++ + apply_edid_quirks(dev, edid_buf, edid_caps); + + sad_count = drm_edid_to_sad((struct edid *) edid->raw_edid, &sads); diff --git a/content/docs/other/bigscreen-beyond-driver/_index.md b/content/docs/other/bigscreen-beyond-driver/_index.md index 9968f9d..4b5cd17 100644 --- a/content/docs/other/bigscreen-beyond-driver/_index.md +++ b/content/docs/other/bigscreen-beyond-driver/_index.md @@ -8,9 +8,29 @@ title: Bigscreen Beyond Driver You can get the "Bigscreen Beyond Driver" app from Steam working via Proton by following these instructions: 1. use a Proton version >=10 that has access to `PROTON_ENABLE_HIDRAW` env var; `Proton Experimental [bleeding-edge]` works well 2. set `PROTON_ENABLE_HIDRAW=0x35BD/0x0101 %command%` as your launch arg for the `Bigscreen Beyond Driver` under `Properties` -3. OPTIONAL: copy a SteamVR Windows install somewhere in the prefix (ie: C/ root) under appid 2467050 and when the driver is open, set the SteamVR path to where you placed the Windows install of SteamVR +3. OPTIONAL: download/copy a SteamVR Windows install somewhere and when the driver is open, set the SteamVR path to where you placed the Windows install of SteamVR -The "Bigscreen Beyond Driver" and all of its features should be working fine after doing the above! +The "Bigscreen Beyond Driver" and most of its features should be working fine after doing the above! + +Note that currently firmware updates do not work. + +## Download Windows SteamVR via SteamCMD +You can easily downlwad the Windows version of SteamVR via SteamCMD. To do this: +1. [Download SteamCMD](https://developer.valvesoftware.com/wiki/SteamCMD#Linux) +2. Run this command somewhere you can create directories (i.e., your home directory): +```sh +mkdir steamvr_win && steamcmd +@ShutdownOnFailedCommand 1 \ + +@sSteamCmdForcePlatformType windows \ + +force_install_dir $(realpath steamvr_win) \ + +login anonymous \ + +app_update 250820 validate \ + +quit +``` +This will: +- Create a directory in the current directory named `steamvr_win` +- Download and validate Windows SteamVR into it. + +Note: your home directory is accessible under `Z:\home` by default in Proton. ## Easier Device Mode Swapping diff --git a/content/docs/resonite/_index.md b/content/docs/resonite/_index.md index 59cf744..cbcf7ac 100644 --- a/content/docs/resonite/_index.md +++ b/content/docs/resonite/_index.md @@ -5,29 +5,11 @@ weight: 50 # Resonite -{{% hint info %}} - -**Note**: The Linux-native version of Resonite, amid deprioritization of developer time to fix its numerous issues, was put on indefinite hold in August 2024 and later removed in March 2025. This document only covers running under Proton. - -{{% /hint %}} - -{{% hint warning %}} - -Steam will sometimes try and run Resonite without using Proton. This may be due to the removal of the Linux native build. - -If Resonite fails to start, you may need to force Proton to be used. - -{{% /hint %}} - The current recommended Proton variant is [**Proton GE**](https://github.com/GloriousEggroll/proton-ge-custom/releases/latest). -[XRizer](/docs/fossvr/xrizer/) should now provide a close-to-flawless experience on most controllers and when using hand tracking. If you encounter any major issues you can fallback to [OpenComposite](/docs/fossvr/opencomposite/). +[XRizer](/docs/fossvr/xrizer/) should now provide a close-to-flawless experience on most controllers and when using hand tracking. -## Visual bugs - -There are some minor visual bugs specific to running Resonite on Proton, such as textures taking longer to load and appearing black for a few seconds when close to the player. - ## Mirrors look cross-eyed When playing Resonite under [Monado](https://lvra.gitlab.io/docs/fossvr/monado/) or [WiVRn](https://lvra.gitlab.io/docs/fossvr/wivrn/), the 3D effect of mirrors may appear way off, as if looking through them feels like your eyes are crossed. This only affects headsets with canted displays (e.g. Valve Index, Pimax). @@ -36,13 +18,52 @@ To solve this, prepend `OXR_PARALLEL_VIEWS=1` to Resonite's launch options. ## Performance -Resonite currently runs under an extremely old version of Mono runtime required by Unity, which has very poor Garbage Collection causing frequent lag spikes and frame hitching during asset loading and unloading. Very soon, Resonite will be updated to use .NET 9, a far more modern and bespoke runtime, with Unity running on a separate thread only for rendering the game. Eventually Unity will be replaced by a custom rendering engine as well. +In August 2025, Resonite updated to run FrooxEngine as a native Linux process, with the renderer being run through Proton. -The main developer and owner of Resonite goes into more detail [here](https://youtu.be/9cx2-VtL_LM&t=16). - -In larger sessions Resonite is typically CPU-bound, there isn't much that can be done besides upgrading your CPU. In situations where the GPU is a bottleneck, lowering the resolution (either in the OpenXR runtime or through OpenComposite) may help dramatically. +Resonite is typically GPU-bottlenecked. Lowering the resolution may help. This can be easily done by prepending `OXR_VIEWPORT_SCALE_PERCENTAGE=75` to Resonite's launch options. Experiment with different values to find your preferred balance between performance and quality. +## Clipboard + +As of the splittening release, Resonite only supports copy/pasting text, and does not work at all in Flatpak Steam with Wayland [(issue)](https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/5321). + +This mod provides full clipboard functionality, but only works on Wayland: https://github.com/GrandtheUK/ResoniteLinuxClipboard + +## Audio Issues + +Resonite uses SDL for audio on Linux, but the current implementation can be a bit flaky. + +In particular, the WiVRn microphone [is known to be glitchy](https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/5260). + +It is recommended that you use PipeWire as your system's audio service, including its PulseAudio and ALSA support. + +The game will default to the PipeWire API if it can, falling back to the PulseAudio API. + +### Glitchy audio + +The most straightforward way to fix a glitchy microphone is to use SDL's ALSA driver with `SDL_AUDIO_DRIVER=alsa %command%` as the launch argument on Steam. + +If that doesn't work, you can try forcing the other drivers by specifying `pipewire` or `pulseaudio` instead of `alsa` in the above launch arguments. + +If you want to use the PulseAudio driver, you may need `SDL_AUDIO_DRIVER=pulseaudio PULSE_LATENCY_MSEC=15 PULSE_BUFFER_MSEC=250 PULSE_FRAGMENT_SIZE_MSEC=25 %command%` as the launch arguments. + +### Virtual audio sources/sinks + +To be able to chose a virtual sink, you have two options: + +1. Use `SDL_AUDIO_INCLUDE_MONITORS=1`, but this works with the PulseAudio driver *only* (add it next to your other env var in launch arguments). +2. Select any other source in Resonite, and manually connect the wanted input or output to Resonite's sink using a PipeWire graph GUI (e.g. Coppwr, Qwpgraph, Helvum) + +Do note that for the Audio Stream feature of Resonite, you'll need to select a different source that the one you are using as your microphone, or else SDL will **not** create a sink dedicated for it. If you only have one input, use the Steam voice option. + +### Flatpak + +The PipeWire driver is not supported by Steam Flatpak OOtB, see [this issue](https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/5261#issuecomment-3228033460) if you need to use the PipeWire driver on Resonite in Steam Flatpak. + +## FlipVR controller support with Monado + +Currently there is an experimental Monado branch that works with Shiftall FlipVR controllers. Instructions can be found [here](/docs/fossvr/monado/flipvr/). At the time of writing, this branch is the only way to use FlipVR controllers with Resonite, as they are not supported even through SteamVR on Windows. + ## Mods Resonite has a thriving modding community with an abundance of [mods](https://wiki.resonite.com/Mods) that offer greater user experience, optimizations and new features. @@ -59,25 +80,36 @@ You can load RML mods with MonkeyLoader but not the other way around. The exact cause of this is currently unknown. Consider using MonkeyLoader if you encounter such issues starting the game as it seems to not cause the same problem. -### ResonitePlatformSpoof - -- [Mod Repo](https://github.com/isovel/ResonitePlatformSpoof) -- [Link to working version](https://github.com/isovel/ResonitePlatformSpoof/issues/2#issuecomment-2439588723) - - -{{% hint info %}} - -See [issue #2745](https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/2745#issuecomment-2573574108) for more context as to why the Linux badge isn't available for Proton users. - -{{% /hint %}} - -When the native Linux build of Resonite was still available, players are given a Linux badge to show others that they are running the native build of the client. When Proton is used to play the windows build of the game, you will not get the Linux badge. However, ResonitePlatformSpoof lets you 'spoof' your platform to the Linux native build and allows proton users to get the Linux badge. - ## Crashes -Resonite has been seen causing random SteamVR crashes on Linux before. In some situations the engine also tends to freeze. On OpenComposite, the game will rarely close out on its own without leaving any obvious trace of things going wrong — this is being investigated. +### Renderer issues -The cause of these issues and whether they are Proton-specific isn't currently known. +Resonite's renderer is known to randomly crash suddenly - this is currently tracked at https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/5325. + +There is also a known memory leak when running the renderer on Linux - however, it is uncertain currently whether this is an issue with Proton or there is something else at play - see https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/5246. + +### Crash on launching in VR mode + +Currently, OpenComposite is known to crash Resonite when used in VR, so attempting to use OpenComposite for Resonite is not recommended. + +Symptoms: +- Crashes only in VR mode, where after several seconds a black window appears and closes briefly, then Resonite stops within approximately 30 seconds. +- The normal log file shows a renderer crash: `RendererProcess has exited. Shutting down.`. There's a Player.log file. + +See https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/5152 for more information. + +### Crash on launching in desktop & VR mode + +Proton data can get corrupted, which will result in consistent crashes on launch. This only applies if you've already replaced OpenComposite (see above). + +The symptoms are: +- Crashes 2 seconds from launch in desktop mode (and in VR) +- No log files (no main log, no Player.log, no crash log, no proton log with PROTON_LOG=1, only the boostrapper log) +- It may be accompanied by error windows if you're using a mod loader. + +Navigate to compatdata in the folder above Resonite's folder (by default `.local/share/Steam/steamapps/compatdata/`) and delete the `2519830` folder; it will regenerate on the next launch. Then verify the integrity of Resonite files in Steam (right-click Resonite and go to Properties>Installed Files>Verify). + +It may be enough to just verify file integrity in some cases. ### Crash on loading into a world with video players diff --git a/content/docs/slimevr/_index.md b/content/docs/slimevr/_index.md index d7615d2..1099f8b 100644 --- a/content/docs/slimevr/_index.md +++ b/content/docs/slimevr/_index.md @@ -22,7 +22,7 @@ Alternatively you can build it on your own, and you have a few variants to choos - [Frozen Slimes V2](https://github.com/frosty6742/frozen-slimes-v2) - while a bit bigger, Frozen Slimes V2 tend to be cheaper and a lot easier to build, being approachable even for people that are inexperienced with soldering -It's generally **highly recommended** to opt for the more expensive but higher quality [BNO085](https://shop.slimevr.dev/products/slimevr-imu-module-bno085) IMU module. This should offer the highest quality tracking with best precision and minimal drifting. +The **current recommended** IMU Modules are the [ICM-45686](https://shop.slimevr.dev/products/slimevr-mumo-breakout-module-v1-icm-45686-qmc6309), [LSM6DSV](https://moffshop.deyta.de/products/lsm6dsv-module) and [LSM6DSR](https://moffshop.deyta.de/products/lsm6dsr), The ICM-45686 is currently considered the best IMU with a reset time of 45-60 minutes but is more expensive compared to the other options. If you're looking for a budget option, the LSM6DSR comes at around half the price of the others with reset times of 45-50 minutes. ## Installing SlimeVR Server diff --git a/content/docs/steamvr/quick-start.md b/content/docs/steamvr/quick-start.md index 841c4cc..1b796b7 100644 --- a/content/docs/steamvr/quick-start.md +++ b/content/docs/steamvr/quick-start.md @@ -42,7 +42,7 @@ sudo setcap CAP_SYS_NICE=eip ~/.local/share/Steam/steamapps/common/SteamVR/bin/l **Vive Pro 2** will need the driver from here: [VivePro2-Linux-Driver on GitHub](https://github.com/CertainLach/VivePro2-Linux-Driver) -**Bigscreen Beyond** requires a patched kernel: [Bigscreen Beyond Kernel Patch](https://gist.githubusercontent.com/TayouVR/af8635a4b8e1d02d038be1be1d221c83/raw/3806a6ff0a03721904164277d7523d43f7ca383c/bigscreenBeyond.patch) +**Bigscreen Beyond** requires a patched kernel: for [<= 6.14](https://gist.github.com/galister/08cddf10ac18929647d5fb6308df3e4b/raw/0f6417b6cb069f19d6c28b730499c07de06ec413/combined-bsb-6-10.patch) and [>= 6.15](../../hardware/bigscreen-beyond-kernel-6.15.patch) For any of the above headsets with {{< icon name="nvidia" >}} Nvidia, you will get a smoother experience with Monado + OpenComposite (use Envision for easy setup), albeit this combo does not work with all VR titles. diff --git a/content/docs/vrchat/pictures.md b/content/docs/vrchat/pictures.md new file mode 100644 index 0000000..192333c --- /dev/null +++ b/content/docs/vrchat/pictures.md @@ -0,0 +1,17 @@ +--- +weight: 150 +title: Pictures +--- + +# Pictures +By default, all pictures taken inside of VRChat will save inside the Wine prefix (`/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/Pictures/VRChat`). + +This can be a hassle to reach if you need to access VRChat pictures regularly. If you would like to link this folder to your user's regular Pictures folder, you can do so with the following steps: + +1. Install [protontricks](https://github.com/Matoking/protontricks) +2. Run `protontricks 438100 winecfg` +3. Select "Desktop Integration" +4. Select "Pictures" under folders, enable **Link to** and browse to your system's Pictures folder. + - eg. `/home/user/Pictures` +5. Apply and save. +6. Your VRChat pictures should now save to your regular pictures folder. diff --git a/content/docs/vrchat/unity.md b/content/docs/vrchat/unity.md index 2128675..6684249 100644 --- a/content/docs/vrchat/unity.md +++ b/content/docs/vrchat/unity.md @@ -142,6 +142,18 @@ A dialog may appear upon trying to build an avatar, where none of the buttons ar This seems to happen consistently if the projects are stored on an EXFAT partition. Consider using another filesystem, such as NTFS if you still need projects accessible under both Windows and Linux. +### Built avatar appears non-stereoscopic to me and everyone else + +Ensure the filesystem your project is on has not been mounted with `noexec`. + +With `noexec`, the shader compilation plugin from VRCSDK will fail with a warning: + +> Plugins: Couldn't open /run/media/blahblahblah/MyProject/Packages/com.vrchat.base/Editor/VRCSDK/ShaderCompilerPlugin/Plugins/Linux/x86_64/libvrc_shader_compiler_plugin.so, error: [...]: failed to map segment from shared object + +Even though the plugin fails to load, the avatar will upload anyway, without including the Double Wide Rendering shader variants necessary for VR. + +The `noexec` mount option may also contribute to other issues such as being unable to run any binaries from inside the project, such as avatar patchers. + ### Crashing frequently with Nvidia On some systems running Nvidia graphics, the Unity Editor may crash frequently from common actions like importing a unitypackage or dragging a file.