[Intel-gfx] [PATCH 4/4] drm/i915: Don't mangle the CTM on pre-HSW
Shankar, Uma
uma.shankar at intel.com
Wed Feb 28 13:11:12 UTC 2018
>-----Original Message-----
>From: Ville Syrjälä [mailto:ville.syrjala at linux.intel.com]
>Sent: Friday, February 23, 2018 7:23 PM
>To: Shankar, Uma <uma.shankar at intel.com>
>Cc: intel-gfx at lists.freedesktop.org; Lin, Johnson <johnson.lin at intel.com>;
>Sharma, Shashank <shashank.sharma at intel.com>
>Subject: Re: [PATCH 4/4] drm/i915: Don't mangle the CTM on pre-HSW
>
>On Fri, Feb 23, 2018 at 01:33:42PM +0000, Shankar, Uma wrote:
>>
>>
>> >-----Original Message-----
>> >From: Ville Syrjala [mailto:ville.syrjala at linux.intel.com]
>> >Sent: Friday, February 23, 2018 3:13 AM
>> >To: intel-gfx at lists.freedesktop.org
>> >Cc: Lin, Johnson <johnson.lin at intel.com>; Shankar, Uma
>> ><uma.shankar at intel.com>; Sharma, Shashank <shashank.sharma at intel.com>
>> >Subject: [PATCH 4/4] drm/i915: Don't mangle the CTM on pre-HSW
>> >
>> >From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>> >
>> >On pre-HSW we have dedicated hardware for the RGB limited range
>> >handling, and so we don't want to compress with the CSC matrix.
>> >
>> >Toss in a FIXME about gamma LUT vs. limited range using the CSC.
>> >
>> >Cc: Johnson Lin <johnson.lin at intel.com>
>> >Cc: Uma Shankar <uma.shankar at intel.com>
>> >Cc: Shashank Sharma <shashank.sharma at intel.com>
>> >Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
>> >---
>> > drivers/gpu/drm/i915/intel_color.c | 16 ++++++++++++----
>> > 1 file changed, 12 insertions(+), 4 deletions(-)
>> >
>> >diff --git a/drivers/gpu/drm/i915/intel_color.c
>> >b/drivers/gpu/drm/i915/intel_color.c
>> >index af1e61d3bacd..89ab0f70aa22 100644
>> >--- a/drivers/gpu/drm/i915/intel_color.c
>> >+++ b/drivers/gpu/drm/i915/intel_color.c
>> >@@ -140,6 +140,14 @@ static void ilk_load_csc_matrix(struct
>> >drm_crtc_state
>> >*crtc_state)
>> > int i, pipe = intel_crtc->pipe;
>> > uint16_t coeffs[9] = { 0, };
>> > struct intel_crtc_state *intel_crtc_state =
>> >to_intel_crtc_state(crtc_state);
>> >+ bool limited_color_range = false;
>> >+
>> >+ /*
>> >+ * FIXME if there's a gamma LUT after the CSC, we should
>> >+ * do the range compression using the gamma LUT instead.
>> >+ */
>> >+ if (INTEL_GEN(dev_priv) >= 8 || IS_HASWELL(dev_priv))
>> >+ limited_color_range = intel_crtc_state->limited_color_range;
>> >
>>
>> Hi Ville,
>> For VLV or similar platforms (having dedicated color range h/w) for
>> limited_range this matrix would have been getting used. Though they
>> have a dedicated h/w but I don't think it's getting programmed
>> currently. Not sure, with removing this CSC scaling logic, it may
>> break the limited_color scenarios on those platforms. I believe using
>> the dedicated h/w or this scaled_down CSC should be giving similar
>> results making the things work currently. Not sure if we are using any
>> limited_range combinations on those platforms though :)
>
>All pre-HSW platforms that have the pipe CSC (ILK,SNB,IVB) are using the
>dedicated hardware for the limited range RGB output. We don't use the CSC on
>those platforms for anything at the moment so it doesn't actually matter what
>we program into it. But we want to start using the CSC for ctm and ycbcr444
>output which means we have to start setting it up correctly.
>
Sounds good.
Reviewed-by: Uma Shankar <uma.shankar at intel.com>
>>
>> Regards,
>> Uma Shankar
>>
>> > if (intel_crtc_state->ycbcr420) {
>> > ilk_load_ycbcr_conversion_matrix(intel_crtc);
>> >@@ -150,7 +158,7 @@ static void ilk_load_csc_matrix(struct
>> >drm_crtc_state
>> >*crtc_state)
>> > const u64 *input;
>> > u64 temp[9];
>> >
>> >- if (intel_crtc_state->limited_color_range)
>> >+ if (limited_color_range)
>> > input = ctm_mult_by_limited(temp, ctm->matrix);
>> > else
>> > input = ctm->matrix;
>> >@@ -200,7 +208,7 @@ static void ilk_load_csc_matrix(struct
>> >drm_crtc_state
>> >*crtc_state)
>> > * into consideration.
>> > */
>> > for (i = 0; i < 3; i++) {
>> >- if (intel_crtc_state->limited_color_range)
>> >+ if (limited_color_range)
>> > coeffs[i * 3 + i] =
>> > ILK_CSC_COEFF_LIMITED_RANGE;
>> > else
>> >@@ -224,7 +232,7 @@ static void ilk_load_csc_matrix(struct
>> >drm_crtc_state
>> >*crtc_state)
>> > if (INTEL_GEN(dev_priv) > 6) {
>> > uint16_t postoff = 0;
>> >
>> >- if (intel_crtc_state->limited_color_range)
>> >+ if (limited_color_range)
>> > postoff = (16 * (1 << 12) / 255) & 0x1fff;
>> >
>> > I915_WRITE(PIPE_CSC_POSTOFF_HI(pipe), postoff); @@ -235,7
>> >+243,7 @@ static void ilk_load_csc_matrix(struct drm_crtc_state
>> >+*crtc_state)
>> > } else {
>> > uint32_t mode = CSC_MODE_YUV_TO_RGB;
>> >
>> >- if (intel_crtc_state->limited_color_range)
>> >+ if (limited_color_range)
>> > mode |= CSC_BLACK_SCREEN_OFFSET;
>> >
>> > I915_WRITE(PIPE_CSC_MODE(pipe), mode);
>> >--
>> >2.16.1
>>
>
>--
>Ville Syrjälä
>Intel OTC
More information about the Intel-gfx
mailing list