On 27/11/2025 17:39, Harry Wentland wrote:
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?
Hi Harry,
I took some pictures of clear unexpected scenes in HDR games.
1.
https://people.igalia.com/mwen/hdr-dcn321-pics/HDR-DCN321-split-fiction-game-black-loading-bkg.jpg
Just loading Split Fiction after having turning on HDR in this game
options (Options > Graphics > HDR).
We expected a black background with the Loading <icon> in the bottom
right, this background is full of bright spots.
Friend pass is enough to reproduce the issue without having the game.
2.
https://people.igalia.com/mwen/hdr-dcn321-pics/HDR-DCN321-god-of-war-ragnarok-menu.jpg
Colorful-bright points around the margin/corner of the God of War
Ragnarok game menu.
3. God of War Ragnarok game intro:
-
https://people.igalia.com/mwen/hdr-dcn321-pics/HDR-DCN321-god-of-war-ragnarok-intro1.jpg
-
https://people.igalia.com/mwen/hdr-dcn321-pics/HDR-DCN321-god-of-war-ragnarok-intro2.jpg
-
https://people.igalia.com/mwen/hdr-dcn321-pics/HDR-DCN321-god-of-war-ragnarok-intro3.jpg
-
https://people.igalia.com/mwen/hdr-dcn321-pics/HDR-DCN321-god-of-war-ragnarok-PS-logo.jpg
Same random shimmer distortions.
I think those images are good examples, but still pending screenshot/GFX
examples for comparison.
I'll take it and reply here later.
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.
I see. Looks like now we have somehow the same problem but in reverse
(?) like black values mapped into bright values (?)
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?
Yes, I remember this issue.
I've already tried the same changes from this commit
(https://gitlab.freedesktop.org/agd5f/linux/-/commit/27fc10d1095f) to
cm3_helper, but it doesn't help... probably because the commit was
addressing a different behaviors.
I also noticed on cm3_ they consider a different range of hw points, as
in this comment:
"
// DCN3+ have 257 pts in lieu of no separate slope registers
// Prior HW had 256 base+slope pairs
"
Can it be related to this problem?
Thanks,
Melissa
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;
}