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)
Última edição por Denormalizer; 6/jun./2016 às 13:12
< >
Exibindo comentários 16 de 6
aaron.leiby  [desenvolvedor(a)] 6/jun./2016 às 16:47 
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 6/jun./2016 às 20:12 
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.
Última edição por Denormalizer; 6/jun./2016 às 20:16
aaron.leiby  [desenvolvedor(a)] 7/jun./2016 às 10:56 
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 8/jun./2016 às 10:07 
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 10/jun./2016 às 5:51 
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 12/jun./2016 às 18:44 
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.
< >
Exibindo comentários 16 de 6
Por página: 1530 50

Publicado em: 6/jun./2016 às 13:06
Mensagens: 6