randr: Fix up yet another corner case in preferred mode selection
Let's say - purely for the sake of argument, mind you - that you had a server GPU with anemic memory bandwidth, and you walked up to it and plugged in a monitor that was 1920x1080 because that's what happened to be on the crash cart. Say the memory bandwidth is such that anything larger than 1280x1024 gets filtered away. Now you're in trouble, because the established timings section includes a 720x400 mode because that's what DOS 80x25 is, and that happens to just about match the physical aspect ratio. Instead let's reuse the logic from the existing aspect-match path: pick the larger mode of either the physical aspect ratio or 4:3. Reviewed-by: Julien Cristau <jcristau@debian.org> Signed-off-by: Adam Jackson <ajax@redhat.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
531785dd74
commit
ff56f88616
|
@ -2073,12 +2073,13 @@ xf86TargetPreferred(ScrnInfoPtr scrn, xf86CrtcConfigPtr config,
|
|||
|
||||
/*
|
||||
* If there's no preferred mode, but only one monitor, pick the
|
||||
* biggest mode for its aspect ratio, assuming one exists.
|
||||
* biggest mode for its aspect ratio or 4:3, assuming one exists.
|
||||
*/
|
||||
if (!ret)
|
||||
do {
|
||||
int i = 0;
|
||||
float aspect = 0.0;
|
||||
DisplayModePtr a = NULL, b = NULL;
|
||||
|
||||
/* count the number of enabled outputs */
|
||||
for (i = 0, p = -1; nextEnabledOutput(config, enabled, &p); i++);
|
||||
|
@ -2092,8 +2093,11 @@ xf86TargetPreferred(ScrnInfoPtr scrn, xf86CrtcConfigPtr config,
|
|||
aspect = (float) config->output[p]->mm_width /
|
||||
(float) config->output[p]->mm_height;
|
||||
|
||||
a = bestModeForAspect(config, enabled, 4.0/3.0);
|
||||
if (aspect)
|
||||
preferred_match[p] = bestModeForAspect(config, enabled, aspect);
|
||||
b = bestModeForAspect(config, enabled, aspect);
|
||||
|
||||
preferred_match[p] = biggestMode(a, b);
|
||||
|
||||
if (preferred_match[p])
|
||||
ret = TRUE;
|
||||
|
|
Loading…
Reference in New Issue
Block a user