● OpenXR · DX11 · DX12 · Vulkan

ONE CLICK. ANY GAME IN VR.

Turn your entire flat PC library into immersive 6DOF VR with a single click. Stereix Engine hooks the graphics pipeline while your game runs, reconstructs real-time stereo depth, and hands it straight to your OpenXR headset.

3Graphics APIs
6Shipped profiles
11.1msFrame budget

What happens per frame

Six stages, one frame.

The game never knows it is being watched. Stereix Engine detours the swapchain, finds the camera on its own, and rebuilds the frame in stereo before the game's own present call ever returns.

  1. Present() hooked

    A MinHook detour lands on the swapchain's present call. One hook manager owns the whole lifecycle — installation, trampolines and teardown — so nothing is left patched in the process on exit.

    HookManagerMH_InitializeIDXGISwapChain::PresentvkQueuePresentKHR
  2. Backbuffer acquired

    The lifecycle manager validates the epoch and pulls the live backbuffer — the exact surface the game was about to show your monitor. A resize or a device reset bumps the epoch, and every cached view is dropped rather than reused.

    Dx11LifecycleManagerDx12LifecycleManagerVulkanLifecycleManager
  3. View matrix locked

    Candidate matrices are collected from constant buffers and scored until the real view and projection lock in. Scoring is what makes this general: no per-game patching, no hex editing, no signature that breaks on the next update.

    CandidateCollectorCameraLockManager
  4. Depth reconstructed

    The depth buffer is identified the same way — candidates in, scored, locked. Depth is what turns a flat image into geometry your eyes can actually converge on. Without it both eyes receive almost the same picture and the scene reads as a photograph.

    DepthCandidateCollectorDepthLockManager
  5. Stereo pair warped

    Compute shaders reproject the frame into a left and a right eye, then fill the disocclusions that reprojection opens up along every silhouette edge — the slivers of world that one eye can see and the other never had pixels for.

    FrameCoordinatorReprojection CSDisocclusion fill
  6. Submitted to OpenXR

    Both eyes go to your runtime — SteamVR, Meta Quest Link, WMR — in the runtime's own frame loop rather than on the game's clock. Depth ships alongside the colour layer so the runtime's spacewarp has something to reproject against when a frame runs late.

    xrWaitFramexrBeginFramexrEndFrameOpenXRFrameSubmitter

Three graphics APIs

One pipeline, three doors.

The six stages are the same everywhere. What changes is where the hook lands and what the API demands in return — DirectX 12 and Vulkan hand you explicit control of submission, and getting that ordering wrong is how an injector deadlocks a game instead of rendering it.

DirectX 11

DX11
  • Hook pointPresent · ResizeBuffers
  • ContextImmediate
  • StateSaved and restored
  • Resource accessDirect from swapchain

The forgiving one. The runtime manages submission, so the work is mostly state hygiene — capture what the game had bound, do the stereo pass, put it all back exactly as found.

DirectX 12

DX12
  • Hook pointPresent · Present1
  • QueueGame's main queue
  • OrderingSTRICT FIFO
  • BarriersExplicit transitions

Every stereo dispatch and copy is submitted to the game's own command queue rather than a private one. A second queue would race the game's rendering and tear; single-queue FIFO is the contract that keeps the frame coherent.

Vulkan

VK
  • Hook pointvkQueuePresentKHR
  • MechanismDispatch table
  • Untracked devicesPass-through
  • Recursion guardTRAMPOLINE

Resolution goes through the original vkGetDeviceProcAddr, never the hooked one — returning a patched pointer to a lookup for that same pointer is an infinite recursion. Devices created before injection are passed through untouched.

A wrapper that targets a game engine only works on that engine. Hooking at the API layer means the engine underneath — Unreal, Unity, RE Engine, something in-house — stops being a question the injector has to answer.

Shipped profiles

Tuned, not guessed.

Every game hands its matrices over differently. A profile records what that game does — depth direction, matrix order, colour space — so Stereix gets it right on the first launch instead of the fifth. These ship in the box.

Profiles are plain JSON in profiles/. Adding a game takes about three minutes and no C++. Community profiles also verified for Mortal Shell and custom DirectX titles. Game names are used only to identify compatibility; all trademarks belong to their respective owners, who are not affiliated with this project.

