[PATCH] xfree86: don't enable anything in xf86InitialConfiguration for GPU screens

Maarten Lankhorst maarten.lankhorst at canonical.com
Tue Apr 30 23:43:42 PDT 2013


Op 30-04-13 23:30, Aaron Plattner schreef:
> There's no point in turning on outputs connected to GPU screens during initial
> configuration.  Not only does this cause them to just display black, it also
> confuses clients when these screens are attached to a master screen and RandR
> reports that the outputs are already on.
>
> Also, don't print the warning about no outputs being found on GPU screens,
> since that's expected.
>
> Signed-off-by: Aaron Plattner <aplattner at nvidia.com>
> ---
> Dave, this fixes the black screen problem with "gpu: call CreateScreenResources
> for GPU screens"
This also seems to fix the crash on nouveau when the GPU screen has a display attached with resolution > primary screen resolution during init.
>  hw/xfree86/modes/xf86Crtc.c | 16 +++++++++++++---
>  1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
> index 4a490c6..35845e8 100644
> --- a/hw/xfree86/modes/xf86Crtc.c
> +++ b/hw/xfree86/modes/xf86Crtc.c
> @@ -1997,6 +1997,14 @@ xf86CollectEnabledOutputs(ScrnInfoPtr scrn, xf86CrtcConfigPtr config,
>      Bool any_enabled = FALSE;
>      int o;
>  
> +    /*
> +     * Don't bother enabling outputs on GPU screens: a client needs to attach
> +     * it to a source provider before setting a mode that scans out a shared
> +     * pixmap.
> +     */
> +    if (scrn->is_gpu)
> +        return FALSE;
> +
>      for (o = 0; o < config->num_output; o++)
>          any_enabled |= enabled[o] = xf86OutputEnabled(config->output[o], TRUE);
>  
> @@ -2466,9 +2474,11 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow)
>  
>      ret = xf86CollectEnabledOutputs(scrn, config, enabled);
>      if (ret == FALSE && canGrow) {
> -        xf86DrvMsg(i, X_WARNING,
> -                   "Unable to find connected outputs - setting %dx%d initial framebuffer\n",
> -                   NO_OUTPUT_DEFAULT_WIDTH, NO_OUTPUT_DEFAULT_HEIGHT);
> +        if (!scrn->is_gpu)
> +            xf86DrvMsg(i, X_WARNING,
> +		       "Unable to find connected outputs - setting %dx%d "
> +                       "initial framebuffer\n",
> +                       NO_OUTPUT_DEFAULT_WIDTH, NO_OUTPUT_DEFAULT_HEIGHT);
>          have_outputs = FALSE;
>      }
>      else {



More information about the xorg-devel mailing list