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