From 7ade8ba10e1e767bb510343c86573bc5d4804b92 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 24 Aug 2016 14:55:27 +0200 Subject: [PATCH] modesetting: ms_covering_crtc: Allow calling on non modesetting Screens 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. Reviewed-by: Adam Jackson Signed-off-by: Hans de Goede --- 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 6547d9dd1..35924c370 100644 --- a/hw/xfree86/drivers/modesetting/vblank.c +++ b/hw/xfree86/drivers/modesetting/vblank.c @@ -96,7 +96,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); @@ -104,14 +104,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; + /* 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); @@ -136,7 +142,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