Merge 25a395aff8
into e98bd7cde2
This commit is contained in:
commit
5da4da9dbb
|
@ -1449,12 +1449,25 @@ preferredMode(ScrnInfoPtr pScrn, xf86OutputPtr output)
|
||||||
{
|
{
|
||||||
const char *preferred_mode = NULL;
|
const char *preferred_mode = NULL;
|
||||||
|
|
||||||
/* Check for a configured preference for a particular mode */
|
/* First: user-configured preferred mode */
|
||||||
preferred_mode = xf86GetOptValString(output->options,
|
preferred_mode = xf86GetOptValString(output->options, OPTION_PREFERRED_MODE);
|
||||||
OPTION_PREFERRED_MODE);
|
|
||||||
if (preferred_mode)
|
if (preferred_mode)
|
||||||
return preferred_mode;
|
return preferred_mode;
|
||||||
|
|
||||||
|
/* Try to find a mode with ~75Hz refresh rate */
|
||||||
|
DisplayModePtr mode = output->probed_modes;
|
||||||
|
while (mode) {
|
||||||
|
/* Some drivers don’t populate VRefresh—manually calculate it */
|
||||||
|
float refresh = 0.0f;
|
||||||
|
if (mode->HTotal > 0 && mode->VTotal > 0)
|
||||||
|
refresh = ((float)mode->Clock * 1000.0f) /
|
||||||
|
((float)mode->HTotal * (float)mode->VTotal);
|
||||||
|
if ((int)(refresh + 0.5f) >= 75)
|
||||||
|
return mode->name;
|
||||||
|
mode = mode->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fallback: use first mode in display list */
|
||||||
if (pScrn->display->modes && *pScrn->display->modes)
|
if (pScrn->display->modes && *pScrn->display->modes)
|
||||||
preferred_mode = *pScrn->display->modes;
|
preferred_mode = *pScrn->display->modes;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue