xf86-video-intel: 2 commits - src/sna/sna_display.c src/sna/sna_driver.c

Chris Wilson ickle at kemper.freedesktop.org
Thu Jul 17 09:11:49 PDT 2014


 src/sna/sna_display.c |    7 ++++++-
 src/sna/sna_driver.c  |   37 +++++++++++++++++++++++++++++--------
 2 files changed, 35 insertions(+), 9 deletions(-)

New commits:
commit 923e098f5f830c30b93d6f85d4f812201bdcb206
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jul 17 17:10:39 2014 +0100

    sna: Fix compilation with older Xorg
    
    sna_display.c: In function 'sna_crtc_disable_shadow':
    sna_display.c:1375:39: error: dereferencing pointer to incomplete type
       DamageUnregister(&crtc->slave_damage->drawable, crtc->slave_damage);
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index efb4197..fbd7cff 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1372,7 +1372,7 @@ static void sna_crtc_disable_shadow(struct sna *sna, struct sna_crtc *crtc)
 
 	if (crtc->slave_damage) {
 		assert(crtc->slave_pixmap);
-		DamageUnregister(&crtc->slave_scanout->drawable, crtc->slave_damage);
+		DamageUnregister(&crtc->slave_pixmap->drawable, crtc->slave_damage);
 		DamageDestroy(crtc->slave_damage);
 		crtc->slave_damage = NULL;
 	}
commit 7026ffe56005bbc36dc37cafc7ebb2a7f09fefdd
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jul 17 17:04:02 2014 +0100

    sna: Support TearFree on slaved outputs
    
    By always forcing the shadow intermediatory, we can enable TearFree even
    ona slave scanout.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 072a285..efb4197 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1633,6 +1633,11 @@ static bool use_shadow(struct sna *sna, xf86CrtcPtr crtc)
 		return true;
 	}
 
+	if (sna->flags & SNA_TEAR_FREE && to_sna_crtc(crtc)->slave_pixmap) {
+		DBG(("%s: tear-free shadow required\n", __FUNCTION__));
+		return true;
+	}
+
 	if (sna->scrn->virtualX > sna->mode.max_crtc_width ||
 	    sna->scrn->virtualY > sna->mode.max_crtc_height) {
 		DBG(("%s: framebuffer too large (%dx%d) > (%dx%d)\n",
diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index 2eac852..e5e7783 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -487,10 +487,8 @@ static void setup_dri(struct sna *sna)
 
 static bool enable_tear_free(struct sna *sna)
 {
-#if HAS_PIXMAP_SHARING
-	if (sna->scrn->is_gpu)
+	if (sna->flags & SNA_LINEAR_FB)
 		return false;
-#endif
 
 	/* Under certain conditions, we should enable TearFree by default,
 	 * for example when the hardware requires pageflipping to run within
@@ -502,6 +500,33 @@ static bool enable_tear_free(struct sna *sna)
 	return ENABLE_TEAR_FREE;
 }
 
+static void setup_tear_free(struct sna *sna)
+{
+	MessageType from;
+	Bool enable;
+
+	if (sna->flags & SNA_LINEAR_FB)
+		return;
+
+	if ((sna->flags & SNA_HAS_FLIP) == 0) {
+		from = X_PROBED;
+		goto done;
+	}
+
+	if (!xf86GetOptValBool(sna->Options, OPTION_TEAR_FREE, &enable)) {
+		enable = enable_tear_free(sna);
+		from = X_DEFAULT;
+	} else
+		from = X_CONFIG;
+
+	if (enable)
+		sna->flags |= SNA_TEAR_FREE;
+
+done:
+	xf86DrvMsg(sna->scrn->scrnIndex, from, "TearFree %sabled\n",
+		   sna->flags & SNA_TEAR_FREE ? "en" : "dis");
+}
+
 /**
  * This is called before ScreenInit to do any require probing of screen
  * configuration.
@@ -666,11 +691,7 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags)
 	}
 	scrn->currentMode = scrn->modes;
 
-	if ((sna->flags & (SNA_HAS_FLIP | SNA_LINEAR_FB)) == SNA_HAS_FLIP &&
-	    xf86ReturnOptValBool(sna->Options, OPTION_TEAR_FREE, enable_tear_free(sna)))
-		sna->flags |= SNA_TEAR_FREE;
-	xf86DrvMsg(scrn->scrnIndex, X_CONFIG, "TearFree %sabled\n",
-		   sna->flags & SNA_TEAR_FREE ? "en" : "dis");
+	setup_tear_free(sna);
 
 	xf86SetGamma(scrn, zeros);
 	xf86SetDpi(scrn, 0, 0);


More information about the xorg-commit mailing list