[PATCH xserver 2/3] modesetting: ms_covering_crtc: Allow calling on non modesetting Screens

Peter Wu peter at lekensteyn.nl
Sat Aug 27 18:03:31 UTC 2016


On Wed, Aug 24, 2016 at 03:30:11PM +0200, Hans de Goede wrote:
> 99% of the code in ms_covering_crtc is video-driver agnostic. Add a
> screen_is_ms parameter when when FALSE skips the one ms specific check,
> this will allow calling ms_covering_crtc on slave GPUs.
> 
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
>  hw/xfree86/drivers/modesetting/vblank.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/xfree86/drivers/modesetting/vblank.c b/hw/xfree86/drivers/modesetting/vblank.c
> index e738497..ec60ac4 100644
> --- a/hw/xfree86/drivers/modesetting/vblank.c
> +++ b/hw/xfree86/drivers/modesetting/vblank.c
> @@ -97,7 +97,7 @@ ms_crtc_on(xf86CrtcPtr crtc)
>   */
>  
>  static xf86CrtcPtr
> -ms_covering_crtc(ScreenPtr pScreen, BoxPtr box)
> +ms_covering_crtc(ScreenPtr pScreen, BoxPtr box, Bool screen_is_ms)
>  {
>      ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen);
>      xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
> @@ -105,14 +105,20 @@ ms_covering_crtc(ScreenPtr pScreen, BoxPtr box)
>      int coverage, best_coverage;
>      int c;
>      BoxRec crtc_box, cover_box;
> +    Bool crtc_on;
>  
>      best_crtc = NULL;
>      best_coverage = 0;
>      for (c = 0; c < xf86_config->num_crtc; c++) {
>          crtc = xf86_config->crtc[c];
>  
> +        if (screen_is_ms)
> +            crtc_on = ms_crtc_on(crtc);
> +        else
> +            crtc_on = crtc->enabled;

This will skip the check whether a screen is on or off via DPMS, right?
If the DPMS property is somehow not valid for output slaves, shouldn't
that be fixed instead?

(Please correct/educate me if I am wrong, this is all new for me ;))

Kind regards,
Peter

> +
>          /* If the CRTC is off, treat it as not covering */
> -        if (!ms_crtc_on(crtc))
> +        if (!crtc_on)
>              continue;
>  
>          ms_crtc_box(crtc, &crtc_box);
> @@ -137,7 +143,7 @@ ms_dri2_crtc_covering_drawable(DrawablePtr pDraw)
>      box.x2 = box.x1 + pDraw->width;
>      box.y2 = box.y1 + pDraw->height;
>  
> -    return ms_covering_crtc(pScreen, &box);
> +    return ms_covering_crtc(pScreen, &box, TRUE);
>  }
>  
>  static Bool
> -- 
> 2.9.3
> 

-- 
Kind regards,
Peter Wu
https://lekensteyn.nl


More information about the xorg-devel mailing list