# EDVR: an unofficial patch for Elite Dangerous in VR DLSS, FSR and XeSS upscaling for Elite in VR, and two dozen fixes for things that make Odyssey uncomfortable in a headset, in a native OpenXR package that takes about three minutes to install. [Upscaling: DLSS, FSR and XeSS](#upscaling-dlss-fsr-and-xess) covers the upscalers. The short list of fixes is under [What it fixes](#what-it-fixes), and [docs/fixes.md](docs/fixes.md) describes each one in full. If something is not working, [open an issue](https://github.com/characterecho-sean/edvr-unofficial-patch/issues/new/choose). Bugs get fixed there because you can attach the log, and the log usually shows the cause. The [Discord](https://discord.gg/AWJ6djKKzr) is for setup questions, "is this normal", or just talking about it; chat loses attachments and threads, so bug reports belong in an issue. To contribute code, start with [the build and validation guide](docs/building.md), make the change in your fork, and open a pull request with the checks you ran. C++ changes need a full native Windows validation build. For rendering changes, say which headset and VR runtime you tested, or say that a headset flight is still needed. The maintainer handles merging and releases. EDVR is free and stays free. If it improves your VR experience, [tips are welcome](https://ko-fi.com/seancharacterecho), but please do not feel any obligation. > **Already running EDHM or ReShade?** Both run alongside EDVR. EDHM also > installs itself as `d3d11.dll`, and only one file can have that name, so > don't overwrite it. The installer handles this for you; by hand it takes one > rename and one setting, described under [Running alongside other > mods](#running-alongside-other-mods). ReShade has needed nothing at all since > 0.7.2. ## Headsets and VR runtimes EDVR's native OpenXR route has been checked in the field on Pimax over PiOpenXR, Quest 3 over Virtual Desktop's VDXR, and the latest Air Link flight. Nothing is claimed for other headsets and runtimes. Elite still starts VR through its OpenVR-facing path, and EDVR keeps that entry point for compatibility; behind it, EDVR's native runtime owns the OpenXR session. The bundled Khronos loader reaches whichever runtime Windows has set as its active OpenXR runtime, whether SteamVR, PiOpenXR, VDXR or Meta's, and all of them run on the same native EDVR backend. The package has no backend to choose and never falls back to the legacy EDVR pair; Elite's legacy LibOVR path is not supported, even as a fallback. The release installer checks the Elite executable's profile and refuses Elite Dangerous (Horizons) or an unreadable executable before it writes anything. An Odyssey revision that build was not checked against installs with a warning: the game starts, the fixes tied to the game build stand down and the gfx log names each one, and the Oculus PC runtime may bypass EDVR's OpenXR runtime until an EDVR update for that revision. Before launching Elite, set the Windows active OpenXR runtime to the one you intend to use, since that is the one the bundled loader picks, and make sure that runtime is available and your headset connected. EDVR needs no SteamVR loader; do not install OpenComposite or a vendor OpenXR loader to make it work. Then launch Elite as you normally would. Canted Pimax headsets (Vision 8K X, 8K Plus, 8K, 5K Super, 5K Plus, 5K XR and Artisan) should turn "Enable Parallel Projection" off in Pimax Play and restart the game. EDVR renders canted displays correctly without it. With it on, the headset renders much larger frames (8268x3948 instead of 5016x3160 per eye on an 8K X at FOV Wide), and turning it off cut GPU time by up to about 30% in testing. This works with PimaxXR as the OpenXR runtime; with Pimax Play's own OpenXR runtime the toggle may have no effect. When EDVR sees the setting on with PimaxXR, it shows a notice in the headset. ## Install **Download `edvr-installer-.zip` from the release, unzip it, and run `edvr-installer.exe`.** It is a single file once unzipped, with nothing else to extract or put in the right folder, and it carries the native graphics/runtime pair, the bundled OpenXR loader and its notice, `edvr.ini`, `edvr-flat.ini`, and the optional DLSS runtime. It finds the game and keeps your settings and other mods working. Before it changes anything, it shows you exactly what it is about to do and waits for a yes, and it copies every file it replaces into `edvr_backup\` first. [docs/installer.md](docs/installer.md) covers its buttons and explains what it decides and why. The same installer serves flat-screen players. Under "Install EDVR for:", choose "VR and flat" (the default), "VR only" or "Flat only"; the choice can be changed later with an ordinary Update, and no settings file is deleted by it. Because the installer is unsigned, Windows will say the program is unrecognised; choose **More info → Run anyway**. Every release lists the installer's SHA-256, and without a signature that hash is the only way to check where the file came from. To place the files yourself, follow [docs/manual-install.md](docs/manual-install.md), which is the same install done by hand. It shows where each file goes and covers the `openvr_api.dll` rename that most manual installs get wrong. ### Linux on Steam (Proton) Download `edvr-installer-linux-.zip` from the release and unzip it. It contains `edvr_installer.sh`, `edvr-installer-linux.py`, the Windows `edvr-installer.exe`, and `README-linux.txt`. The launcher needs Python 3 and the Proton installation already used by Steam. It needs no Protontricks or system Wine. Run Elite once from Steam, then close it. On Steam Deck, use Desktop Mode and run as your normal user: ```sh ./edvr_installer.sh ``` This opens the Windows installer GUI with the Odyssey product folder preselected. For a flat install with a current installer build: ```sh ./edvr_installer.sh --install --scope flat ``` To see the Windows install plan without changing game files: ```sh ./edvr_installer.sh --preview --scope flat ``` Preview starts Steam's Proton and runtime and may update prefix bookkeeping. `--dry-run` resolves and prints the exact launch command without starting anything or writing files. See `README-linux.txt` in the ZIP for options. The shell launcher forwards all options to the Python wrapper; you can also run `python3 edvr-installer-linux.py` directly. ### Checking it worked Logs appear in `edvr_logs\` next to the game, and there are two of them. Once the native OpenXR path is up, the second one, with `vr` in its name, says `runtime,,`, naming the runtime it reached; an `error,` line in its place means that startup step failed. **If there is no second log at all**, the game is not on its OpenVR path and half the patch never loaded: see [Headsets and VR runtimes](#headsets-and-vr-runtimes). If you still see a flash, press **Pause** straight after it and send the logs. Pause writes the temporal pass's recent camera history and says whether the jump-flash hold was armed. A `transition flash: frame N held` line near the moment means EDVR held a frame and the flash got through anyway; no such line means it held nothing. ### Reporting a problem **Run `edvr-installer.exe` and press Save logs.** It writes one zip to your Desktop with the last session's two logs, `edvr_breadcrumbs.txt`, any `edvr_FATAL.txt`, your `edvr.ini` and, on a VR install, the OpenXR runtime's `edvr_openxr.ini`. That is everything listed below, all from the right session. Then **open an issue** and attach the zip. If the game crashed in that session, Save logs also writes a second zip, `edvr-crash-dump-