Received: by 2002:a05:7412:1703:b0:e2:908c:2ebd with SMTP id dm3csp1008708rdb; Fri, 25 Aug 2023 07:52:09 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEl5xIfuJB5nNtx/ZWq+uQ06CVZ64QnSKiSSsCLudB0A9lqljAdWfxzppDrSPXDN8pRbYkr X-Received: by 2002:aa7:db4a:0:b0:51a:3159:53c7 with SMTP id n10-20020aa7db4a000000b0051a315953c7mr14809283edt.30.1692975129174; Fri, 25 Aug 2023 07:52:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692975129; cv=none; d=google.com; s=arc-20160816; b=TDnv77SaH8JhEquzHlnxovRBX6gZl8egPoWzApkUAmxI/6e5hamzXsnX8xzkrl8xQM 6w5Vd+u0V1NsENq1JKCuSRPBmpTIQwMQPFMpA04ymWjanHU5g3NYuFgZbtm8+pBpQRDn udfEcl+USX2+3ofbwzlt8aoQ8R/M96L/tyukFn0fRyJchcgJp2RGEijgTtUyintXkJMa loev6mxIOfvrW8obF1Eq2uQ6Fa2m0tgD3iEeM4pZfelTDjs/uNUWu1qblRpSNpTlFL7U 3iMeHlCrq+aeRroqKG9/H9xucX8Q/t4NX64+vcz9u4hzXaWL2tFH7ng6gJWKl1ckqQh2 2GLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=TGt/GTv13MQd5EJYb83vy8cL8hzAXGUAw7TT+taelVc=; fh=TJVAoVWTZQRear/8sNap+RT5WOUNheG0qi9PfJ7oOe8=; b=k8jr6bIw5os2EK5WfQ1XA660fY1cGcDe8NXP+lqUSQQfCEyr4O6JQy5BDPEOEezV5j T/JBO0xkgeBIhZyBtEjTuT1jho8tlbOw8nvNcp5mYjIPUjx6qfRk3Ns423mkmt2JvJvY al+3VCYcEqQjyLN5A9mw7nWAWEpKYyfVvdBxje3yBYM5ym+GRONg/5c6k6flOP9Vq1uB jgBL+Sm8QqrLEgeuhj3PQpnKNeG9k6csVcv+tnXzkh1Hc++vowkk4Y+k9aMUzccfAwP/ I0WinY9ZL4ZHX7mPLvj5cGSWMvRYiBffA2dDYdOfGQwP23x+5zPhF0hvHWM5W71cTKh5 r3Hw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=WDXQXr62; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bf16-20020a0564021a5000b00523d272574esi947345edb.602.2023.08.25.07.51.12; Fri, 25 Aug 2023 07:52:09 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=WDXQXr62; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343638AbjHYOaa (ORCPT + 99 others); Fri, 25 Aug 2023 10:30:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37748 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343801AbjHYOaR (ORCPT ); Fri, 25 Aug 2023 10:30:17 -0400 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 339B9199A for ; Fri, 25 Aug 2023 07:30:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=In-Reply-To:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:Sender:Reply-To:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=TGt/GTv13MQd5EJYb83vy8cL8hzAXGUAw7TT+taelVc=; b=WDXQXr626TM8d9yeLpgm61Ci6b Od5O/Vlnv7GaotaPMWOzAD84SLVv7QTfHzJdFCyAiwgLApcSZ44UWMlZ1hvMiK5j/vMt7IA2aOwNr Dbfl3V4QH6lCv5QHKzVmRzgpqXNRevCzOeuLaSPv7IdsX/zv5dhSPfiEcnI06yEho8niRdd4SY4ZC yJCLefuRoMqDZXwLyqT2dfMXx7yA8Jw8Zcx/0C+Qsj+5Zx8v8JVljvZW3iPeYuzDXVjnK2Yi4PiSM Jr7g+9/tDTbnsVVH4I/ZbyXQMcUOiBqMFxLvBN41OdwIyhiR8vjFnC75qpELWlXzs7gX6bAtHlKyH 1WkXXbFA==; Received: from [38.44.68.151] (helo=mail.igalia.com) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1qZXp0-00FJHc-Vi; Fri, 25 Aug 2023 16:29:59 +0200 Date: Fri, 25 Aug 2023 13:29:44 -0100 From: Melissa Wen To: Pekka Paalanen Cc: amd-gfx@lists.freedesktop.org, Harry Wentland , Rodrigo Siqueira , sunpeng.li@amd.com, Alex Deucher , dri-devel@lists.freedesktop.org, christian.koenig@amd.com, Xinhui.Pan@amd.com, airlied@gmail.com, daniel@ffwll.ch, Joshua Ashton , Sebastian Wick , Xaver Hugl , Shashank Sharma , Nicholas Kazlauskas , sungjoon.kim@amd.com, Alex Hung , Simon Ser , kernel-dev@igalia.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 19/34] drm/amd/display: decouple steps for mapping CRTC degamma to DC plane Message-ID: <20230825142944.3jkibtz54f4utwuq@mail.igalia.com> References: <20230810160314.48225-1-mwen@igalia.com> <20230810160314.48225-20-mwen@igalia.com> <20230822151110.3107b745.pekka.paalanen@collabora.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="crdzpq3rjuvmqkwv" Content-Disposition: inline In-Reply-To: <20230822151110.3107b745.pekka.paalanen@collabora.com> X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --crdzpq3rjuvmqkwv Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On 08/22, Pekka Paalanen wrote: > On Thu, 10 Aug 2023 15:02:59 -0100 > Melissa Wen wrote: >=20 > > The next patch adds pre-blending degamma to AMD color mgmt pipeline, but > > pre-blending degamma caps (DPP) is currently in use to provide DRM CRTC > > atomic degamma or implict degamma on legacy gamma. Detach degamma usage > > regarging CRTC color properties to manage plane and CRTC color > > correction combinations. > >=20 > > Reviewed-by: Harry Wentland > > Signed-off-by: Melissa Wen > > --- > > .../amd/display/amdgpu_dm/amdgpu_dm_color.c | 59 +++++++++++++------ > > 1 file changed, 41 insertions(+), 18 deletions(-) > >=20 > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c b/= drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c > > index 68e9f2c62f2e..74eb02655d96 100644 > > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c > > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c > > @@ -764,20 +764,9 @@ int amdgpu_dm_update_crtc_color_mgmt(struct dm_crt= c_state *crtc) > > return 0; > > } > > =20 > > -/** > > - * amdgpu_dm_update_plane_color_mgmt: Maps DRM color management to DC = plane. > > - * @crtc: amdgpu_dm crtc state > > - * @dc_plane_state: target DC surface > > - * > > - * Update the underlying dc_stream_state's input transfer function (IT= F) in > > - * preparation for hardware commit. The transfer function used depends= on > > - * the preparation done on the stream for color management. > > - * > > - * Returns: > > - * 0 on success. -ENOMEM if mem allocation fails. > > - */ > > -int amdgpu_dm_update_plane_color_mgmt(struct dm_crtc_state *crtc, > > - struct dc_plane_state *dc_plane_state) > > +static int > > +map_crtc_degamma_to_dc_plane(struct dm_crtc_state *crtc, > > + struct dc_plane_state *dc_plane_state) > > { > > const struct drm_color_lut *degamma_lut; > > enum dc_transfer_func_predefined tf =3D TRANSFER_FUNCTION_SRGB; > > @@ -800,8 +789,7 @@ int amdgpu_dm_update_plane_color_mgmt(struct dm_crt= c_state *crtc, > > °amma_size); > > ASSERT(degamma_size =3D=3D MAX_COLOR_LUT_ENTRIES); > > =20 > > - dc_plane_state->in_transfer_func->type =3D > > - TF_TYPE_DISTRIBUTED_POINTS; > > + dc_plane_state->in_transfer_func->type =3D TF_TYPE_DISTRIBUTED_POINT= S; > > =20 > > /* > > * This case isn't fully correct, but also fairly > > @@ -837,7 +825,7 @@ int amdgpu_dm_update_plane_color_mgmt(struct dm_crt= c_state *crtc, > > degamma_lut, degamma_size); > > if (r) > > return r; > > - } else if (crtc->cm_is_degamma_srgb) { > > + } else { > > /* > > * For legacy gamma support we need the regamma input > > * in linear space. Assume that the input is sRGB. > > @@ -847,8 +835,43 @@ int amdgpu_dm_update_plane_color_mgmt(struct dm_cr= tc_state *crtc, > > =20 > > if (tf !=3D TRANSFER_FUNCTION_SRGB && > > !mod_color_calculate_degamma_params(NULL, > > - dc_plane_state->in_transfer_func, NULL, false)) > > + dc_plane_state->in_transfer_func, > > + NULL, false)) > > return -ENOMEM; > > + } > > + > > + return 0; > > +} > > + > > +/** > > + * amdgpu_dm_update_plane_color_mgmt: Maps DRM color management to DC = plane. > > + * @crtc: amdgpu_dm crtc state > > + * @dc_plane_state: target DC surface > > + * > > + * Update the underlying dc_stream_state's input transfer function (IT= F) in > > + * preparation for hardware commit. The transfer function used depends= on > > + * the preparation done on the stream for color management. > > + * > > + * Returns: > > + * 0 on success. -ENOMEM if mem allocation fails. > > + */ > > +int amdgpu_dm_update_plane_color_mgmt(struct dm_crtc_state *crtc, > > + struct dc_plane_state *dc_plane_state) > > +{ > > + bool has_crtc_cm_degamma; > > + int ret; > > + > > + has_crtc_cm_degamma =3D (crtc->cm_has_degamma || crtc->cm_is_degamma_= srgb); > > + if (has_crtc_cm_degamma){ > > + /* AMD HW doesn't have post-blending degamma caps. When DRM > > + * CRTC atomic degamma is set, we maps it to DPP degamma block > > + * (pre-blending) or, on legacy gamma, we use DPP degamma to > > + * linearize (implicit degamma) from sRGB/BT709 according to > > + * the input space. >=20 > Uhh, you can't just move degamma before blending if KMS userspace > wants it after blending. That would be incorrect behaviour. If you > can't implement it correctly, reject it. >=20 > I hope that magical unexpected linearization is not done with atomic, > either. >=20 > Or maybe this is all a lost cause, and only the new color-op pipeline > UAPI will actually work across drivers. I agree that crtc degamma is an optional property and should be not exposed if not available. I did something in this line for DCE that has no degamma block[1]. Then, AMD DDX driver stopped to advertise atomic API for DCE, that was not correct too[2]. But I see it as a lost cause that will only be fixed in a new generic color API. I don't think we should change it using the current DRM CRTC API with driver-specific props. [1] https://lore.kernel.org/amd-gfx/20221103184500.14450-1-mwen@igalia.com/ [2] https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/-/issues/67 >=20 >=20 > Thanks, > pq >=20 > > + */ > > + ret =3D map_crtc_degamma_to_dc_plane(crtc, dc_plane_state); > > + if (ret) > > + return ret; > > } else { > > /* ...Otherwise we can just bypass the DGM block. */ > > dc_plane_state->in_transfer_func->type =3D TF_TYPE_BYPASS; >=20 --crdzpq3rjuvmqkwv Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEd8WOo/JViG+Tu+XIwqF3j0dLehwFAmToutIACgkQwqF3j0dL ehy5NA/9EdmnRFoWaC9teJxgxc6p+TJFocyVYDHQjj2O2+O0DYv9o58NWsjhqbzz ng67Zn4MWJqEYSe4iKXnoMknROT+FNV+hVjkTn8WJyjOsjP97aqKApouAHnIWQfZ n66xc6KCT4O/B3TjNRFfZltRdPikSM/ynpEbOGdAn0u/WqtZWcAmXeRwXIrdvO+N Z2SjIZL4ksowDrBHgYx63cxkknRkfhp00npkohPwqiPrb38hYSmj+SuP2nXo2gXS Xe23abhCD1L0xWB4WGlPZLE14VDU8M7Z4ILAF7J6SyA4syaPl9qtlM1USS7aq1TA eOkgGBxCOzvW0T0DfXseD+pg3b4l+Z5tWSC9aRXcW+GnJ/lbxmdTfyld4IW6FWND i+AcD2RNJZlI0Nc8JpmfijNvaq/wlRvFDBp9er7WUtKdjMA2yRLWHMgCjlsUXsgc TGfDM6KtTDMkh0ZQcAbU0a4VwDuGW4kiekrz5cHIR6yZsopvcyZUkY4pRPnzKJY2 lv+uYALHOvr79n31ppW74xfMRVOU4GaNKnPCmW1aDcxJQzUqiv2KBZvVzJqfgKq9 AYXGZELjnp5uG/jwh4vkeEXgpd7x1AyIMDdOtWrDSMu3m0pKfMB1Yo0ZcY5Zm3F9 Ch/dQo33pIbRbcULhfeq7o1NSfhmvVyhlyQCa/clr0iVU3JgtAY= =lrJv -----END PGP SIGNATURE----- --crdzpq3rjuvmqkwv--