xf86-video-intel: 2 commits - src/sna/sna_accel.c src/sna/sna_display.c src/sna/sna_dri2.c src/sna/sna_driver.c src/sna/sna.h src/sna/sna_present.c
Chris Wilson
ickle at kemper.freedesktop.org
Wed Jan 21 06:38:22 PST 2015
src/sna/sna.h | 2 +-
src/sna/sna_accel.c | 1 +
src/sna/sna_display.c | 6 +++++-
src/sna/sna_dri2.c | 7 +++++++
src/sna/sna_driver.c | 8 ++++++--
src/sna/sna_present.c | 2 +-
6 files changed, 21 insertions(+), 5 deletions(-)
New commits:
commit d16ac1f30bb12d4830f6ed05c161b1175e77b019
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Jan 21 10:14:41 2015 +0000
sna/dri2: Prefer to use normal selection criteria for CopyRegion on small GT
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 a1df00c..6b0520f 100644
--- a/src/sna/sna_dri2.c
+++ b/src/sna/sna_dri2.c
@@ -837,6 +837,12 @@ static void sna_dri2_select_mode(struct sna *sna, struct kgem_bo *dst, struct kg
return;
}
+ if (sna->render_state.gt < 2) {
+ DBG(("%s: small GT [%d], not forcing selection\n",
+ __FUNCTION__, sna->render_state.gt));
+ return;
+ }
+
VG_CLEAR(busy);
busy.handle = src->handle;
if (drmIoctl(sna->kgem.fd, DRM_IOCTL_I915_GEM_BUSY, &busy))
commit b0f90a46111ada91f99e7babcc3dbba5780965b2
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jan 20 16:32:34 2015 +0000
sna: Keep front_active consistent across DPMS events
When disabling outputs with DPMS, make sure we update front_active for
consistency.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna.h b/src/sna/sna.h
index 0c66d17..74a03f3 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -285,8 +285,8 @@ struct sna {
unsigned front_active;
unsigned shadow_active;
unsigned flip_active;
+ unsigned hidden;
bool dirty;
- bool hidden;
int max_crtc_width, max_crtc_height;
RegionRec shadow_region;
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index fb18d58..d545877 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -17229,6 +17229,7 @@ static struct sna_pixmap *sna_accel_scanout(struct sna *sna)
assert(sna->vblank_interval);
assert(sna->front);
+ assert(!sna->mode.hidden);
priv = sna_pixmap(sna->front);
if (priv->gpu_bo == NULL)
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 5b45618..684256a 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -2315,7 +2315,10 @@ __sna_crtc_set_mode(xf86CrtcPtr crtc)
uint32_t saved_offset;
bool saved_transform;
- DBG(("%s\n", __FUNCTION__));
+ DBG(("%s: CRTC=%d, pipe=%d, hidden?=%d\n", __FUNCTION__,
+ sna_crtc->id, sna_crtc->pipe, sna->mode.hidden));
+ if (sna->mode.hidden)
+ return TRUE;
saved_bo = sna_crtc->bo;
saved_transform = sna_crtc->transform;
@@ -5318,6 +5321,7 @@ sna_page_flip(struct sna *sna,
assert((sna->flags & SNA_TEAR_FREE) == 0);
assert(sna->mode.flip_active == 0);
assert(sna->mode.front_active);
+ assert(!sna->mode.hidden);
assert(sna->scrn->vtSema);
if ((sna->flags & (data ? SNA_HAS_FLIP : SNA_HAS_ASYNC_FLIP)) == 0)
diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c
index 08d477e..a1df00c 100644
--- a/src/sna/sna_dri2.c
+++ b/src/sna/sna_dri2.c
@@ -1566,6 +1566,7 @@ can_flip(struct sna * sna,
}
assert(sna->scrn->vtSema);
+ assert(!sna->mode.hidden);
if ((sna->flags & (SNA_HAS_FLIP | SNA_HAS_ASYNC_FLIP)) == 0) {
DBG(("%s: no, pageflips disabled\n", __FUNCTION__));
diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index 5b47bc7..4921bea 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -289,6 +289,7 @@ static Bool sna_create_screen_resources(ScreenPtr screen)
static void sna_dpms_set(ScrnInfoPtr scrn, int mode, int flags)
{
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
+ struct sna *sna = to_sna(scrn);
int i;
DBG(("%s(mode=%d, flags=%d), vtSema=%d\n",
@@ -310,8 +311,12 @@ static void sna_dpms_set(ScrnInfoPtr scrn, int mode, int flags)
if (output->crtc != NULL)
output->funcs->dpms(output, mode);
}
+ sna->mode.hidden = sna->mode.front_active + 1;
+ sna->mode.front_active = 0;
} else {
/* Re-enable CRTC that have been forced off via other means */
+ sna->mode.front_active = sna->mode.hidden - 1;
+ sna->mode.hidden = 0;
for (i = 0; i < config->num_crtc; i++) {
xf86CrtcPtr crtc = config->crtc[i];
if (crtc->enabled)
@@ -326,8 +331,7 @@ static void sna_dpms_set(ScrnInfoPtr scrn, int mode, int flags)
}
sna_crtc_config_notify(xf86ScrnToScreen(scrn));
- to_sna(scrn)->mode.hidden = mode == DPMSModeOff;
- DBG(("%s: hiding outputs? %d\n", __FUNCTION__, to_sna(scrn)->mode.hidden));
+ DBG(("%s: hiding outputs? %d\n", __FUNCTION__, sna->mode.hidden));
}
static Bool sna_save_screen(ScreenPtr screen, int mode)
diff --git a/src/sna/sna_present.c b/src/sna/sna_present.c
index 81cf669..035a54b 100644
--- a/src/sna/sna_present.c
+++ b/src/sna/sna_present.c
@@ -229,7 +229,7 @@ sna_present_check_flip(RRCrtcPtr crtc,
return FALSE;
}
- if (sna->mode.hidden) {
+ if (!sna->mode.front_active) {
DBG(("%s: DPMS off, no flips\n", __FUNCTION__));
return FALSE;
}
More information about the xorg-commit
mailing list