[Intel-gfx] [PATCH] drm/i915: avoid full modeset when changing the color range properties
Ville Syrjälä
ville.syrjala at linux.intel.com
Mon Apr 22 13:24:49 CEST 2013
On Fri, Apr 19, 2013 at 05:26:27PM +0200, Daniel Vetter wrote:
> Automatic color range selection was added in
>
> commit 55bc60db5988c8366751d3d04dd690698a53412c
> Author: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Date: Thu Jan 17 16:31:29 2013 +0200
>
> drm/i915: Add "Automatic" mode for the "Broadcast RGB" property
>
> but that removed the check to avoid a full modeset if the value is
> unchanged. Unfortunately X sets all properties with their current
> value at start-up, resulting in some ugly flickering which shouldn't
> be there.
How silly of me to drop the unchanged check.
>
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Cc: Paulo Zanoni <paulo.r.zanoni at intel.com>
> Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
> drivers/gpu/drm/i915/intel_dp.c | 8 ++++++++
> drivers/gpu/drm/i915/intel_hdmi.c | 8 ++++++++
> drivers/gpu/drm/i915/intel_sdvo.c | 8 ++++++++
> 3 files changed, 24 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 50a9d9f..be529da 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -2666,6 +2666,9 @@ intel_dp_set_property(struct drm_connector *connector,
> }
>
> if (property == dev_priv->broadcast_rgb_property) {
> + bool old_auto = intel_dp->color_range_auto;
> + bool old_range = intel_dp->color_range;
This looks like it shouldn't work.
We have these guys:
#define HDMI_COLOR_RANGE_16_235 (1 << 8) /* HDMI only */
#define DP_COLOR_RANGE_16_235 (1 << 8)
When assigned to bool they become true (== 1), and then that gets
promoted to uint32_t for the comparison below, so it will never match.
> +
> switch (val) {
> case INTEL_BROADCAST_RGB_AUTO:
> intel_dp->color_range_auto = true;
> @@ -2681,6 +2684,11 @@ intel_dp_set_property(struct drm_connector *connector,
> default:
> return -EINVAL;
> }
> +
> + if (old_auto == intel_dp->color_range_auto &&
> + old_range == intel_dp->color_range)
> + return 0;
> +
> goto done;
> }
>
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index 3942041..40d5812 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -947,6 +947,9 @@ intel_hdmi_set_property(struct drm_connector *connector,
> }
>
> if (property == dev_priv->broadcast_rgb_property) {
> + bool old_auto = intel_hdmi->color_range_auto;
> + bool old_range = intel_hdmi->color_range;
> +
> switch (val) {
> case INTEL_BROADCAST_RGB_AUTO:
> intel_hdmi->color_range_auto = true;
> @@ -962,6 +965,11 @@ intel_hdmi_set_property(struct drm_connector *connector,
> default:
> return -EINVAL;
> }
> +
> + if (old_auto == intel_hdmi->color_range_auto &&
> + old_range == intel_hdmi->color_range)
> + return 0;
> +
> goto done;
> }
>
> diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
> index a618a6a..c1f7e0a 100644
> --- a/drivers/gpu/drm/i915/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/intel_sdvo.c
> @@ -1930,6 +1930,9 @@ intel_sdvo_set_property(struct drm_connector *connector,
> }
>
> if (property == dev_priv->broadcast_rgb_property) {
> + bool old_auto = intel_sdvo->color_range_auto;
> + bool old_range = intel_sdvo->color_range;
> +
> switch (val) {
> case INTEL_BROADCAST_RGB_AUTO:
> intel_sdvo->color_range_auto = true;
> @@ -1947,6 +1950,11 @@ intel_sdvo_set_property(struct drm_connector *connector,
> default:
> return -EINVAL;
> }
> +
> + if (old_auto == intel_sdvo->color_range_auto &&
> + old_range == intel_sdvo->color_range)
> + return 0;
> +
> goto done;
> }
>
> --
> 1.7.11.7
--
Ville Syrjälä
Intel OTC
More information about the Intel-gfx
mailing list