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