Sorenon OpenXR Layer

(I'm not good with names)

As of writing, both the SteamVR and WMR OpenXR runtimes have a few significant issues / missing features. WMR does not provide any OpenGL / Vulkan extensions and SteamVR on Linux is essentially broken.

WMR's issues can be fixed through the use of SteamVR.
This existing layer also attempts to fix SteamVR's GLX support and may be more performant (but has some stability issues).

How the layer works

When the application creates an OpenGL session, the layer creates a Vulkan session and uses external memory extensions to share swapchain images between the apis. This adds the extra overhead of creating a second swapchain to expose to the application, and one draw call in xrReleaseSwapchainImage to copy and transfrom the image into the OpenXR swapchain.

There are some notable areas that can be improved. Mainly using an interop semephore instead of a glFinish call and passing a fence to an async thread instead of a vkQueueWaitIdle call.

Fixes:

Does not fix:

Installation instructions

  • Install the Rust toolchain
  • Clone this repository
  • Install with cargo run --release
  • Uninstall with cargo run --release uninstall

Current TODO:

  • OpenGL Frontend
  • Vulkan Backend
  • Linux Installer
  • Correctly handle sRGB formats
  • Investigate improving performance

If perfomance impact can be minimized:

  • D3D11 Backend
  • Vulkan Frontend
  • Windows Installer
  • FSR / NIS
  • Attempt to deal with other runtime bugs