What the flags mean

Four questions per game.

Each flag is a convention the game chose and never documented. Guess wrong and the failure is specific and recognisable — which is what makes these worth reading before you file a bug.

reverseZ

Depth stored from 1 at the near plane to 0 at the far plane instead of the other way around — it buys back floating-point precision in the distance. Read it backwards and the world turns inside out: distant geometry converges in front of your face.

rowMajor

Which way the matrix is laid out in memory. Transposed against the game's actual convention, the extracted camera basis is wrong in a very visible way — the horizon tilts, or the view ends up rotated ninety degrees off.

srgb

Whether the backbuffer is already gamma-encoded by the time Stereix sees it. Apply the transform twice and the image washes out; skip one that was needed and the blacks crush and the midtones go muddy.

depth

Whether the depth buffer is submitted to OpenXR alongside the colour layer. Runtimes use it for spacewarp and late-stage reprojection, so submitting it is what keeps motion smooth when the GPU misses the deadline.

Writing one yourself

A profile is the seven fields the cards above are drawn from, and nothing else. Drop the file in profiles/ and restart the launcher — there is no build step, no registration list, and no C++.

An unprofiled game is not blocked. The matrix and depth search runs regardless; a profile just means the search starts from known-correct answers instead of converging on them. Unprofiled titles are more likely to lock slowly, lock wrong, or not lock at all.

// profiles/palworld.json
{
  "name":     "Palworld",
  "engine":   "Unreal Engine 5",
  "api":      "DX12",
  "reverseZ": true,
  "rowMajor": true,
  "srgb":     true,
  "depth":    true
}

Inside the engine

Built for the whole library.

API-level hook

Not locked to one engine

Wrappers that target Unreal only work on Unreal games. Stereix Engine hooks at the DirectX and Vulkan layer instead, so the engine underneath stops mattering.

DX11 · DX12 · Vulkan — MinHook detour

In-headset dashboard

Quick-tune without taking it off

Press the controller menu button or gamepad combo (L3+R3) to summon the native ImGui VR overlay. Tweak IPD, convergence depth, and world scale live in stereo.

Universal ImGui overlay · DX11 · DX12 · Vulkan

Comfort guard

Keeps your stomach out of it

Dedicated shaders watch for the motion that causes sickness and vignette the periphery before it reaches you.

Peripheral vignette — strength adjustable

Spacewarp

Frames that hold up

Adaptive interpolation fills in for the frames a heavy scene cannot deliver, so the headset stays at rate even when the GPU does not.

Depth layer submitted with every frame

Steam scan

Finds your library itself

The launcher reads your local Steam libraries, matches what it finds against known profiles, and lists what it can run.

Reads libraryfolders.vdf from disk

Runtime & Telemetry

Knows your headset

Reads the active OpenXR runtime from the registry (Quest Link, SteamVR, Virtual Desktop, PSVR2) and streams live per-stage hook telemetry as you play.

ActiveRuntime auto-resolve · streamed live telemetry

!

Single-player only. This is enforced, not advised.

Injecting into a multiplayer game protected by Easy Anti-Cheat, BattlEye or Vanguard can get your account permanently banned. Stereix Engine detects those systems and refuses to inject — there is no override switch and no flag to turn it off. Use it on single-player and unprotected titles.

It also will not attempt to defeat kernel-level anti-cheat, and it never will. That is a line the project does not cross.

Tier 1

Single-player, no anti-cheat. Nothing is watching the process and nothing can be banned (e.g. Cyberpunk, Hogwarts Legacy, Sekiro).

Supported
Tier 2

Mod-friendly / Offline mode. Client anti-cheat disabled (e.g. Elden Ring offline with EAC disabled). Supported strictly in offline single-player.

Supported Offline
Tier 3

Kernel-level or active online multiplayer. Vanguard, BattlEye, Ricochet, live EAC. Refused before injection touches memory to safeguard your accounts.

Refused (Safe)

The check runs before any hook is installed, on the target process rather than on a list of game names — so a title that adds anti-cheat in a later patch is covered without waiting for an update here.

