I’m using Direct3D 11 and have a question about IDXGISwapChain::Present() and sync to vertical retrace. Vertical sync doesn’t appear to be working correctly, or at least, it’s not working as I expect it to.
The refresh rate on my monitor is 60Hz (16.6ms). When I want to sync to vertical retrace I call Present(1, 0) on the IDXGISwapChain object. When the graphics engine would normally be running at greater than 60Hz, the Present(1, 0) call correctly clamps the framerate to 60Hz. The problem is when the engine is running under 60Hz. In this case, vertical sync doesn’t seem to be working. My assumption is that I should be seeing a framerate that is a multiple of the monitors refresh rate (16.6ms). So for my monitor I should be seeing framerates of 30Hz, 20Hz, 15Hz, etc depending on the current load on the engine. All of these are multiples of the monitor’s 16.6ms refresh rate. But that’s not what I’m seeing. I’m getting framerates of 50Hz, 45Hz. Nothing that’s a multiple of the monitor’s refresh rate.
Anyone have any ideas as to why vertical sync is acting this way? I’m using an NVIDIA GTX 780 graphics card.
I’ve seen this behavior on both my application and a DirectX SDK D3D11 application.
Thanks for any help.