amd-gfx.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
From: Harry Wentland <harry.wentland@amd.com>
To: Melissa Wen <mwen@igalia.com>,
	amd-gfx@lists.freedesktop.org,
	Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>,
	sunpeng.li@amd.com, Alex Deucher <alexander.deucher@amd.com>,
	dri-devel@lists.freedesktop.org, christian.koenig@amd.com,
	Xinhui.Pan@amd.com, airlied@gmail.com, daniel@ffwll.ch
Cc: Sebastian Wick <sebastian.wick@redhat.com>,
	Pekka Paalanen <pekka.paalanen@collabora.com>,
	Shashank Sharma <Shashank.Sharma@amd.com>,
	Alex Hung <alex.hung@amd.com>, Simon Ser <contact@emersion.fr>,
	Xaver Hugl <xaver.hugl@gmail.com>,
	kernel-dev@igalia.com,
	Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>,
	Joshua Ashton <joshua@froggi.es>,
	sungjoon.kim@amd.com
Subject: Re: [PATCH v3 07/32] drm/amd/display: document AMDGPU pre-defined transfer functions
Date: Thu, 28 Sep 2023 16:16:57 -0400	[thread overview]
Message-ID: <c1f850e7-7442-4cb9-a83f-289d467dc749@amd.com> (raw)
In-Reply-To: <20230925194932.1329483-8-mwen@igalia.com>



