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