From nobody Mon Sep 28 16:21:58 2026 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0E08D3F12E3 for ; Thu, 20 Aug 2026 09:33:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.97.179.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787218435; cv=none; b=XSYnfkiAwD5X3ND61fZazMOlf1Hq2F0XbWbbVQUvBUhgUMq1pOGOXaZXJIsorjuZ3odau1WX9KGWLD6EJH2TiwB+ijZ3YBsGgnLccq9NTMBAQiEJ8KhApNl312er+npwxK9W8mRfBFBl79HN83heHBl8RGU06CDzXvCjQXavZ5Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787218435; c=relaxed/simple; bh=ktUM4uNQeUpq1co1NEDUwViSoc6wp4ctbnTSYqq3NMU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f2AMUgENv2b9TWiyDriKWBygovQGY3Ch9bwX3BzHUU2eHhpg2Tws43N6OCHcVwx1d5yPY2EYIWpkVTUc7/9kr6ZSj7/U3Q2jBTOapr6OfhW5CTN7le1xelzZ0jOTQZOsztOncbNrG2kf/xH2fuScKVnd4wLdddSbp4E3Oe3469Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=XFsj1A1I; arc=none smtp.client-ip=213.97.179.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="XFsj1A1I" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:Message-ID:Date:Subject: Cc:To:From:From:Reply-To; bh=Sfbuig5mEW6sA2+Psk8A6QSbxAEmSHnm+N6G+mrfy1U=; b= XFsj1A1IO4ge0f5jYglr7WX4v+eyPdDmzLwg+qRbEFSBsq1BqU3taEsA+aLl+3FYoWE5c433ZaE8p 4BPd+t+680UwK51MM1yLimzqw4oflSTSX2ogqRmHDDOe0qqTxwFV5qOTMr3m3dpLuHLIBSWt2IAC2 GPNBens4uAgRjmj6ohTYNKLrEsflnx6kdG+d77Gx/wmiTn60e3jvD7CZRYqt9NGQ+Hk4Bmcibzm0u sfSnEoBJ1Xrmh30Ot9HSw8mLwphsHpYXc/cy0s3644eZh9j5Dl4/ojiT2aVECEaQ84GeOL+/wH2UQ i/41veBwAw3mYEHFUpTHLPa9nxm4WljyiQ==; Received: from 154.red-79-147-121.dynamicip.rima-tde.net ([79.147.121.154] helo=killbill) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1wwz9K-006WKe-IY; Thu, 20 Aug 2026 11:33:26 +0200 From: Melissa Wen To: airlied@gmail.com, alexander.deucher@amd.com, christian.koenig@amd.com, harry.wentland@amd.com, mwen@igalia.com, simona@ffwll.ch, siqueira@igalia.com, sunpeng.li@amd.com Cc: Krunoslav Kovac , "'Dr . David Alan Gilbert'" , Bhawanpreet Lakha , Alex Hung , Aurabindo Pillai , Matthew Schwartz , pekka.paalanen@collabora.com, robert.mader@posteo.de, amd-gfx@lists.freedesktop.org, kernel-dev@igalia.com, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/2] drm/amd/display: use halving distribution for all encode-to-linear curves Date: Thu, 20 Aug 2026 11:26:37 +0200 Message-ID: <20260820093324.10201-2-mwen@igalia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820093324.10201-1-mwen@igalia.com> References: <20260820093324.10201-1-mwen@igalia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 Signed-off-by: Melissa Wen Reviewed-by: Alex Hung --- .../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/drive= rs/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 fix= ed31_32 *output_tf_channe return value; } =20 +#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)); =20 - if (output_tf->tf =3D=3D TRANSFER_FUNCTION_PQ || - output_tf->tf =3D=3D TRANSFER_FUNCTION_SRGB) { - /* 9 segments - * segments are from 2^-9 to 0 - */ - const uint8_t SEG_COUNT =3D 9; - seg_distr[0] =3D 0; // Since we only have one point in darkest region - for (k =3D 1; k < SEG_COUNT; k++) - seg_distr[k] =3D k - 1; // 2^(k-1) points per region; halves as k decre= ases + /* 9 segments + * segments are from 2^-9 to 2^0 + */ + seg_distr[0] =3D 0; // Since we only have one point in darkest region + for (k =3D 1; k < NUM_DEGAMMA_REGIONS; k++) + seg_distr[k] =3D k - 1; // 2^(k-1) points per region; halves as k decrea= ses =20 - region_start =3D -SEG_COUNT; - region_end =3D 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 =3D 12; - - for (i =3D 0; i < SEG_COUNT; i++) - seg_distr[i] =3D 4; - - region_start =3D -SEG_COUNT; - region_end =3D 0; - } + region_start =3D -NUM_DEGAMMA_REGIONS; + region_end =3D 0; =20 for (i =3D region_end - region_start; i < MAX_REGIONS_NUMBER ; i++) seg_distr[i] =3D -1; --=20 2.53.0 From nobody Mon Sep 28 16:21:58 2026 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B5A4B3EFFC3 for ; Thu, 20 Aug 2026 09:33:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.97.179.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787218436; cv=none; b=JUH6hxgVPHH/G8869vYsb88It5pT7EUNBbB9KyOlNqhMPpx7pyc+dVX4KPpWR6kQmIikLtID8awP/6dDZ2VpgrFvbc1qI1sh4mbCWowX8OV80iuaEEwKnzqYwBfvz8GEcftOTH16UPbNxmw5VAh+czEjUfo/rAk2T5QxqkbzcR0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787218436; c=relaxed/simple; bh=TlPar+X1H3iRrf4I7dWL4+dyOO/JLCzTjBT3SQQq5U8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=R4bC7OsnHvF5iTlSXBs+Q26zOEFnPwf71IGpcZFhmntTg5TVGcaapW/Cp4qptPQUpimNxqbsLnfYp04MpvJgwvAvHB8rynct3higruZg7ocnnziE+vWfE9uh5dwAu6ov/JH9/ml9hfOhlNA7jo4lwLidSYZJoKx3Hi/Tt0sqEM0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com; spf=pass smtp.mailfrom=igalia.com; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b=kYuSUbCA; arc=none smtp.client-ip=213.97.179.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=igalia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=igalia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=igalia.com header.i=@igalia.com header.b="kYuSUbCA" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:Message-ID:Date:Subject: Cc:To:From:From:Reply-To; bh=QSbD4GEQf+gDqfFPGBRSU5gml0IKgZBPN5HzaiJSY4o=; b= kYuSUbCA/SY6JTB9aKH+GIKI7QornFJ+o/VnXg6Qeo3bJAORtTlJRtYaIl37htkPg2wDFQNzPVfrj DLHn0rs4d5FBEti9+y6WaQ1qT89gt2iMNm6aBMn8TRR2jUQgM7J9Gf3gOhhvVa4Xo+SUyAt3XC3Kc FOUJZdkQbcTdur9yM0UGly7NuMu3zMy/EeZ6BSbY0sxhRIZJxL5az2MUuQ19UhS8UrXCBZadzANsc DuZox1GJAOo9BBo2uCrCv7OUx3yduvYN63U/ypjk0slj9AadbGr6dKB3OYFHTSb3VVDHCkfyYs7tx G/BUYNgAUyg3Kpz/F7Jd0elZvN//35d8EA==; Received: from 154.red-79-147-121.dynamicip.rima-tde.net ([79.147.121.154] helo=killbill) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1wwz9L-006WKe-Df; Thu, 20 Aug 2026 11:33:27 +0200 From: Melissa Wen To: airlied@gmail.com, alexander.deucher@amd.com, christian.koenig@amd.com, harry.wentland@amd.com, mwen@igalia.com, simona@ffwll.ch, siqueira@igalia.com, sunpeng.li@amd.com Cc: Krunoslav Kovac , "'Dr . David Alan Gilbert'" , Bhawanpreet Lakha , Alex Hung , Aurabindo Pillai , Matthew Schwartz , pekka.paalanen@collabora.com, robert.mader@posteo.de, amd-gfx@lists.freedesktop.org, kernel-dev@igalia.com, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/2] drm/amd/display: use translate_curve_to_degamma_hw_format on DCN30 Date: Thu, 20 Aug 2026 11:26:38 +0200 Message-ID: <20260820093324.10201-3-mwen@igalia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260820093324.10201-1-mwen@igalia.com> References: <20260820093324.10201-1-mwen@igalia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 d= egamma curves") Signed-off-by: Melissa Wen Reviewed-by: Alex Hung --- .../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/driv= ers/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 =3D=3D TF_TYPE_HWPWL) blend_lut =3D &plane_state->cm.blend_func.pwl; else if (plane_state->cm.blend_func.type =3D=3D TF_TYPE_DISTRIBUTED_POINT= S) { - result =3D cm3_helper_translate_curve_to_hw_format(plane_state->ctx, + result =3D 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; =20 @@ -337,9 +336,8 @@ bool dcn30_set_input_transfer_func(struct dc *dc, if (plane_state->in_transfer_func.type =3D=3D TF_TYPE_HWPWL) params =3D &plane_state->in_transfer_func.pwl; else if (plane_state->in_transfer_func.type =3D=3D TF_TYPE_DISTRIBUTED_PO= INTS && - 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_transfe= r_func, + &dpp_base->degamma_params)) params =3D &dpp_base->degamma_params; =20 result =3D dpp_base->funcs->dpp_program_gamcor_lut(dpp_base, params); --=20 2.53.0