For Headset Developers
VR SLI and multi-res shading are features targeted mainly at developers building engines for VR games. But GameWorks VR also includes a few more low-level features designed for VR headset developers to take advantage of in their own platform software.
Direct Mode and Front Buffer Rendering
Anyone who’s worked with a VR headset has probably had the experience of their system naively treating it like just another monitor: extending the desktop onto it, randomly moving application windows to it, causing screen flashes when you plug it in, and so on. But a VR headset isn’t just another monitor, and treating it as such just creates unnecessary friction for users.
With Direct Mode, the display driver recognizes a headset when it’s plugged in and hides it from the operating system, preventing all those user-experience problems while still allowing VR apps to render to the headset. This also has some handy side effects: we can ensure we’re always in fullscreen-exclusive mode on the headset without any interference from the OS, and we can offer VR headset developers precise control over frame queuing and vsync behavior. That not only improves the user experience, it helps ensure that the latency between rendering and display scan-out is as low as possible.
Another benefit of Direct Mode is that we can expose the ability to render directly to the front buffer—i.e. the buffer currently being scanned out to the display. Although it takes advanced low-level know-how to make use of this feature, it can help reduce latency still further, using tricks like rendering during vblank or racing the beam.
To provide the most comfortable VR experience, games would ideally run perfectly consistently at 90 FPS, never missing a single frame. Unfortunately, with multitasking operating systems, memory paging, background streaming, and so forth, there are a lot of things going on that can cause even a perfectly optimized game to occasionally stutter or hitch. Missed frames are annoying even when playing on a regular screen, but in VR they’re incredibly distracting and even sickening.
To help fight this problem, we enable the option to create a special high-priority D3D11 device in our driver. When work is submitted to this device, it preempts whatever else is running on the GPU, switches to the high-priority context, then goes back to what it was originally doing afterward. This supports features like async timewarp, which can re-warp the previous frame if a game ever stutters or hitches and doesn’t deliver a new frame on schedule.
That’s GameWorks VR! NVIDIA is really excited about the future of virtual reality, and is working hard to bring the fastest GPUs and best tools for developers to build amazing VR experiences. For developers interested in receiving our SDK, they can learn more and register at developer.nvidia.com/vr.