0
votes

DirectX 'returns' multiple 'matching' display modes from this call:

dxgiAdapterOutput->GetDisplayModeList(DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_ENUM_MODES_INTERLACED, &numDisplayModes, displayModeList);

I printed out all the matching modes that also match my resolution:

17.20:34+443 Mode 51: Size => 1920x1080, Refresh Rate => 50000/1000

17.20:34+443 Mode 52: Size => 1920x1080, Refresh Rate => 50000/1000

17.20:34+443 Mode 53: Size => 1920x1080, Refresh Rate => 59940/1000

17.20:34+443 Mode 54: Size => 1920x1080, Refresh Rate => 59940/1000

17.20:34+443 Mode 55: Size => 1920x1080, Refresh Rate => 60000/1001

17.20:34+443 Mode 56: Size => 1920x1080, Refresh Rate => 60000/1001

So which numerator / denominator pair is the 'right' one to pass to the swap chain?

1
60000/1001 = 59.94005994, so presumably the two second pairs are actually the same refresh race, just expressed differently? - Mats Petersson
Ah yeah, it seems that way. Didn't spot that! Doesn't explain the first pair though. Or why they're even in pairs. - Xenoprimate
First pair is clearly the 50Hz option (TV and such in Europe). 59.94 is the TV frequency used by NTSC. - Mats Petersson

1 Answers

2
votes

If you are creating a windowed swap-chain, the refresh rate is ignored, and the OS will continue using whatever the current system refresh rate is. If you are creating a full-screen swap-chain, you can select any of the valid modes returned by the API - whatever you prefer. Note however that if your selected mode differs from the current system display mode, you will trigger a "mode change" which results in a visible flicker of the display.

The reason the API returns multiple identical modes is likely due to a display driver bug.