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

Chris Wilson ickle at kemper.freedesktop.org
Mon Jul 4 09:23:04 UTC 2016


 src/sna/sna_display.c |    5 +++++
 src/sna/sna_dri2.c    |    6 +++---
 2 files changed, 8 insertions(+), 3 deletions(-)

New commits:
commit 26f8ab5429a554801641415f0ab3b2d68cea1d00
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Jul 4 10:11:50 2016 +0100

    sna: Restore local damage processing for TearFree/DRI2/swcursor early
    
    We currently hack TearFree/DRI2/swcursor to avoid recursion from inside
    the SwapBuffers to handle the swcursor. This has the issue of a trailing
    cursor on the boundary of the DRI2 drawable, but prevents the explosion
    from swapping TearFree buffers from within the TearFree handler (i.e.
    recursion). This only has to apply to the damage processing before the
    swap.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c
index 3838468..4ec0cca 100644
--- a/src/sna/sna_dri2.c
+++ b/src/sna/sna_dri2.c
@@ -1037,8 +1037,8 @@ static void set_bo(PixmapPtr pixmap, struct kgem_bo *bo)
 	assert(bo->flush);
 
 	if (APPLY_DAMAGE) {
-		DamageRegionProcessPending(&pixmap->drawable);
 		sna->ignore_copy_area = false;
+		DamageRegionProcessPending(&pixmap->drawable);
 	}
 }
 
@@ -1394,8 +1394,8 @@ __sna_dri2_copy_region(struct sna *sna, DrawablePtr draw, RegionPtr region,
 	}
 
 	if (APPLY_DAMAGE || flags & DRI2_DAMAGE) {
-		DamageRegionProcessPending(&pixmap->drawable);
 		sna->ignore_copy_area = false;
+		DamageRegionProcessPending(&pixmap->drawable);
 	}
 
 	if (clip.data)
@@ -2421,8 +2421,8 @@ static void sna_dri2_xchg_crtc(struct sna *sna, DrawablePtr draw, xf86CrtcPtr cr
 	}
 	sna_shadow_set_crtc(sna, crtc, get_private(back)->bo);
 	if (APPLY_DAMAGE) {
-		DamageRegionProcessPending(&win->drawable);
 		sna->ignore_copy_area = false;
+		DamageRegionProcessPending(&win->drawable);
 	}
 
 	if (priv->front == NULL) {
commit 4556ac396ed46a476cc970946011e377451346ff
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Jul 4 10:07:51 2016 +0100

    sna: Track TearFree shadow as an active scanout
    
    Don't allow DRI2 to hand back the current shadow buffer as a Drawable's
    next back buffer.
    
    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 e9f3707..10d33f2 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1726,11 +1726,13 @@ static bool wait_for_shadow(struct sna *sna,
 	sna_pixmap_unmap(pixmap, priv);
 
 	DBG(("%s: setting front pixmap to handle=%d\n", __FUNCTION__, bo->handle));
+	sna->mode.shadow->active_scanout--;
 	tmp = priv->gpu_bo;
 	priv->gpu_bo = bo;
 	if (bo != sna->mode.shadow)
 		kgem_bo_destroy(&sna->kgem, sna->mode.shadow);
 	sna->mode.shadow = tmp;
+	sna->mode.shadow->active_scanout++;
 
 	sna_dri2_pixmap_update_bo(sna, pixmap, bo);
 
@@ -1852,6 +1854,7 @@ static void sna_mode_disable_shadow(struct sna *sna)
 	sna->mode.shadow_enabled = false;
 
 	if (sna->mode.shadow) {
+		sna->mode.shadow->active_scanout--;
 		kgem_bo_destroy(&sna->kgem, sna->mode.shadow);
 		sna->mode.shadow = NULL;
 	}
@@ -2323,6 +2326,7 @@ static void set_shadow(struct sna *sna, RegionPtr region)
 
 	assert(priv->gpu_bo);
 	assert(sna->mode.shadow);
+	assert(sna->mode.shadow->active_scanout);
 
 	DBG(("%s: waiting for region %dx[(%d, %d), (%d, %d)], front handle=%d, shadow handle=%d\n",
 	     __FUNCTION__,
@@ -2631,6 +2635,7 @@ out_shadow:
 				assert(__sna_pixmap_get_bo(sna->front) == NULL ||
 				       __sna_pixmap_get_bo(sna->front)->pitch == shadow->pitch);
 				sna->mode.shadow = shadow;
+				sna->mode.shadow->active_scanout++;
 			}
 			set_shadow(sna, &region);
 


More information about the xorg-commit mailing list