On Mon, Apr 26, 2021 at 01:38:49PM -0400, Harry Wentland wrote: > > ## Introduction > > We are looking to enable HDR support for a couple of single-plane and > multi-plane scenarios. To do this effectively we recommend new > interfaces to drm_plane. Below I'll give a bit of background on HDR and > why we propose these interfaces.
I think this is on of the topics that would tremendously benefit from the uapi rfc process, with lots of compositor people involved. https://dri.freedesktop.org/docs/drm/gpu/rfc/ Also for this I think we really do need a pretty solid understanding of the involve compositor protocols, otherwise the kernel uapi is going to be for naught. -Daniel > > > ## Defining a pixel's luminance > > Currently the luminance space of pixels in a framebuffer/plane presented to > the display is not well defined. It's usually assumed to be in a 2.2 or 2.4 > gamma space and has no mapping to an absolute luminance value but is > interpreted in relative terms. > > Luminance can be measured and described in absolute terms as candela per > meter squared, or cd/m2, or nits. Even though a pixel value can be mapped to > luminance in a linear fashion to do so without losing a lot of detail > requires 16-bpc color depth. The reason for this is that human perception can > distinguish roughly between a 0.5-1% luminance delta. A linear representation > is suboptimal, wasting precision in the highlights and losing precision in > the shadows. > > A gamma curve is a decent approximation to a human's perception of luminance, > but the PQ (perceptual quantizer) function [1] improves on it. It also > defines the luminance values in absolute terms, with the highest value being > 10,000 nits and the lowest 0.0005 nits. > > Using a content that's defined in PQ space we can approximate the real world > in a much better way. > > Here are some examples of real-life objects and their approximate luminance > values: > > | Object | Luminance in nits | > | ----------------- | ----------------- | > | Sun | 1.6 million | > | Fluorescent light | 10,000 | > | Highlights | 1,000 - sunlight | > | White Objects | 250 - 1,000 | > | Typical objects | 1 - 250 | > | Shadows | 0.01 - 1 | > | Ultra Blacks | 0 - 0.0005 | > > > ## Describing the luminance space > > **We propose a new drm_plane property to describe the Eletro-Optical Transfer > Function (EOTF) with which its framebuffer was composed.** Examples of EOTF > are: > > | EOTF | Description > | > | --------- > |:------------------------------------------------------------------------- | > | Gamma 2.2 | a simple 2.2 gamma > | > | sRGB | 2.4 gamma with small initial linear section > | > | PQ 2084 | SMPTE ST 2084; used for HDR video and allows for up to 10,000 > nit support | > | Linear | Linear relationship between pixel value and luminance value > | > > > ## Mastering Luminances > > Now we are able to use the PQ 2084 EOTF to define the luminance of pixels in > absolute terms. Unfortunately we're again presented with physical limitations > of the display technologies on the market today. Here are a few examples of > luminance ranges of displays. > > | Display | Luminance range in nits | > | ------------------------ | ----------------------- | > | Typical PC display | 0.3 - 200 | > | Excellent LCD HDTV | 0.3 - 400 | > | HDR LCD w/ local dimming | 0.05 - 1,500 | > > Since no display can currently show the full 0.0005 to 10,000 nits luminance > range the display will need to tonemap the HDR content, i.e to fit the > content within a display's capabilities. To assist with tonemapping HDR > content is usually accompanied with a metadata that describes (among other > things) the minimum and maximum mastering luminance, i.e. the maximum and > minimum luminance of the display that was used to master the HDR content. > > The HDR metadata is currently defined on the drm_connector via the > hdr_output_metadata blob property. > > It might be useful to define per-plane hdr metadata, as different planes > might have been mastered differently. > > > ## SDR Luminance > > Since SDR covers a smaller luminance range than HDR, an SDR plane might look > dark when blended with HDR content. Since the max HDR luminance can be quite > variable (200-1,500 nits on actual displays) it is best to make the SDR > maximum luminance value configurable. > > **We propose a drm_plane property to specfy the desired maximum luminance of > the SDR plane in nits.** This allows us to map the SDR content predictably > into HDR's absolute luminance space. > > > ## Let There Be Color > > So far we've only talked about luminance, ignoring colors altogether. Just > like in the luminance space, traditionally the color space of display outputs > has not been well defined. Similar to how an EOTF defines a mapping of pixel > data to an absolute luminance value, the color space maps color information > for each pixel onto the CIE 1931 chromaticity space. This can be thought of > as a mapping to an absolute, real-life, color value. > > A color space is defined by its primaries and white point. The primaries and > white point are expressed as coordinates in the CIE 1931 color space. Think > of the red primary as the reddest red that can be displayed within the color > space. Same for green and blue. > > Examples of color spaces are: > > | Color Space | Description | > | ----------- | ------------------------------------------ | > | BT 601 | similar to BT 709 | > | BT 709 | used by sRGB content; ~53% of BT 2020 | > | DCI-P3 | used by most HDR displays; ~72% of BT 2020 | > | BT 2020 | standard for most HDR content | > > The color space is defined in DRM for YCbCr planes via the color_encoding > property of the drm_plane. > > **We propose to add definitions for the RGB variants of the BT color spaces.** > > > ## Color Primaries and White Point > > Just like displays can currently not represent the entire 0.0005 - 10,000 > nits HDR range of the PQ 2084 EOTF, they are currently not capable of > representing the entire BT.2020 color Gamut. For this reason video content > will often specify the color primaries and white point used to master the > video, in order to allow displays to be able to map the image as best as > possible onto the display's gamut. > > > ## Displays and Tonemapping > > External displays are able to do their own tone and color mapping, based on > the mastering luminance, color primaries, and white space defined in the HDR > metadata. > > Internal panels (which are currently few and far between) usually don't > include the complex HW to do tone and color mapping on their own and will > require the display driver to perform appropriate mapping. > > > ## Pixel Formats > > The pixel formats, such as ARGB8888, ARGB2101010, P010, or FP16 are unrelated > to color space and EOTF definitions. HDR pixels can be formatted in different > ways but in order to not lose precision HDR content requires at least 10 bpc > precision. For this reason ARGB2101010, P010, and FP16 are the obvious > candidates for HDR. ARGB2101010 and P010 have the advantage of requiring only > half the bandwidth as FP16, while FP16 has the advantage of enough precision > to operate in a linear space, i.e. without EOTF. > > > ## Proposed use-cases > > Although the userspace side of this work is still in the early stages it is > clear that we will want to support the following two use-cases: > > **One XRGB2101010 HDR Plane:** A single, composited plane of HDR content. The > use-case is a video player on a desktop with the compositor owning the > composition of SDR and HDR content. The content shall be PQ BT.2020 > formatted. The drm_connector's hdr_output_metadata shall be set. > > **One ARGB8888 SDR Plane + One P010 HDR Plane:** A normal 8bpc desktop plane, > with a P010 HDR video plane underlayed. The HDR plane shall be PQ BT.2020 > formatted. The desktop plane shall specify an SDR boost value. The > drm_connector's hdr_output_metadata shall be set. > > **One XRGB8888 SDR Plane - HDR output:** In order to support a smooth > transition we recommend an OS that supports HDR output to provide the > hdr_output_metadata on the drm_connector to configure the output for HDR, > even when the content is only SDR. This will allow for a smooth transition > between SDR-only and HDR content. In this use-case the SDR max luminance > value should be provided on the drm_plane. > > In DCN we will de-PQ or de-Gamma all input in order to blend in linear space. > For SDR content we will also apply any desired boost before blending. After > blending we will then re-apply the PQ EOTF and do RGB to YCbCr conversion if > needed. > > > ## Summary of proposed interface changes > > per drm_plane: > - new RGB color space definitions, mirroring the existing YUV color space > definitions > - new transfer function property > - new SDR maximum white level property > > > ## References > > [1] > https://en.wikipedia.org/wiki/High-dynamic-range_video#Perceptual_Quantizer > > > ## Further Reading > > https://gitlab.freedesktop.org/swick/wayland-protocols/-/blob/color/unstable/color-management/color.rst > http://downloads.bbc.co.uk/rd/pubs/whp/whp-pdf-files/WHP309.pdf > https://app.spectracal.com/Documents/White%20Papers/HDR_Demystified.pdf > > > Bhawanpreet Lakha (3): > drm/color: Add RGB Color encodings > drm/color: Add Color transfer functions for HDR/SDR > drm/color: Add sdr boost property > > .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 +- > .../gpu/drm/arm/display/komeda/komeda_plane.c | 4 +- > drivers/gpu/drm/arm/malidp_planes.c | 4 +- > drivers/gpu/drm/armada/armada_overlay.c | 4 +- > drivers/gpu/drm/drm_atomic_uapi.c | 8 ++ > drivers/gpu/drm/drm_color_mgmt.c | 84 +++++++++++++++++-- > drivers/gpu/drm/i915/display/intel_sprite.c | 4 +- > .../drm/i915/display/skl_universal_plane.c | 4 +- > drivers/gpu/drm/nouveau/dispnv04/overlay.c | 4 +- > drivers/gpu/drm/omapdrm/omap_plane.c | 4 +- > drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 4 +- > drivers/gpu/drm/tidss/tidss_plane.c | 6 +- > include/drm/drm_color_mgmt.h | 25 +++++- > include/drm/drm_plane.h | 30 +++++++ > 14 files changed, 173 insertions(+), 16 deletions(-) > > -- > 2.31.0 > > _______________________________________________ > dri-devel mailing list > dri-de...@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx