cancel
Showing results for 
Search instead for 
Did you mean: 

Async TimeWarp possible with current Runtime!!

thewhiteambit
Adventurer
Hey, I just wanted to let everybody know, it is possible to get a near perfect Async TimeWarp with the current Runtime. All I did, was simply set up an exclusive frame pushing Thread for the Oculus Rift with a secondary Direct3DDevice. In case the engine has no new frame, the old frame is transfered with the next SwapTextureSet but the old timing values. This results in a further (regular) TimeWarped picture.

Since the frame pushing thread runs high priority, I virtually never miss to push a new frame to the Oculus Rift just in time, making it nearly as good as driver level (since the actual TimeWarp is driver level). When completely stopping rendering with the engine, I can still turn around my head in the last valid picture 😄

:mrgreen:
2 REPLIES 2

galopin
Heroic Explorer
You need to make sure you do not have long draw or compute on the other thread in the actual rendering. Current nVidia GPUs has a preemption at the draw call boundary and you may still miss a vblank because of that. GCN hardware has a preemption at the wavefront that is far much finer.

Also, windows 10 does a better job at dealing with gpu preemption, but still depends of the hardware capabilities.

thewhiteambit
Adventurer
Thanks, I am aware of this. I am able to archive 99% Async-TimeWarp with this attempt. Remember the actual TimeWarp is still Driver-Level, and all I have to do is call ovr_SubmitFrame in time.

I can observe lost frames only in very rare cases now, even if the engine itself has no new frames. In case I still observe missing frames, I guess it is more due to long non-preempting shader, were even all driver-level would fail due to current nVidia hardware constrains.

I should test this on a GCN, but since developer support generally is sub par by AMD I avoid these cards - even with better preemption. Maybe AMD should start supporting developers even if you are not EA, if they don't want to die while having better preemption.