On Mon, Jul 30, 2012 at 2:32 PM, Adam Jackson <[email protected]> wrote: > 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 <[email protected]> > Signed-off-by: Adam Jackson <[email protected]>
Reviewed-by: Alex Deucher <[email protected]> > --- > hw/xfree86/modes/xf86Crtc.c | 8 ++++++-- > 1 files changed, 6 insertions(+), 2 deletions(-) > > diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c > index 2628409..dfce1d1 100644 > --- a/hw/xfree86/modes/xf86Crtc.c > +++ b/hw/xfree86/modes/xf86Crtc.c > @@ -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; > -- > 1.7.7.6 > > _______________________________________________ > [email protected]: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
