From: Sean Paul Date: Wed, 21 Mar 2018 13:40:55 +0000 (-0400) Subject: Merge airlied/drm-next into drm-misc-next X-Git-Tag: for-linus-20180413~101^2^2~1 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=1c7095d2836baafd84e596dd34ba1a1293a4faa9;p=linux-block.git Merge airlied/drm-next into drm-misc-next Refresh -misc-next Signed-off-by: Sean Paul --- 1c7095d2836baafd84e596dd34ba1a1293a4faa9 diff --cc drivers/gpu/drm/i915/intel_color.c index 768f1c26080e,89ab0f70aa22..c6a7beabd58d --- a/drivers/gpu/drm/i915/intel_color.c +++ b/drivers/gpu/drm/i915/intel_color.c @@@ -140,20 -140,28 +140,27 @@@ static void ilk_load_csc_matrix(struct 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; if (intel_crtc_state->ycbcr420) { - i9xx_load_ycbcr_conversion_matrix(intel_crtc); + ilk_load_ycbcr_conversion_matrix(intel_crtc); return; } else if (crtc_state->ctm) { - struct drm_color_ctm *ctm = - (struct drm_color_ctm *)crtc_state->ctm->data; + struct drm_color_ctm *ctm = crtc_state->ctm->data; - uint64_t input[9] = { 0, }; + const u64 *input; + u64 temp[9]; - if (intel_crtc_state->limited_color_range) { - ctm_mult_by_limited(input, ctm->matrix); - } else { - for (i = 0; i < ARRAY_SIZE(input); i++) - input[i] = ctm->matrix[i]; - } + if (limited_color_range) + input = ctm_mult_by_limited(temp, ctm->matrix); + else + input = ctm->matrix; /* * Convert fixed point S31.32 input to format supported by the