VSync interrupts are occasionally skipping at 120hz HDR – DirectX and Direct Compute

I have a 3080TI connected to an LG CX running at 120hz, using a very simple renderloop i can observe that the frame timing is occasionally doubled (from 8 to 16ms) when running an app in either windowed or even exclusive fullscreen mode on dx11. The same happens on OpenGL and GDI, so it’s probably not specific to the DX API. Tried triaging with Microsoft and they suspect its a driver / hardware issue. Weirdly enough a GPUtrace did not show any oddities according to Microsoft.

The problem goes away when i switch the monitor to 60hz, then the frame times are rock solid at 16ms with no spikes at all, but at 100hz or 120hz there is an occasional spike where the frame time doubles. The problem also goes away if i switch off HDR, in which case my window seems to get an MPO.

here’s the simple render loop:
void Render()
WaitForSingleObject(FrameLatencyWaitableObject, INFINITE);
HRESULT hr = swapchain1->GetFrameStatistics(&stats);
auto diff = stats.SyncQPCTime.QuadPart – LastQPC; //NOTE: diff is sometimes 16 instead of 8ms
LastQPC = stats.SyncQPCTime.QuadPart;
devicecontext->ClearRenderTargetView(m_pRenderTarget.Get(), black);
devicecontext->OMSetRenderTargets(1, m_pRenderTarget.GetAddressOf(), nullptr);
swapchain1->Present1(1, 0, &params);

It’s spending 16ms sometimes waiting for the FrameLatencyWaitableObject.
And here’s what the spikes look like at 120hz (stable part is 8ms, spikes go to 16ms):

Read more here: Source link