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.