An investigation of Nvidia’s SPS

An investigation of Nvidia’s Single Pass Stereo (SPS) Technology

Like many sim-racers, after a year or two in the hobby, I eventually grew weary of the inconsistency and mayhem of public lobbies typically found in otherwise respected titles like Assetto Corsa, Project Cars 2, et al. As a resident of r/simracing, the ever-present answer to my annoyance just sat there, waiting: iRacing.  I originally avoided iRacing for some time due to perceived issues of high cost, steep learning curve, etc. Yet once I decided to give it a try, I ended up diving in head-first.

Formula Renault 2.0: iRacing

Without a doubt, iRacing brings some of the most challenging and consistent competition possible in Simracing.  With some minor setup required, it presents an amazingly realistic depiction of autosport in its various forms, especially in VR.  It’s when setting up iRacing for maximum performance in VR (or for any PC game) that one inevitably happens upon spurious guides and agreed-upon ‘facts’ that are, for better or worse, repeated often without substantiation.

One of the most oft-repeated maxims for those wishing to run iRacing in VR with the best possible performance is to “run an Nvidia GPU so you can turn on Single Pass Stereo (SPS).”  As the owner of an EVGA GTX 1080 Ti, this presented no issue, so I enabled the little check-box and didn’t give it a second thought.

‘The Box’ – SPS Toggle in iRacing

Fast forward to Fall 2020:

My Oculus Rift S is a good VR headset, and in many ways a solid improvement over the now ‘old’ CV1. For various reasons, however, I’m looking to upgrade.  Knowing that my trusty GTX 1080 Ti won’t be able to push the upcoming HP Reverb G2 or Valve Index HMDs to their maximum, I have accepted that my next GPU would be either an Nvidia RTX 3080 or a RTX 3090. Either of these cards will push the aforementioned HMDs to the max and run SPS.

Recently though, some thoughts have begun to nag at me:

Limiting upgrade choices because of one feature seems to be rash.  Am I disregarding any of the upcoming AMD RDNA 2 GPUs just because of a checkbox?  What if RDNA 2 proves to be a powerful solution and a viable upgrade?!  Lastly, just what is Single Pass Stereo, and does it really improve performance?

Nvidia VRWorks Single Pass Stereo Technology

First, one has to understand that SPS is a part of a larger suite of VR-enabling and improving technologies known collectively as VRWorks.

 “VRWorks™ is a comprehensive suite of APIs, libraries, and engines that enable application and headset developers to create amazing virtual reality experiences. VRWorks enables a new level of presence by bringing physically realistic visuals, sound, touch interactions, and simulated environments to virtual reality.”

Source: Nvidia

Looking deeper, Nvidia states that Single Pass Stereo (SPS) utilizes a “Simultaneous Multi-Projection architecture” which is found in Pascal-based GPUs.  A further evolution of SPS found in both Turing and now Ampere GPUs, is Multi-View Rendering, or MVR.  Additionally, it is worth noting that AMD has a similar VR technology suite: LiquidVR.  However at the time of this article, iRacing does not explicitly support any SPS-like function on current AMD GPUs.

For the scope of this article, we will focus on Nvidia Pascal-based GPUs and iRacing’s execution of SPS. We anticipate future testing with Turing, Ampere, and with RDNA2.

While conducting research for this article, I happened upon the work of Ilias Kapouranis. In his series of articles, several bits of SPS are clarified and explained. One major takeaway of SPS is found in the following quote:

“Notice that Single Pass Stereo is reducing the processing time for geometry while leaving the processing of the pixels the same. This is the most important thing to remember and it is the source of the frustration of many developers that have implemented/enabled SPS but don’t see any improvements.”

First, let’s look at our test setup and benchmarking methods.

Contents