Setup

Four steps, once.

01

Install

Run the Windows installer. It places the launcher, the injector DLL and all six shipped profiles. Nothing is installed into your games.

02

Open the launcher

It reads your Steam libraries from disk and lists the titles it recognises, along with which of them have a profile.

03

Start your runtime

Quest Link, SteamVR or WMR — whichever you already use. The active OpenXR runtime is detected from the registry, not asked for.

04

Pick a game and inject

Launch the game, then attach. Watch the log for the camera and depth locks; when both land, the flat panel resolves into stereo.

Attaching to an already-running game is the supported path. Injection is runtime — the DLL is loaded into the live process, no game files are modified, and closing the game unloads everything.

Troubleshooting

When it goes wrong.

Will this get my account banned?

On a single-player game with no anti-cheat there is nothing watching the process and nothing to ban. On a protected multiplayer game, injecting a DLL into the render pipeline is precisely the behaviour anti-cheat exists to catch — which is why Stereix Engine refuses to attach to those processes at all. Treat any title shipping Easy Anti-Cheat, BattlEye or Vanguard as off-limits.

The game runs, but the headset shows it flat — like a cinema screen.

That is the passthrough fallback, working as designed. Stereo engages only once both the view matrix and the depth buffer are locked, and menus, loading screens and cutscenes frequently present neither. Rather than go black, the flat frame is copied into both eyes. Move into actual gameplay and it should converge within a second or two.

My game isn't in the list. Does it still work?

It may. Profiles are an accelerant, not a requirement — the matrix and depth search runs on every title. A profile means the search starts from known-correct answers instead of converging on them, so unprofiled games are more likely to lock slowly, lock wrong, or fail to lock.

If it works, the settings that made it work are a profile. Write them down and drop the JSON in profiles/.

Will it run on my GPU?

Stereo asks for close to twice the pixels of the flat game. Reprojection and spacewarp absorb some of that cost, not all of it. The reliable predictor is headroom: if the game already runs comfortably above your headset's refresh rate on a flat monitor, you have somewhere to spend. If it barely holds 60, stereo will not rescue it.

Does it need an internet connection?

No. Injection, profile matching and OpenXR submission are entirely local. The launcher reads your Steam library from disk and your active runtime from the registry.

Does it modify my game files?

No. The DLL is loaded into the running process at runtime and every hook is removed on exit — the hook manager owns installation and teardown as one lifecycle specifically so nothing is left patched behind. Closing the game returns it to exactly the state it shipped in.

Get it

Install it. Pick a game. Put the headset on.

Get early access

Join the Engine Waitlist

Leave your email to receive early access the moment Stereix Engine lands. One message when Engine lands — no spam, nothing else.

🔒 Secured via Cloudflare KV. Single notification upon launch. No ads, tracking pixels, or third-party sharing.


What the installer places

  • Launcher — library scan, runtime detection, live telemetry log
  • Injector & CLI — vrinject.dll + vr-inject-cli.exe
  • Curated Profiles — ready-to-run JSON profiles in profiles/

Nothing is written into your game directories, and no launch options are changed.

Requirements

  • Windows 10 or 11, 64-bit
  • A headset with an OpenXR runtime — Quest Link, SteamVR or WMR
  • A game running DirectX 11, DirectX 12 or Vulkan
  • Steam, for library auto-detection
  • GPU headroom on the flat game — stereo roughly doubles the pixels

Known headsets

  • Meta Quest 3 / Quest 2 / Quest Pro — Link, AirLink, or Virtual Desktop
  • Valve Index & HTC Vive — SteamVR
  • Bigscreen Beyond — SteamVR
  • PlayStation VR2 on PC — Official Sony PC Adapter & SteamVR
  • Any 6DOF headset exposing an OpenXR runtime

Runtimes

  • Meta Quest Link — wired, or Air Link over Wi-Fi 6
  • SteamVR — Index, Vive, and most third-party headsets
  • Windows Mixed Reality — where still supported by the OS
  • Virtual Desktop — via its own OpenXR runtime

Whichever one is registered as active is the one that gets the frames. Set it in your runtime's own settings before attaching.