The problem can occur when the game doesn't choose the desired refresh rate when creating swapchain (which should effectively use "the current display refresh rate"). However, we don't know how the game gets the current refresh rate, and sometimes the value doesn't agree with what is retrieved on DXMT side. So we can't know how long exactly the SyncInterval of Present() is. For example, the game thinks the current refresh rate is 120hz while DXMT detects 60hz, then the game use SyncInterval = 2 to produce a 60 fps frame pacing, but it's interpreted as a 2*1000/60 = 33.3ms interval (= 30 fps) in DXMT.
It is even more confusing when multiple displays of different refresh rates are active.
The problem can occur when the game doesn't choose the desired refresh rate when creating swapchain (which should effectively use "the current display refresh rate"). However, we don't know how the game gets the current refresh rate, and sometimes the value doesn't agree with what is retrieved on DXMT side. So we can't know how long exactly the
SyncIntervalofPresent()is. For example, the game thinks the current refresh rate is 120hz while DXMT detects 60hz, then the game use SyncInterval = 2 to produce a 60 fps frame pacing, but it's interpreted as a 2*1000/60 = 33.3ms interval (= 30 fps) in DXMT.It is even more confusing when multiple displays of different refresh rates are active.