[Intel-gfx] [PATCH 13/13] drm/i915: Disable pipe gamma when C8 pixel format is used

Shankar, Uma uma.shankar at intel.com
Thu Jan 17 05:58:04 UTC 2019



>-----Original Message-----
>From: Ville Syrjala [mailto:ville.syrjala at linux.intel.com]
>Sent: Friday, January 11, 2019 10:38 PM
>To: intel-gfx at lists.freedesktop.org
>Cc: Shankar, Uma <uma.shankar at intel.com>; Roper, Matthew D
><matthew.d.roper at intel.com>
>Subject: [PATCH 13/13] drm/i915: Disable pipe gamma when C8 pixel format is
>used
>
>From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
>Planes scanning out C8 will want to use the legacy lut as their palette. That means
>the LUT content are unikely to be useful for gamma correction on other planes.

Typo in unlikely.

With this fixed.
Reviewed-by: Uma Shankar <uma.shankar at intel.com>

>Thus we should disable pipe gamma for all the other planes. And we should reject
>any non legacy LUT configurations when
>C8 planes are present.
>
>Fixes the appearance of the hw cursor when running X -depth 8.
>
>Note that CHV with it's independent CGM degamma/gamma LUTs could probably
>use the CGM for gamma correction even when the legacy LUT is used for C8. But
>that would require a new uapi for configuring the legacy LUT and CGM LUTs at
>the same time. Totally not worth it.
>
>Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
>---
> drivers/gpu/drm/i915/intel_atomic_plane.c | 5 +++++
> drivers/gpu/drm/i915/intel_color.c        | 8 +++++++-
> drivers/gpu/drm/i915/intel_drv.h          | 1 +
> 3 files changed, 13 insertions(+), 1 deletion(-)
>
>diff --git a/drivers/gpu/drm/i915/intel_atomic_plane.c
>b/drivers/gpu/drm/i915/intel_atomic_plane.c
>index 50be2c5dd76e..f311763867c4 100644
>--- a/drivers/gpu/drm/i915/intel_atomic_plane.c
>+++ b/drivers/gpu/drm/i915/intel_atomic_plane.c
>@@ -119,6 +119,7 @@ int intel_plane_atomic_check_with_state(const struct
>intel_crtc_state *old_crtc_
>
> 	new_crtc_state->active_planes &= ~BIT(plane->id);
> 	new_crtc_state->nv12_planes &= ~BIT(plane->id);
>+	new_crtc_state->c8_planes &= ~BIT(plane->id);
> 	new_plane_state->base.visible = false;
>
> 	if (!new_plane_state->base.crtc && !old_plane_state->base.crtc) @@ -
>136,6 +137,10 @@ int intel_plane_atomic_check_with_state(const struct
>intel_crtc_state *old_crtc_
> 	    new_plane_state->base.fb->format->format == DRM_FORMAT_NV12)
> 		new_crtc_state->nv12_planes |= BIT(plane->id);
>
>+	if (new_plane_state->base.visible &&
>+	    new_plane_state->base.fb->format->format == DRM_FORMAT_C8)
>+		new_crtc_state->c8_planes |= BIT(plane->id);
>+
> 	if (new_plane_state->base.visible || old_plane_state->base.visible)
> 		new_crtc_state->update_planes |= BIT(plane->id);
>
>diff --git a/drivers/gpu/drm/i915/intel_color.c
>b/drivers/gpu/drm/i915/intel_color.c
>index 789b04bb51d2..c8d12653d77f 100644
>--- a/drivers/gpu/drm/i915/intel_color.c
>+++ b/drivers/gpu/drm/i915/intel_color.c
>@@ -691,7 +691,13 @@ int intel_color_check(struct intel_crtc_state
>*crtc_state)
> 	degamma_length = INTEL_INFO(dev_priv)->color.degamma_lut_size;
> 	gamma_length = INTEL_INFO(dev_priv)->color.gamma_lut_size;
>
>-	crtc_state->gamma_enable = gamma_lut || degamma_lut;
>+	/* C8 needs the legacy LUT all to itself */
>+	if (crtc_state->c8_planes &&
>+	    !crtc_state_is_legacy_gamma(crtc_state))
>+		return -EINVAL;
>+
>+	crtc_state->gamma_enable = (gamma_lut || degamma_lut) &&
>+		!crtc_state->c8_planes;
>
> 	if (INTEL_GEN(dev_priv) >= 9 ||
> 	    IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv)) diff --git
>a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
>index a4496f799af3..4d9ea05a6825 100644
>--- a/drivers/gpu/drm/i915/intel_drv.h
>+++ b/drivers/gpu/drm/i915/intel_drv.h
>@@ -930,6 +930,7 @@ struct intel_crtc_state {
> 	/* bitmask of visible planes (enum plane_id) */
> 	u8 active_planes;
> 	u8 nv12_planes;
>+	u8 c8_planes;
>
> 	/* bitmask of planes that will be updated during the commit */
> 	u8 update_planes;
>--
>2.19.2



More information about the Intel-gfx mailing list