xf86-video-intel: 3 commits - src/sna/sna_accel.c src/sna/sna_display.c

Chris Wilson ickle at kemper.freedesktop.org
Mon Dec 1 01:31:59 PST 2014


 src/sna/sna_accel.c   |    3 +++
 src/sna/sna_display.c |   20 ++++++++++++++++++--
 2 files changed, 21 insertions(+), 2 deletions(-)

New commits:
commit 700c036d180a09e4f7ec30466f7f6dda1c1d0066
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Dec 1 09:31:41 2014 +0000

    sna: Reject modesets with 0 outputs
    
    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 1eaafe7..3ab85b2 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1039,10 +1039,17 @@ sna_crtc_apply(xf86CrtcPtr crtc)
 
 		output_ids[output_count] = to_connector_id(output);
 		if (++output_count == ARRAY_SIZE(output_ids)) {
+			DBG(("%s: too many outputs (%d) for me!\n",
+			     __FUNCTION__, output_count));
 			errno = EINVAL;
 			return false;
 		}
 	}
+	if (output_count == 0) {
+		DBG(("%s: no outputs\n", __FUNCTION__));
+		errno = EINVAL;
+		return false;
+	}
 
 	VG_CLEAR(arg);
 	arg.crtc_id = sna_crtc->id;
commit dd421005cac981e75f734d50263675521943ed7b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Dec 1 09:29:07 2014 +0000

    sna: Add a few more asserts to sna_crtc_flip()
    
    Check that we are updating an active CRTC with a valid mode and
    associated outputs.
    
    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 4923d66..1eaafe7 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -5176,6 +5176,8 @@ sna_crtc_flip(struct sna *sna, struct sna_crtc *crtc, struct kgem_bo *bo, int x,
 	DBG(("%s CRTC:%d [pipe=%d], handle=%d\n", __FUNCTION__, crtc->id, crtc->pipe, bo->handle));
 
 	assert(sna->mode.num_real_output < ARRAY_SIZE(output_ids));
+	assert(crtc->bo);
+	assert(crtc->kmode.clock);
 
 	for (i = 0; i < sna->mode.num_real_output; i++) {
 		xf86OutputPtr output = config->output[i];
@@ -5196,6 +5198,7 @@ sna_crtc_flip(struct sna *sna, struct sna_crtc *crtc, struct kgem_bo *bo, int x,
 		if (++output_count == ARRAY_SIZE(output_ids))
 			return false;
 	}
+	assert(output_count);
 
 	VG_CLEAR(arg);
 	arg.crtc_id = crtc->id;
commit 104517507f267aca7433f8b85dec89e9013a640e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Dec 1 09:24:50 2014 +0000

    sna: Do not post shadow updates in the middle of output reconfiguration
    
    Wait until the screens and framebuffers settle before we start updating.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index a5784af..26b10e9 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -18011,6 +18011,9 @@ void sna_accel_block_handler(struct sna *sna, struct timeval **tv)
 		_kgem_submit(&sna->kgem);
 	}
 
+	if (sna->mode.dirty)
+		sna_crtc_config_notify(xf86ScrnToScreen(sna->scrn));
+
 restart:
 	if (sna_scanout_do_flush(sna))
 		sna_scanout_flush(sna);
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index d4aa36b..4923d66 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -5780,6 +5780,8 @@ sna_crtc_config_notify(ScreenPtr screen)
 	if (!sna->mode.dirty)
 		return;
 
+	/* XXX DisableUnusedOutputs? */
+
 	probe_capabilities(sna);
 	update_flush_interval(sna);
 
@@ -6917,13 +6919,17 @@ void sna_mode_redisplay(struct sna *sna)
 	if (!sna->mode.shadow_damage)
 		return;
 
-	DBG(("%s: posting shadow damage? %d (flips pending? %d)\n",
+	DBG(("%s: posting shadow damage? %d (flips pending? %d, mode reconfiguration pending? %d)\n",
 	     __FUNCTION__,
 	     !RegionNil(DamageRegion(sna->mode.shadow_damage)),
-	     sna->mode.flip_active));
+	     sna->mode.flip_active,
+	     sna->mode.dirty));
 	assert((sna->flags & SNA_IS_HOSTED) == 0);
 	assert(sna->mode.shadow_active);
 
+	if (sna->mode.dirty)
+		return;
+
 	region = DamageRegion(sna->mode.shadow_damage);
 	if (RegionNil(region))
 		return;


More information about the xorg-commit mailing list