14 COMMENTS

  1. Great testing approach, and interesting results! iRacing is a difficult platform to benchmark, and I appreciate your investigation into SPS. It seems no other websites take it on even though the community is hungry for professional performance investigations. Keep it up!

    • Thanks Billy. One of my primary goals was to create a live, repeatable-test for iRacing. Ai Racing with the settings selected proved to be extremely consistent, as proven out by the frametime plots. With all the new hardware coming, I will be testing in iRacing, ACC, and various flight sims.

      Stay tuned!

  2. This was fantastic! Good testing method, and good use of metrics to showcase performance differences. I hope for many more articles like this!

  3. Thanks for taking the time but your conclusion is NOT valid in general, and valid only for 1 headset on 1 track on 1 GPU.
    To validate the test, you should try on different tracks, for example Barcelona is way more intensive on the CPU.
    You should try on different GPUs, RTX series have more efficient SPS.
    You should try on different CPUs, as SPS is relieving load on CPU.
    You should try on different headset, the FOV as a big impact on CPU load.

    Again, thanks for taking the time and the effort but the conclusion is quite useless ( unless you have exactly the same config ).

  4. “Evidently Single Pass Stereo does reduce the geometry workload with a tangible gain of 9.45% faster in worst-frametimes. However with all of the other work being done by iRacing, the GPU and VR software/HMD, this ends up a marginal gain lost in the process noise.”

    Personally I disagree with the conclusion. If the worst frametime drops below the 80-90fps threshold, there will be one instant where there will be either visible stuttering or Reprojection entering the scene. Usually that will happen in extremely intensive moments, during an overtake/braking point. And that could cause an accident. The worst frametime is exactly why SPS is a huge net gain in IRacing, preventing your headset from stuttering in critical moments.

    Also, IMO, the review should focus on the worst case scenarios – Barcelona, Belle Isle, Imola’s last corner, etc. Watkins Glen is…. Useless, when benchmarking VR, as it is one of the easier tracks on the system.

    With that said, excelent review/approach. I’m thinking about a good VR/review method, but was thinkings FpsVR, not FCAT. Currently on a 3700X/1070/Samsung Odyssey OG, with access to an 8700k(5.0ghz)/2080Ti and will also upgrade to Ryzen 5000/3080 when the time comes. Let me know if I can help on the review side too, as I think we should try to collect as much data as possible!

    • Luciano,

      Thank you for the feedback. Between here, Reddit, and the iRacing.com forum, I’ve been refining my test parameters for the RTX follow-up.

      When actually driving, when the system wasn’t overloaded and was all green on the ASW charts, there really weren’t any noticeable hitches, or micro-freezes. But, yes, a more complex track, and a doubling of cars is in order. Any new findings will be incorporated into my original article as an addendum.

  5. Good analysis, though I’d thought I might help clarify or add a few technical details.

    1. Most modern video cards rarely come close to their limits of raw geometry (vertex processing), but rendering is often bottlenecked either by the number of draw calls per frame or fillrate (number of screen pixels requiring work to be filled in by your pixel shaders). As you said, SPS doesn’t help the latter- however it can still reduce overall frame times.

    2. SPS (and MVR) helps greatly in drawcall-limited scenarios (can be over 50% in my experience), where the CPU chokes when trying to dispatch too many commands to the GPU within a given frame.

    This is often the bottleneck in flight sims and other applications with a large scene complexity and longer view distances. Either Vulkan and DX12, combined with efficient parallelism, can effectively increase the draw call budget by at least an order of magnitude- even on Pascal cards. However, converting an existing DX9/11 or OpenGL renderer to take advantage of this requires talent and time.

    I’m not as familiar with iRacing, but it appears that the renderer likely doesn’t suffer from having too many dynamic objects onscreen for your CPU, and is likely well-optimized to utilize batching, instancing, as well as optimized/static meshes for the track greatly reduce draw call overhead. Probably not the best use case for SPS, in my opinion.

    3. As you briefly mentioned, SPS/MVR isn’t Nvidia-exclusive. Unfortunately, the implementation of SPS and MVR with VRWorks makes this much easier to implement in the renderer, without requiring fancy geometry shaders. Sadly it appears AMD has completely given up supporting VR developers. While Nvidia has given us MVR, VRS for Turing, and recently added VR support for DLSS (v2.1), AMD’s LiquidVR github hasn’t been touched in over 4 years. 🙁

    4. While SPS projects correctly for single-screen HMDs like the Rift S, the effect of simply offsetting the projection along the x-axis unfortunately results in am incorrect projection for the right eye on many HMDs- specifically those using asymmetric or canted displays. This affects the Vive Pro, Valve Index, Pimax, Varjo, XTAL, and others.

    You mentioned Ilias Kapouranis’s excellent writeup in your article. His part 2 on this subject goes into more detail on this problem and the risks:
    https://iliaskapouranis.com/2020/08/13/single-pass-stereo-wrong-depth-cues-discomfort-and-potential-risks/

    The good news is that MVR addresses this shortcoming. The bad news is that this feature requires Nvidia Turing or newer.

    • Cory,

      Astute observations, all of them. I will be reaching out to Mr. Kapouranis for some clarification of certain technical aspects to be included in my RTX follow-up. Thank you for the thoughtful feedback.

      -Sean

  6. Thanks for the article Sean, its great to finally get some concrete performance numbers & testing for this and looking forward to your future articles!

    Just a heads up, Index support may be broken on iRacing, it was when I tried it earlier this year. Headtracking wasnt 1:1 and world scale was off. They might’ve fixed it since but I can’t check the forum thread cos I cancelled.

    Spent the most of an hour messing with ACC settings last night using a recent wet race replay with 36 cars in it to try and dial in worst case performance to be above 90fps. Real pain to do, ended up with almost everything minimum (bar mirrors, kinda need those to be visible) and 90% resolution scaling on an Index with a 2080Ti and 9900k -_-

    Stays around only 50% gpu utilization on most smaller grids and with less effects going on (clear weather etc) but ya gotta tune for the worst!

    If you’re going to do some ACC testing in my experience rain at nurburgring or silverstone with a large grid are the worst case scenarios. I got significant gains by dropping visual cars to 12 from unlimited. Its very CPU and GPU intensive.

Comments are closed.