On 2023-09-25 15:49, Melissa Wen wrote:
> Brief documentation about pre-defined transfer function usage on AMD
> display driver and standardized EOTFs and inverse EOTFs.
> 
> v3:
> - Document BT709 OETF (Pekka)
> - Fix description of sRGB and pure power funcs (Pekka)
> 
> Co-developed-by: Harry Wentland <harry.wentland@amd.com>
> Signed-off-by: Harry Wentland <harry.wentland@amd.com>
> Signed-off-by: Melissa Wen <mwen@igalia.com>
> ---
>  .../amd/display/amdgpu_dm/amdgpu_dm_color.c   | 39 +++++++++++++++++++
>  1 file changed, 39 insertions(+)
> 
> 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 d03bdb010e8b..14f9c02539c6 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
> @@ -85,6 +85,45 @@ void amdgpu_dm_init_color_mod(void)
>  }
>  
>  #ifdef AMD_PRIVATE_COLOR
> +/* Pre-defined Transfer Functions (TF)
> + *
> + * AMD driver supports pre-defined mathematical functions for transferring
> + * between encoded values and optical/linear space. Depending on HW color caps,
> + * ROMs and curves built by the AMD color module support these transforms.
> + *
> + * The driver-specific color implementation exposes properties for pre-blending
> + * degamma TF, shaper TF (before 3D LUT), and blend(dpp.ogam) TF and
> + * post-blending regamma (mpc.ogam) TF. However, only pre-blending degamma
> + * supports ROM curves. AMD color module uses pre-defined coefficients to build
> + * curves for the other blocks. What can be done by each color block is
> + * described by struct dpp_color_capsand struct mpc_color_caps.
> + *
> + * AMD driver-specific color API exposes the following pre-defined transfer
> + * functions:
> + *
> + * - Linear/Unity: linear/identity relationship between pixel value and
> + *   luminance value;
> + * - Gamma 2.2, Gamma 2.4, Gamma 2.6: pure power functions;
> + * - sRGB: 2.4: The piece-wise transfer function from IEC 61966-2-1:1999;
> + * - BT.709: has a linear segment in the bottom part and then a power function
> + *   with a 0.45 (~1/2.22) gamma for the rest of the range; standardized by
> + *   ITU-R BT.709-6;
> + * - PQ (Perceptual Quantizer): used for HDR display, allows luminance range
> + *   capability of 0 to 10,000 nits; standardized by SMPTE ST 2084.
> + *

I think it's important to highlight that the AMD color model is
designed with an assumption that SDR (sRGB, BT.709, G2.2, etc.)
peak white maps (normalized to 1.0 FP) to 80 nits in the PQ system.
This has the implication that PQ EOTF (NL-to-L) maps to [0.0..125.0].
125.0 = 10,000 nits / 80 nits

I think we'll want table or some other way describing this:

(Using L to mean linear and NL to mean non-linear.)

== sRGB, BT709, Gamma 2.x ==
NL form is either UNORM or [0.0, 1.0]
L form is [0.0, 1.0]

Note that HDR multiplier can wide range beyond [0.0, 1.0].
In practice this means that PQ TF is needed for any subsequent
L-to-NL transforms.

== PQ ==
NL form is either UNORM or FP16 CCCS (Windows canonical composition color space, see [1])
L form is [0.0, 125.0]

== Unity, Default ==
NL form is either UNORM or FP16 CCCS
L form is either [0.0, 1.0] (mapping from UNORM) or CCCS (mapping from CCCS FP16)

Harry

> + * In the driver-specific API, color block names attached to TF properties
> + * suggest the intention regarding non-linear encoding pixel's luminance
> + * values. As some newer encodings don't use gamma curve, we make encoding and
> + * decoding explicit by defining an enum list of transfer functions supported
> + * in terms of EOTF and inverse EOTF, where:
> + *
> + * - EOTF (electro-optical transfer function): is the transfer function to go
> + *   from the encoded value to an optical (linear) value. De-gamma functions
> + *   traditionally do this.
> + * - Inverse EOTF (simply the inverse of the EOTF): is usually intended to go
> + *   from an optical/linear space (which might have been used for blending)
> + *   back to the encoded values. Gamma functions traditionally do this.
> + */
>  static const char * const
>  amdgpu_transfer_function_names[] = {
>  	[AMDGPU_TRANSFER_FUNCTION_DEFAULT]		= "Default",



  reply	other threads:[~2023-09-28 20:17 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-25 19:49 [PATCH v3 00/32] drm/amd/display: add AMD driver-specific properties for color mgmt Melissa Wen
2023-09-25 19:49 ` [PATCH v3 01/32] drm/drm_mode_object: increase max objects to accommodate new color props Melissa Wen
2023-09-25 19:49 ` [PATCH v3 02/32] drm/drm_property: make replace_property_blob_from_id a DRM helper Melissa Wen
2023-09-25 19:49 ` [PATCH v3 03/32] drm/drm_plane: track color mgmt changes per plane Melissa Wen
2023-09-25 19:49 ` [PATCH v3 04/32] drm/amd/display: add driver-specific property for plane degamma LUT Melissa Wen
2023-09-25 19:49 ` [PATCH v3 05/32] drm/amd/display: add plane degamma TF driver-specific property Melissa Wen
2023-09-25 19:49 ` [PATCH v3 06/32] drm/amd/display: explicitly define EOTF and inverse EOTF Melissa Wen
2023-09-25 19:49 ` [PATCH v3 07/32] drm/amd/display: document AMDGPU pre-defined transfer functions Melissa Wen
2023-09-28 20:16   ` Harry Wentland [this message]
2023-09-29  7:35     ` Pekka Paalanen
2023-09-29 13:08       ` Harry Wentland
2023-09-25 19:49 ` [PATCH v3 08/32] drm/amd/display: add plane HDR multiplier driver-specific property Melissa Wen
2023-09-25 19:49 ` [PATCH v3 09/32] drm/amd/display: add plane 3D LUT driver-specific properties Melissa Wen
2023-09-27 18:47   ` Harry Wentland
2023-10-03 16:17     ` Melissa Wen
2023-09-25 19:49 ` [PATCH v3 10/32] drm/amd/display: add plane shaper LUT and TF " Melissa Wen
2023-09-25 19:49 ` [PATCH v3 11/32] drm/amd/display: add plane blend " Melissa Wen
2023-09-25 19:49 ` [PATCH v3 12/32] drm/amd/display: add CRTC gamma TF driver-specific property Melissa Wen
2023-09-25 19:49 ` [PATCH v3 13/32] drm/amd/display: add comments to describe DM crtc color mgmt behavior Melissa Wen
2023-09-25 19:49 ` [PATCH v3 14/32] drm/amd/display: encapsulate atomic regamma operation Melissa Wen
2023-09-25 19:49 ` [PATCH v3 15/32] drm/amd/display: add CRTC gamma TF support Melissa Wen
2023-09-25 19:49 ` [PATCH v3 16/32] drm/amd/display: set sdr_ref_white_level to 80 for out_transfer_func Melissa Wen
2023-09-25 19:49 ` [PATCH v3 17/32] drm/amd/display: mark plane as needing reset if color props change Melissa Wen
2023-09-25 19:49 ` [PATCH v3 18/32] drm/amd/display: decouple steps for mapping CRTC degamma to DC plane Melissa Wen
2023-09-25 19:49 ` [PATCH v3 19/32] drm/amd/display: add plane degamma TF and LUT support Melissa Wen
2023-09-25 19:49 ` [PATCH v3 20/32] drm/amd/display: reject atomic commit if setting both plane and CRTC degamma Melissa Wen
2023-09-25 19:49 ` [PATCH v3 21/32] drm/amd/display: add dc_fixpt_from_s3132 helper Melissa Wen
2023-09-25 19:49 ` [PATCH v3 22/32] drm/amd/display: add HDR multiplier support Melissa Wen
2023-09-25 19:49 ` [PATCH v3 23/32] drm/amd/display: add plane shaper LUT support Melissa Wen
2023-09-27 18:47   ` Harry Wentland
2023-09-25 19:49 ` [PATCH v3 24/32] drm/amd/display: add plane shaper TF support Melissa Wen
2023-09-25 19:49 ` [PATCH v3 25/32] drm/amd/display: add plane 3D LUT support Melissa Wen
2023-09-25 19:49 ` [PATCH v3 26/32] drm/amd/display: handle empty LUTs in __set_input_tf Melissa Wen
2023-09-25 19:49 ` [PATCH v3 27/32] drm/amd/display: add plane blend LUT and TF support Melissa Wen
2023-09-25 19:49 ` [PATCH v3 28/32] drm/amd/display: allow newer DC hardware to use degamma ROM for PQ/HLG Melissa Wen
2023-09-27 18:49   ` Harry Wentland
2023-09-25 19:49 ` [PATCH v3 29/32] drm/amd/display: copy 3D LUT settings from crtc state to stream_update Melissa Wen
2023-09-25 19:49 ` [PATCH v3 30/32] drm/amd/display: add plane CTM driver-specific property Melissa Wen
2023-09-25 19:49 ` [PATCH v3 31/32] drm/amd/display: add plane CTM support Melissa Wen
2023-09-27 18:52   ` Harry Wentland
2023-09-25 19:49 ` [PATCH v3 32/32] drm/amd/display: Add 3x4 CTM support for plane CTM Melissa Wen
2023-09-27 18:53   ` Harry Wentland

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c1f850e7-7442-4cb9-a83f-289d467dc749@amd.com \
    --to=harry.wentland@amd.com \
    --cc=Rodrigo.Siqueira@amd.com \
    --cc=Shashank.Sharma@amd.com \
    --cc=Xinhui.Pan@amd.com \
    --cc=airlied@gmail.com \
    --cc=alex.hung@amd.com \
    --cc=alexander.deucher@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=christian.koenig@amd.com \
    --cc=contact@emersion.fr \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=joshua@froggi.es \
    --cc=kernel-dev@igalia.com \
    --cc=mwen@igalia.com \
    --cc=nicholas.kazlauskas@amd.com \
    --cc=pekka.paalanen@collabora.com \
    --cc=sebastian.wick@redhat.com \
    --cc=sungjoon.kim@amd.com \
    --cc=sunpeng.li@amd.com \
    --cc=xaver.hugl@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).