On 2025-11-25 19:45, Melissa Wen wrote:
> The usage of DCN30 CM helper creates some unexpected shimmer points on
> PQ shaper TF in the steamOS HDR color pipeline. Fix it by using the same
> DCN10 color mgmt helper of previous hw versions to translate plane
> shaper func to hw format in DCN32 hw family.
> 
> Signed-off-by: Melissa Wen <[email protected]>
> ---
> 
> Hi,
> 
> Commit a953cd8cac6b ("drm/amd/display: Fix MPCC 1DLUT programming")
> mentions some visible artifacts when using DCN10 CM helper on DCN32
> shaper and blend LUTs. On the other hand, using DCN30 CM helper creates
> some shimmer points on steamOS HDR pipeline. We didn't noticed any
> visible artifacts so far, but I'd like to know more about what kind of
> artifacts were visible at the time this helper for shaper func was
> switched in the afore-mentioned commit for further investigation.
> 

Thanks for the debug.

Do you have more info on the unexpected shimmer points with SteamOS?
Ideally a video and a description on what to look for and why it's
wrong, or a comparison to a GFX-transformed example that shows the
correct visuals?

Obviously we don't want to simply switch back to DCN10 helpers
without understand why, and potentially regressing other use-cases.
At least we should look at what the differences are between the
two versions of that function, and which part of the curve programming
causes the undesirable results.

The original bug that was solved by that commit was a regression that
sent bright values in an HDR video to black or red, so basically
something really messed up bright PQ values. At least I suspect
it was a PQ HDR video. The ticket doesn't state that.

When looking at the diff between the two functions I notice that
the cm3_ version is missing the dc_fixpt_clamp_u0d10 for the
delta_<color>_reg assignments, toward the bottom of the function.
I remember I had to add that to the cm_ version since it caused
issues with SteamOS HDR. Can we try that on the cm3_ function?

Cheers,
Harry

> Thanks in advance,
> 
> Melissa
> 
> 
>  drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 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 bf19ba65d09a..a28560caa1c0 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
> @@ -501,9 +501,9 @@ bool dcn32_set_mcm_luts(
>               lut_params = &plane_state->in_shaper_func.pwl;
>       else if (plane_state->in_shaper_func.type == 
> TF_TYPE_DISTRIBUTED_POINTS) {
>               // TODO: dpp_base replace
> -             ASSERT(false);
> -             
> cm3_helper_translate_curve_to_hw_format(&plane_state->in_shaper_func,
> -                             &dpp_base->shaper_params, true);
> +             cm_helper_translate_curve_to_hw_format(plane_state->ctx,
> +                                                    
> &plane_state->in_shaper_func,
> +                                                    
> &dpp_base->shaper_params, true);
>               lut_params = &dpp_base->shaper_params;
>       }
>  

Reply via email to