SteamVR Developer Hardware

SteamVR Developer Hardware

WaitGetPoses performance is terrible.
WaitGetPoses is super slow. Passing it full resolution images (1512 x 1680) takes 15 ms, Even half resolutions images take 4 or 5 ms. If I have my SSAO shader active, it adds another 5 ms.

I'm using Ogre 1.10 with DX11. My engine and rendering stereo frames takes only a total of about 6 or 7 ms. This is with lots of lighting and shadows, deferred shading.

Then I have to call WaitGetPoses and the performance drops horribly.

Why does WaitGetPoses take so long? And why is it sensitive to the other shaders I have running? This is all in one thread. I can't understand why it would be so slow.

(I have a GTX 970, i7-2600k 3.40/3.70 GHz CPU, 16 GB Ram and windows 7)
Last edited by Denormalizer; Jun 6, 2016 @ 1:12pm
< >
Showing 1-6 of 6 comments
aaron.leiby  [developer] Jun 6, 2016 @ 4:47pm 
WaitGetPoses is your synchronization point to keep in step with the headset presenting frames. It returns 3ms before vsync - every 11.1ms (i.e 90hz). If you feed too much gpu work for a given frame and blow out your 11.1ms budget, then WaitGetPoses will wait until the next sync point 11.1ms later.
Denormalizer Jun 6, 2016 @ 8:12pm 
But it seems to be doing far worse than that. I'm only doing 6 or 7 ms or work, and that work launches directly after calling WaitGetPoses, yet if I have all my effects on (including SSAO) WaitGetPoses takes 25 ms. That's more than two 11.1 ms budgets.

What you're saying is that if I keep my end under 8.1 ms (which is 11.1 - 3) then I should be able to get 90 Hz but I'm doing that and WaitGetPoses is still taking forever.
Last edited by Denormalizer; Jun 6, 2016 @ 8:16pm
aaron.leiby  [developer] Jun 7, 2016 @ 10:56am 
Your budget is still 11.1ms, it's just shifted 3ms to the left of vsync. Well, the compositor takes about 0.5ms plus a little bit for the clear back buffer at the top of the frame (you can see this time in the gpu section of the stacked Frame Timing Graph under Performance in Settings).

However, if your application isn't feeding the gpu enough work to get started right at the top of the frame, then you will wind up with gpu bubbles -- areas of idle -- which will eat into that budget.

The best tool I know of for visualizing this is:
https://developer.valvesoftware.com/wiki/SteamVR/Installing_GPUView

Denormalizer Jun 8, 2016 @ 10:07am 
Ok, thanks. My own timers show that WaitGetPoses always takes at least 4.7ms, usually more, even though the game engine and stereo rendering are only in the 6-8ms range. so I'm not sure what that means.
SoftFever Jun 10, 2016 @ 5:51am 
Hi Zeek,

Did you manage to fix the performance drop issue?
I also have trouble with WaitGetPose call.
When my rendering takes 1 ms, WaitGetPose will take 10 ms.
When my rendering takes 2.5 ms, WaitGetPose will take 20.2 ms.
When my rendering takes 3.6 ms, WaitGetPose will take 30.3 ms.

I feel I'm mad now...
dmytryl Jun 12, 2016 @ 6:44pm 
It could be that WaitGetPoses for some reason does a flush of GPU command queue. Just speculating here. Submitting rendering commands can take 2.5ms for 15ms worth of rendering.
< >
Showing 1-6 of 6 comments
Per page: 1530 50

Date Posted: Jun 6, 2016 @ 1:06pm
Posts: 6