1

Some users of my DirectX 11 application complains about frame rates between 1000-2000 fps, which I totally understand. It's a really small group of people who have had this issue. The only way I've been able to replicate it is by disabling 'Vertical sync' in the Nvidia control panel and I suspect that users may have tampered with these settings, maybe to solve issues for other applications earlier (or Nvidia application decides this is most suitable for the application?).

I currently loop through the DisplayModeList from IDXGIOutput::GetDisplayModeList to find the best suitable RefreshRate to assign to the DXGI_SWAP_CHAIN_DESC before calling D3D11CreateDeviceAndSwapChain().

swapChainDesc.BufferDesc.RefreshRate.Numerator = numerator;
swapChainDesc.BufferDesc.RefreshRate.Denominator = denominator;

Although, even if I set the numerator and denominator to 0 and 1, respectively, the driver will use VSync and run the application at an appropriate frame rate (monitor frame rate). This is using the default settings in Nvidia control panel.

It seems that no video display mode or swapchain creation settings can ignore the fact that VSync is disabled in the Nvidia control panel. Same issue in OpenGL using GLFW.

A workaround is to let the application sleep when the delta time is really small, but the sleep is not guaranteed to be accurate and would cause fps jitter and screen tearing.

Is there any way for me to override the setting in the Nvidia control panel?

Acorn
  • 24,970
  • 5
  • 40
  • 69
Filip
  • 21
  • 2

0 Answers0