...I assume this is the SceneCapture2d work.

In async mode, we control interleaved reprojection (dropping to 45hz) based on measure gpu time. Since that work is sneaking in immediately after PostPresentHandoff, we start timing there until the end of the next frame. This is effectively measuring the entire frame (11.1ish ms) so we kick on interleaved mode assuming we are going to start dropping frames.

It appears that WaitGetPoses is getting called well ahead of time (I was seeing it happen about 1ms after PostPresentHandoff) and right after that last bit of gpu works gets submitted, so I suspect you can safely comment out the call to PostPresentHandoff entirely and everything will sort itself out nicely.

Patrick's layman's terms- when interleaved reprojection is enabled due to the new timing of calls we're mismeasuring gpu time making us think we need reprojection, which causes performance degradation.

Steps to Reproduce
  1. Download attached project
  2. Open it, open MotionControllerMap
  3. ~ , stat unit
  4. In steam VR, make sure Allow Interleaved Reprojection is enabled
  5. Look at the widget, note frametime
  6. Look away from the widget, note frametime

Result: you lose about 11 ms when looking at the widget w/ reprojection on.

Have Comments or More Details?

Head over to the existing Questions & Answers thread and let us know what's up.

Login to Vote

ComponentUE - Platform - XR
Affects Versions4.
Target Fix4.15
Fix Commit3268220
Main Commit3389599
Release Commit3268220
CreatedJan 12, 2017
ResolvedJan 23, 2017
UpdatedSep 16, 2019