In newer DCN families, there is no hw predefined curves. So, when setting predefined TFs to gamm_corr, shaper, blend and regamma, the driver resorts to the color modules and program those predefined curves using LUTs. The driver is using the same LUT segmentation when translating EOTF and inverse EOTF to hw points by using the same color management helper to translate curve to hw points, however, LUT representing EOTF may not follow the same region/segment distributions of inverse EOTF. This is causing banding on blend when PQ predefined curve is set. Use different helpers when linearizing and delinearizing. This is the first step to fix banding but already mitigates the issue by increase the number of points per segment from 8 to 16.
Signed-off-by: Melissa Wen <[email protected]> --- .../gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.c b/drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.c index b45ceb570a5c..17d54aadb5e1 100644 --- a/drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.c +++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.c @@ -493,9 +493,8 @@ bool dcn32_set_mcm_luts( if (plane_state->blend_tf.type == TF_TYPE_HWPWL) lut_params = &plane_state->blend_tf.pwl; else if (plane_state->blend_tf.type == TF_TYPE_DISTRIBUTED_POINTS) { - result = cm3_helper_translate_curve_to_hw_format(plane_state->ctx, - &plane_state->blend_tf, - &dpp_base->regamma_params, false); + result = cm3_helper_translate_curve_to_degamma_hw_format(&plane_state->blend_tf, + &dpp_base->regamma_params); if (!result) return result; @@ -551,9 +550,8 @@ bool dcn32_set_input_transfer_func(struct dc *dc, if (plane_state->in_transfer_func.type == TF_TYPE_HWPWL) params = &plane_state->in_transfer_func.pwl; else if (plane_state->in_transfer_func.type == TF_TYPE_DISTRIBUTED_POINTS && - cm3_helper_translate_curve_to_hw_format(plane_state->ctx, - &plane_state->in_transfer_func, - &dpp_base->degamma_params, false)) + cm3_helper_translate_curve_to_degamma_hw_format(&plane_state->in_transfer_func, + &dpp_base->degamma_params)) params = &dpp_base->degamma_params; dpp_base->funcs->dpp_program_gamcor_lut(dpp_base, params); -- 2.53.0
