* [PATCH v2 0/2] drm/amd/display: follow-up bug fixes for LUT segmentation
@ 2026-08-20 9:26 Melissa Wen
2026-08-20 9:26 ` [PATCH v2 1/2] drm/amd/display: use halving distribution for all encode-to-linear curves Melissa Wen
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Melissa Wen @ 2026-08-20 9:26 UTC (permalink / raw)
To: airlied, alexander.deucher, christian.koenig, harry.wentland,
mwen, simona, siqueira, sunpeng.li
Cc: Krunoslav Kovac, 'Dr . David Alan Gilbert',
Bhawanpreet Lakha, Alex Hung, Aurabindo Pillai, Matthew Schwartz,
pekka.paalanen, robert.mader, amd-gfx, kernel-dev, linux-kernel
Extend halving distribution to all curves/custom-LUT in a
encode-to-linear operation, not just PQ/SRGB. This fixes IGT kms_colorop
test failures after [1]. Also use the CM3 degamma helper which
translates curves into hw points for DCN30, DCN301, DCN31, and DCN314
not just DCN32+, as the banding issue is present all of them.
[1] https://lore.kernel.org/amd-gfx/20260623160112.1636801-1-mwen@igalia.com/
v1: https://lore.kernel.org/amd-gfx/20260819161106.27702-1-mwen@igalia.com/
Changes:
- Clearly state which DCN versions are affected and the reference commit
(Alex H.)
Melissa
Melissa Wen (2):
drm/amd/display: use halving distribution for all encode-to-linear
curves
drm/amd/display: use translate_curve_to_degamma_hw_format on DCN30
.../amd/display/dc/dcn30/dcn30_cm_common.c | 34 ++++++-------------
.../amd/display/dc/hwss/dcn30/dcn30_hwseq.c | 10 +++---
2 files changed, 14 insertions(+), 30 deletions(-)
--
2.53.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 1/2] drm/amd/display: use halving distribution for all encode-to-linear curves
2026-08-20 9:26 [PATCH v2 0/2] drm/amd/display: follow-up bug fixes for LUT segmentation Melissa Wen
@ 2026-08-20 9:26 ` Melissa Wen
2026-08-20 9:26 ` [PATCH v2 2/2] drm/amd/display: use translate_curve_to_degamma_hw_format on DCN30 Melissa Wen
2026-08-28 20:38 ` [PATCH v2 0/2] drm/amd/display: follow-up bug fixes for LUT segmentation Alex Hung
2 siblings, 0 replies; 4+ messages in thread
From: Melissa Wen @ 2026-08-20 9:26 UTC (permalink / raw)
To: airlied, alexander.deucher, christian.koenig, harry.wentland,
mwen, simona, siqueira, sunpeng.li
Cc: Krunoslav Kovac, 'Dr . David Alan Gilbert',
Bhawanpreet Lakha, Alex Hung, Aurabindo Pillai, Matthew Schwartz,
pekka.paalanen, robert.mader, amd-gfx, kernel-dev, linux-kernel
In encode-to-linear conversions, LUT entries should be uniformly
distributed across the input range: non-linear encodings are already
approximately perceptually uniform, so every input code carries the same
weight. A fixed count per region does the opposite, concentrating
entries on the darker values and leaving few for the bright end, whereas
halving distribution spaces all 256 entries uniformly. This holds for
any encoded input, so remove the PQ/sRGB condition from commit
de17c6bb7072 ("drm/amd/display: use halving distribution for PQ/sRGB
linearizing LUT") and apply halving to all encode-to-linear operations
(pre-defined TF or user LUTs).
It fixes the following IGT kms_colorop subtests:
- plane-XR30-XR30-srgb_inv_eotf_lut-srgb_eotf_lut
- plane-XR30-XR30-gamma_2_2-gamma_2_2_inv-gamma_2_2
Fixes: de17c6bb7072 ("drm/amd/display: use halving distribution for PQ/sRGB linearizing LUT")
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Melissa Wen <mwen@igalia.com>
---
.../amd/display/dc/dcn30/dcn30_cm_common.c | 34 ++++++-------------
1 file changed, 10 insertions(+), 24 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c
index 66fe7f313ea3..62ca235cd649 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c
@@ -320,6 +320,8 @@ static struct fixed31_32 interp_tf_pts(const struct fixed31_32 *output_tf_channe
return value;
}
+#define NUM_DEGAMMA_REGIONS 9
+
bool cm3_helper_translate_curve_to_degamma_hw_format(
const struct dc_transfer_func *output_tf,
struct pwl_params *lut_params)
@@ -343,31 +345,15 @@ bool cm3_helper_translate_curve_to_degamma_hw_format(
memset(lut_params, 0, sizeof(struct pwl_params));
memset(seg_distr, 0, sizeof(seg_distr));
- if (output_tf->tf == TRANSFER_FUNCTION_PQ ||
- output_tf->tf == TRANSFER_FUNCTION_SRGB) {
- /* 9 segments
- * segments are from 2^-9 to 0
- */
- const uint8_t SEG_COUNT = 9;
- seg_distr[0] = 0; // Since we only have one point in darkest region
- for (k = 1; k < SEG_COUNT; k++)
- seg_distr[k] = k - 1; // 2^(k-1) points per region; halves as k decreases
+ /* 9 segments
+ * segments are from 2^-9 to 2^0
+ */
+ seg_distr[0] = 0; // Since we only have one point in darkest region
+ for (k = 1; k < NUM_DEGAMMA_REGIONS; k++)
+ seg_distr[k] = k - 1; // 2^(k-1) points per region; halves as k decreases
- region_start = -SEG_COUNT;
- region_end = 0;
- } else {
- /* 12 segments
- * segments are from 2^-12 to 2^0
- * There are less than 256 points, for optimization
- */
- const uint8_t SEG_COUNT = 12;
-
- for (i = 0; i < SEG_COUNT; i++)
- seg_distr[i] = 4;
-
- region_start = -SEG_COUNT;
- region_end = 0;
- }
+ region_start = -NUM_DEGAMMA_REGIONS;
+ region_end = 0;
for (i = region_end - region_start; i < MAX_REGIONS_NUMBER ; i++)
seg_distr[i] = -1;
--
2.53.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] drm/amd/display: use translate_curve_to_degamma_hw_format on DCN30
2026-08-20 9:26 [PATCH v2 0/2] drm/amd/display: follow-up bug fixes for LUT segmentation Melissa Wen
2026-08-20 9:26 ` [PATCH v2 1/2] drm/amd/display: use halving distribution for all encode-to-linear curves Melissa Wen
@ 2026-08-20 9:26 ` Melissa Wen
2026-08-28 20:38 ` [PATCH v2 0/2] drm/amd/display: follow-up bug fixes for LUT segmentation Alex Hung
2 siblings, 0 replies; 4+ messages in thread
From: Melissa Wen @ 2026-08-20 9:26 UTC (permalink / raw)
To: airlied, alexander.deucher, christian.koenig, harry.wentland,
mwen, simona, siqueira, sunpeng.li
Cc: Krunoslav Kovac, 'Dr . David Alan Gilbert',
Bhawanpreet Lakha, Alex Hung, Aurabindo Pillai, Matthew Schwartz,
pekka.paalanen, robert.mader, amd-gfx, kernel-dev, linux-kernel
DCN3.01 presents the same banding issue as reported in the link below,
but the previous fix doesn't cover this hw. Change the helper used to
translate degamma/blend curves to HW points for DCN30, DCN 301, DCN31
and DCN314 similar to what was done for DCN32+ by commit 3719314af322
("drm/amd/display: use a separate helper to translate degamma curves").
Link: https://lore.kernel.org/amd-gfx/20260623160112.1636801-1-mwen@igalia.com/
Fixes: 3719314af322 ("drm/amd/display: use a separate helper to translate degamma curves")
Signed-off-by: Melissa Wen <mwen@igalia.com>
---
.../gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c b/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c
index cb163902e12e..6980f622db0a 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c
@@ -243,10 +243,9 @@ bool dcn30_set_blend_lut(
if (plane_state->cm.blend_func.type == TF_TYPE_HWPWL)
blend_lut = &plane_state->cm.blend_func.pwl;
else if (plane_state->cm.blend_func.type == TF_TYPE_DISTRIBUTED_POINTS) {
- result = cm3_helper_translate_curve_to_hw_format(plane_state->ctx,
+ result = cm3_helper_translate_curve_to_degamma_hw_format(
&plane_state->cm.blend_func,
- &dpp_base->regamma_params,
- false);
+ &dpp_base->regamma_params);
if (!result)
return result;
@@ -337,9 +336,8 @@ bool dcn30_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;
result = dpp_base->funcs->dpp_program_gamcor_lut(dpp_base, params);
--
2.53.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2 0/2] drm/amd/display: follow-up bug fixes for LUT segmentation
2026-08-20 9:26 [PATCH v2 0/2] drm/amd/display: follow-up bug fixes for LUT segmentation Melissa Wen
2026-08-20 9:26 ` [PATCH v2 1/2] drm/amd/display: use halving distribution for all encode-to-linear curves Melissa Wen
2026-08-20 9:26 ` [PATCH v2 2/2] drm/amd/display: use translate_curve_to_degamma_hw_format on DCN30 Melissa Wen
@ 2026-08-28 20:38 ` Alex Hung
2 siblings, 0 replies; 4+ messages in thread
From: Alex Hung @ 2026-08-28 20:38 UTC (permalink / raw)
To: Melissa Wen, airlied, alexander.deucher, christian.koenig,
harry.wentland, simona, siqueira, sunpeng.li
Cc: Krunoslav Kovac, 'Dr . David Alan Gilbert',
Bhawanpreet Lakha, Aurabindo Pillai, Matthew Schwartz,
pekka.paalanen, robert.mader, amd-gfx, kernel-dev, linux-kernel,
Wheeler, Daniel
Weekly promotion tests found no regression.
This series is
Reviewed-by: Alex Hung <alex.hung@amd.com>
On 8/20/26 03:26, Melissa Wen wrote:
> Extend halving distribution to all curves/custom-LUT in a
> encode-to-linear operation, not just PQ/SRGB. This fixes IGT kms_colorop
> test failures after [1]. Also use the CM3 degamma helper which
> translates curves into hw points for DCN30, DCN301, DCN31, and DCN314
> not just DCN32+, as the banding issue is present all of them.
>
> [1] https://lore.kernel.org/amd-gfx/20260623160112.1636801-1-mwen@igalia.com/
>
> v1: https://lore.kernel.org/amd-gfx/20260819161106.27702-1-mwen@igalia.com/
> Changes:
> - Clearly state which DCN versions are affected and the reference commit
> (Alex H.)
>
> Melissa
>
>
> Melissa Wen (2):
> drm/amd/display: use halving distribution for all encode-to-linear
> curves
> drm/amd/display: use translate_curve_to_degamma_hw_format on DCN30
>
> .../amd/display/dc/dcn30/dcn30_cm_common.c | 34 ++++++-------------
> .../amd/display/dc/hwss/dcn30/dcn30_hwseq.c | 10 +++---
> 2 files changed, 14 insertions(+), 30 deletions(-)
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-08-28 20:38 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-20 9:26 [PATCH v2 0/2] drm/amd/display: follow-up bug fixes for LUT segmentation Melissa Wen
2026-08-20 9:26 ` [PATCH v2 1/2] drm/amd/display: use halving distribution for all encode-to-linear curves Melissa Wen
2026-08-20 9:26 ` [PATCH v2 2/2] drm/amd/display: use translate_curve_to_degamma_hw_format on DCN30 Melissa Wen
2026-08-28 20:38 ` [PATCH v2 0/2] drm/amd/display: follow-up bug fixes for LUT segmentation Alex Hung
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®