xf86-video-intel: 6 commits - src/sna/sna_damage.h src/sna/sna_display.c
Chris Wilson
ickle at kemper.freedesktop.org
Thu Jun 5 08:07:28 PDT 2014
src/sna/sna_damage.h | 4 +-
src/sna/sna_display.c | 89 +++++++++++++++++++++++---------------------------
2 files changed, 43 insertions(+), 50 deletions(-)
New commits:
commit b545e10c50cbb2dd6f9fd53369667bed0d8f1b51
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Jun 5 15:54:32 2014 +0100
sna: When the output is off, report the cached backlight value
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 8757847..2dbe3f3 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -2646,9 +2646,17 @@ sna_output_get_property(xf86OutputPtr output, Atom property)
if (!sna_output->backlight.iface)
return FALSE;
- val = sna_output_backlight_get(output);
- if (val < 0)
- return FALSE;
+ if (sna_output->dpms_mode == DPMSModeOn) {
+ val = sna_output_backlight_get(output);
+ if (val < 0)
+ return FALSE;
+ DBG(("%s(%s): output on, reporting actual backlight value [%d]\n",
+ __FUNCTION__, output->name, val));
+ } else {
+ val = sna_output->backlight_active_level;
+ DBG(("%s(%s): output off, reporting cached backlight value [%d]\n",
+ __FUNCTION__, output->name, val));
+ }
err = RRChangeOutputProperty(output->randr_output, property,
XA_INTEGER, 32, PropModeReplace, 1, &val,
commit f0b8720807d9c1994e6db91a607efe4711b0d1ca
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Jun 5 15:31:54 2014 +0100
sna: Inline calls to save/restore backlight around output DPMS
The intertwined logic was a little confusing to read mixed between the
functions, so inline it.
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 bfc95f6..8757847 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -475,6 +475,8 @@ done:
output->name, best_iface ?: "none"));
sna_output->backlight_active_level =
backlight_open(&sna_output->backlight, best_iface);
+ DBG(("%s(%s): initial backlight value %d\n",
+ __FUNCTION__, output->name, sna_output->backlight_active_level));
if (sna_output->backlight_active_level < 0)
return;
@@ -2368,29 +2370,6 @@ sna_output_destroy(xf86OutputPtr output)
}
static void
-sna_output_dpms_backlight(xf86OutputPtr output, int oldmode, int mode)
-{
- struct sna_output *sna_output = output->driver_private;
-
- if (!sna_output->backlight.iface)
- return;
-
- DBG(("%s(%s:%d) -- %d -> %d\n", __FUNCTION__, output->name, sna_output->id, oldmode, mode));
-
- if (mode == DPMSModeOn) {
- /* If we're going from off->on we may need to turn on the backlight. */
- if (oldmode != DPMSModeOn)
- sna_output_backlight_set(output,
- sna_output->backlight_active_level);
- } else {
- /* Only save the current backlight value if we're going from on to off. */
- if (oldmode == DPMSModeOn)
- sna_output->backlight_active_level = sna_output_backlight_get(output);
- sna_output_backlight_set(output, 0);
- }
-}
-
-static void
sna_output_dpms(xf86OutputPtr output, int dpms)
{
struct sna *sna = to_sna(output->scrn);
@@ -2414,10 +2393,14 @@ sna_output_dpms(xf86OutputPtr output, int dpms)
* record the value before the kernel modifies it
* and reapply it afterwards.
*/
- if (dpms != DPMSModeOn)
- sna_output_dpms_backlight(output,
- sna_output->dpms_mode,
- dpms);
+ if (sna_output->backlight.iface && dpms != DPMSModeOn) {
+ if (sna_output->dpms_mode == DPMSModeOn) {
+ sna_output->backlight_active_level = sna_output_backlight_get(output);
+ DBG(("%s: saving current backlight %d\n",
+ __FUNCTION__, sna_output->backlight_active_level));
+ }
+ sna_output_backlight_set(output, 0);
+ }
if (output->crtc &&
drmModeConnectorSetProperty(sna->kgem.fd,
@@ -2426,10 +2409,12 @@ sna_output_dpms(xf86OutputPtr output, int dpms)
dpms))
dpms = sna_output->dpms_mode;
- if (dpms == DPMSModeOn)
- sna_output_dpms_backlight(output,
- sna_output->dpms_mode,
- dpms);
+ if (sna_output->backlight.iface && dpms == DPMSModeOn) {
+ DBG(("%s: restoring previous backlight %d\n",
+ __FUNCTION__, sna_output->backlight_active_level));
+ sna_output_backlight_set(output,
+ sna_output->backlight_active_level);
+ }
sna_output->dpms_mode = dpms;
}
commit 9f7775158341c8384da870e06cab200deddf48c1
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Jun 5 15:31:27 2014 +0100
sna: Set initial output DPMS state from kernel
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 b0edd06..bfc95f6 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -2023,13 +2023,6 @@ find_property(struct sna *sna, struct sna_output *output, const char *name)
return -1;
}
-static int
-find_property_id(struct sna *sna, struct sna_output *output, const char *name)
-{
- int idx = find_property(sna, output, name);
- return idx != -1 ? output->prop_ids[idx] : 0;
-}
-
static xf86OutputStatus
sna_output_detect(xf86OutputPtr output)
{
@@ -2913,7 +2906,7 @@ sna_output_add(struct sna *sna, int id, int serial)
char name[32];
int len, i;
- DBG(("%s(%d)\n", __FUNCTION__, id));
+ DBG(("%s(%d): serial=%d\n", __FUNCTION__, id, serial));
COMPILE_TIME_ASSERT(sizeof(struct drm_mode_get_connector) <= sizeof(compat_conn.pad));
@@ -3007,7 +3000,6 @@ sna_output_add(struct sna *sna, int id, int serial)
sna_output->num_props = compat_conn.conn.count_props;
sna_output->prop_ids = malloc(sizeof(uint32_t)*compat_conn.conn.count_props);
sna_output->prop_values = malloc(sizeof(uint64_t)*compat_conn.conn.count_props);
- sna_output->dpms_mode = DPMSModeOff;
compat_conn.conn.count_encoders = 0;
@@ -3059,7 +3051,16 @@ sna_output_add(struct sna *sna, int id, int serial)
sna_output->id = compat_conn.conn.connector_id;
sna_output->is_panel = is_panel(compat_conn.conn.connector_type);
sna_output->edid_idx = find_property(sna, sna_output, "EDID");
- sna_output->dpms_id = find_property_id(sna, sna_output, "DPMS");
+ i = find_property(sna, sna_output, "DPMS");
+ if (i != -1) {
+ sna_output->dpms_id = sna_output->prop_ids[i];
+ sna_output->dpms_mode = sna_output->prop_values[i];
+ DBG(("%s: found 'DPMS' (idx=%d, id=%d), initial value=%d\n",
+ __FUNCTION__, i, sna_output->dpms_id, sna_output->dpms_mode));
+ } else {
+ sna_output->dpms_id = -1;
+ sna_output->dpms_mode = DPMSModeOff;
+ }
sna_output->possible_encoders = possible_encoders;
sna_output->attached_encoders = attached_encoders;
commit 9e02fe269dc79ff867d1d2cb3a8673ee2861bd56
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Jun 5 15:49:03 2014 +0100
sna: Make sure we recompute the vblank interval after reconfiguring the CRTC
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 4006efe..b0edd06 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1785,10 +1785,8 @@ sna_crtc_dpms(xf86CrtcPtr crtc, int mode)
} else
sna_crtc_disable(crtc);
- if (priv->bo != NULL) {
+ if (priv->bo != NULL)
priv->dpms_mode = mode;
- update_flush_interval(to_sna(crtc->scrn));
- }
}
void sna_mode_adjust_frame(struct sna *sna, int x, int y)
@@ -4670,6 +4668,7 @@ sna_crtc_config_notify(ScreenPtr screen)
return;
probe_capabilities(sna);
+ update_flush_interval(sna);
sna_cursors_reload(sna);
commit 51909f37ed6405c38f1c46a4012952be79031994
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Jun 5 14:54:55 2014 +0100
sna: Skip marking the CRTC as damaged for TearFree
As we have reorder the application of damage on a TearFree frontbuffer
to before we attach the CRTC, we do not need to then schedule the update
afterwards (until it gets drawn by the client).
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 46fc22c..4006efe 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1756,7 +1756,7 @@ retry: /* Attach per-crtc pixmap or direct */
}
sna_crtc_randr(crtc);
- if (sna_crtc->shadow)
+ if (sna_crtc->transform)
sna_crtc_damage(crtc);
sna->mode.front_active += saved_bo == NULL;
sna->mode.dirty = true;
commit c7efe88a895a692e5f840562a09dac385508db57
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Jun 5 14:50:04 2014 +0100
sna: Fix DBG compilation
Update the DBG to reflect the new arguments to sna_damage_reduce_all()
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_damage.h b/src/sna/sna_damage.h
index 42edb10..9b6f213 100644
--- a/src/sna/sna_damage.h
+++ b/src/sna/sna_damage.h
@@ -268,11 +268,11 @@ static inline void sna_damage_reduce_all(struct sna_damage **_damage,
{
struct sna_damage *damage = *_damage;
- DBG(("%s(width=%d, height=%d)\n", __FUNCTION__, width, height));
-
if (damage == NULL || DAMAGE_IS_ALL(damage))
return;
+ DBG(("%s(width=%d, height=%d)\n", __FUNCTION__, pixmap->drawable.width, pixmap->drawable.height));
+
if (damage->mode == DAMAGE_ADD) {
if (damage->extents.x1 <= 0 &&
damage->extents.y1 <= 0 &&
More information about the xorg-commit
mailing list