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

Reply via email to