[PATCH v5 00/32] drm/amd/display: add AMD driver-specific properties for color mgmt
Hello, This series extends the current KMS color management API with AMD driver-specific properties to enhance the color management support on AMD Steam Deck. The key additions to the color pipeline include: - plane degamma LUT and pre-defined TF; - plane HDR multiplier; - plane CTM 3x4; - plane shaper LUT and pre-defined TF; - plane 3D LUT; - plane blend LUT and pre-defined TF; - CRTC gamma pre-defined TF; You can find the AMD HW color capabilities documented here: https://dri.freedesktop.org/docs/drm/gpu/amdgpu/display/display-manager.html#color-management-properties The userspace case is Gamescope[1], the compositor for SteamOS. Gamescope has already adopted AMD driver-specific properties to implement comprehensive color management support, including gamut mapping, HDR rendering, SDR on HDR, HDR on SDR. Using these features in the SteamOS 3.5[2] users can expect a significantly enhanced visual experience. You can find a brief overview of the Steam Deck color pipeline here: https://github.com/ValveSoftware/gamescope/blob/master/src/docs/Steam%20Deck%20Display%20Pipeline.png This version (v5) includes the fixes for documentation (Sebastian), suspend/resume and color management setup (Joshua) suggested in the previous version. It also includes Harry's reviewed-by. Thank you everyone for reviews and feedback. Changes since: [RFC] https://lore.kernel.org/dri-devel/20230423141051.702990-1-m...@igalia.com - Remove KConfig and guard properties with `AMD_PRIVATE_COLOR`; - Remove properties for post-blending/CRTC shaper TF+LUT and 3D LUT; - Use color caps to improve the support of pre-defined curve; [v1] https://lore.kernel.org/dri-devel/20230523221520.3115570-1-m...@igalia.com - Replace DRM_ by AMDGPU_ prefix for transfer function (TF) enum; - Explicitly define EOTFs and inverse EOTFs and set props accordingly; - Document pre-defined transfer functions; - Remove HLG transfer function from supported TFs; - Remove misleading comments; - Remove post-blending shaper TF+LUT and 3D LUT support; - Move driver-specific property operations from amdgpu_display.c to amdgpu_dm_color.c; - Reset planes if any color props change; - Add plane CTM 3x4 support; - Removed two DC fixes already applied upstream; [v2] https://lore.kernel.org/dri-devel/20230810160314.48225-1-m...@igalia.com - Many documentation fixes: BT.709 OETF, description of sRGB and pure power functions, TF+1D LUT behavior; - Rename CTM2 to CTM 3x4 and fix misleading comment about DC gamut remap; - Squash `Linear` and `Unity` TF in `Identity`; - Remove the `MPC gamut remap` patch already applied upstream[3]; - Remove outdated delta segmentation fix; - Nits/small fixes; [v3] https://lore.kernel.org/amd-gfx/20230925194932.1329483-1-m...@igalia.com - Add table to describe value range in linear and non-linear forms; - Comment the PQ TF need after HDR multiplier; - Advertise the 3D LUT size as the size of a single-dimension (read-only); - remove function to check expected size from 3DLUT caps; - cleanup comments. [v4] https://lore.kernel.org/amd-gfx/20231005171527.203657-1-m...@igalia.com - Fix documentation about 3D LUT size; - Correctly getting LUT blobs; - Always set plane color properties, regardless plane->color_mgmt_changed. It's worth noting that driver-specific properties are guarded by cflags `AMD_PRIVATE_COLOR`. Best Regards, Melissa Wen [1] https://github.com/ValveSoftware/gamescope [2] https://store.steampowered.com/news/app/1675200/view/3686804163591367815 [3] https://lore.kernel.org/dri-devel/20230721132431.692158-1-m...@igalia.com Joshua Ashton (14): drm/amd/display: add plane degamma TF driver-specific property drm/amd/display: add plane HDR multiplier driver-specific property drm/amd/display: add plane blend LUT and TF driver-specific properties drm/amd/display: add CRTC gamma TF support drm/amd/display: set sdr_ref_white_level to 80 for out_transfer_func drm/amd/display: mark plane as needing reset if color props change drm/amd/display: add plane degamma TF and LUT support drm/amd/display: add dc_fixpt_from_s3132 helper drm/amd/display: add HDR multiplier support drm/amd/display: handle empty LUTs in __set_input_tf drm/amd/display: add plane blend LUT and TF support drm/amd/display: allow newer DC hardware to use degamma ROM for PQ/HLG drm/amd/display: copy 3D LUT settings from crtc state to stream_update drm/amd/display: Add 3x4 CTM support for plane CTM Melissa Wen (18): drm/drm_mode_object: increase max objects to accommodate new color props drm/drm_property: make replace_property_blob_from_id a DRM helper drm/drm_plane: track color mgmt changes per plane drm/amd/display: add driver-specific property for plane degamma LUT drm/amd/display: explicitly define EOTF and inverse EOTF drm/amd/display: document AMDGPU pre-defined transfer functions drm/amd/display: add plane 3D LUT driver-specific properties drm/amd/display: add plane shaper LUT and TF driver-specific properties
Re: [PATCH v5 00/32] drm/amd/display: add AMD driver-specific properties for color mgmt
On 2023-11-16 14:57, Melissa Wen wrote: > Hello, > > This series extends the current KMS color management API with AMD > driver-specific properties to enhance the color management support on > AMD Steam Deck. The key additions to the color pipeline include: > snip > Melissa Wen (18): > drm/drm_mode_object: increase max objects to accommodate new color > props > drm/drm_property: make replace_property_blob_from_id a DRM helper > drm/drm_plane: track color mgmt changes per plane If all patches are merged through amd-staging-drm-next I worry that conflicts creep in if any code around replace_property_blob_from_id changes in DRM. My plan is to merge DRM patches through drm-misc-next, as well as include them in the amd-staging-drm-next merge. They should then fall out at the next amd-staging-drm-next pull and (hopefully) ensure that there is no conflict. If no objections I'll go ahead with that later this week. Harry > drm/amd/display: add driver-specific property for plane degamma LUT > drm/amd/display: explicitly define EOTF and inverse EOTF > drm/amd/display: document AMDGPU pre-defined transfer functions > drm/amd/display: add plane 3D LUT driver-specific properties > drm/amd/display: add plane shaper LUT and TF driver-specific > properties > drm/amd/display: add CRTC gamma TF driver-specific property > drm/amd/display: add comments to describe DM crtc color mgmt behavior > drm/amd/display: encapsulate atomic regamma operation > drm/amd/display: decouple steps for mapping CRTC degamma to DC plane > drm/amd/display: reject atomic commit if setting both plane and CRTC > degamma > drm/amd/display: add plane shaper LUT support > drm/amd/display: add plane shaper TF support > drm/amd/display: add plane 3D LUT support > drm/amd/display: add plane CTM driver-specific property > drm/amd/display: add plane CTM support > > drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 91 ++ > .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 34 +- > .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 108 +++ > .../amd/display/amdgpu_dm/amdgpu_dm_color.c | 818 -- > .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c| 72 ++ > .../amd/display/amdgpu_dm/amdgpu_dm_plane.c | 232 - > .../gpu/drm/amd/display/include/fixed31_32.h | 12 + > drivers/gpu/drm/arm/malidp_crtc.c | 2 +- > drivers/gpu/drm/drm_atomic.c | 1 + > drivers/gpu/drm/drm_atomic_state_helper.c | 1 + > drivers/gpu/drm/drm_atomic_uapi.c | 43 +- > drivers/gpu/drm/drm_property.c| 49 ++ > include/drm/drm_mode_object.h | 2 +- > include/drm/drm_plane.h | 7 + > include/drm/drm_property.h| 6 + > include/uapi/drm/drm_mode.h | 8 + > 16 files changed, 1377 insertions(+), 109 deletions(-) >
Re: [PATCH v5 00/32] drm/amd/display: add AMD driver-specific properties for color mgmt
On Tue, 28 Nov 2023 at 23:11, Harry Wentland wrote: > > On 2023-11-16 14:57, Melissa Wen wrote: > > Hello, > > > > This series extends the current KMS color management API with AMD > > driver-specific properties to enhance the color management support on > > AMD Steam Deck. The key additions to the color pipeline include: > > > > snip > > > Melissa Wen (18): > > drm/drm_mode_object: increase max objects to accommodate new color > > props > > drm/drm_property: make replace_property_blob_from_id a DRM helper > > drm/drm_plane: track color mgmt changes per plane > > If all patches are merged through amd-staging-drm-next I worry that > conflicts creep in if any code around replace_property_blob_from_id > changes in DRM. > > My plan is to merge DRM patches through drm-misc-next, as well > as include them in the amd-staging-drm-next merge. They should then > fall out at the next amd-staging-drm-next pull and (hopefully) > ensure that there is no conflict. > > If no objections I'll go ahead with that later this week. Double-merging tends to be the worst because git doesn't realize the commits match, which actually makes the conflicts worse when they happen (because the 3-way merge diff gets absolute confused by all the changed context and misplaces everything to the max). So please don't, _only_ every cherry-pick when a patch in -next is also needed in -fixes, and we didn't put it into the right tree. But even that is a bit tricky and should only be done by maintainers (using dim cherry-pick if it's drm-misc) because the conflicts tend to be bad and need to be sorted out with backmerges sooner than later. For this case merge everything through one tree with the right acks, pull to drm-next asap and then backmerge into the other tree. Here probably amdgpu-next with drm-misc maintainer acks for the 3 core patches. Or if amdgpu-next pull won't come for a while, put them into drm-misc-next and just wait a week until it's in drm-next, then forward amdgpu-next. Cheers, Sima > Harry > > > drm/amd/display: add driver-specific property for plane degamma LUT > > drm/amd/display: explicitly define EOTF and inverse EOTF > > drm/amd/display: document AMDGPU pre-defined transfer functions > > drm/amd/display: add plane 3D LUT driver-specific properties > > drm/amd/display: add plane shaper LUT and TF driver-specific > > properties > > drm/amd/display: add CRTC gamma TF driver-specific property > > drm/amd/display: add comments to describe DM crtc color mgmt behavior > > drm/amd/display: encapsulate atomic regamma operation > > drm/amd/display: decouple steps for mapping CRTC degamma to DC plane > > drm/amd/display: reject atomic commit if setting both plane and CRTC > > degamma > > drm/amd/display: add plane shaper LUT support > > drm/amd/display: add plane shaper TF support > > drm/amd/display: add plane 3D LUT support > > drm/amd/display: add plane CTM driver-specific property > > drm/amd/display: add plane CTM support > > > > drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 91 ++ > > .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 34 +- > > .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 108 +++ > > .../amd/display/amdgpu_dm/amdgpu_dm_color.c | 818 -- > > .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c| 72 ++ > > .../amd/display/amdgpu_dm/amdgpu_dm_plane.c | 232 - > > .../gpu/drm/amd/display/include/fixed31_32.h | 12 + > > drivers/gpu/drm/arm/malidp_crtc.c | 2 +- > > drivers/gpu/drm/drm_atomic.c | 1 + > > drivers/gpu/drm/drm_atomic_state_helper.c | 1 + > > drivers/gpu/drm/drm_atomic_uapi.c | 43 +- > > drivers/gpu/drm/drm_property.c| 49 ++ > > include/drm/drm_mode_object.h | 2 +- > > include/drm/drm_plane.h | 7 + > > include/drm/drm_property.h| 6 + > > include/uapi/drm/drm_mode.h | 8 + > > 16 files changed, 1377 insertions(+), 109 deletions(-) > > > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch
Re: [PATCH v5 00/32] drm/amd/display: add AMD driver-specific properties for color mgmt
On 2023-11-30 06:34, Daniel Vetter wrote: > On Tue, 28 Nov 2023 at 23:11, Harry Wentland wrote: >> >> On 2023-11-16 14:57, Melissa Wen wrote: >>> Hello, >>> >>> This series extends the current KMS color management API with AMD >>> driver-specific properties to enhance the color management support on >>> AMD Steam Deck. The key additions to the color pipeline include: >>> >> >> snip >> >>> Melissa Wen (18): >>> drm/drm_mode_object: increase max objects to accommodate new color >>> props >>> drm/drm_property: make replace_property_blob_from_id a DRM helper >>> drm/drm_plane: track color mgmt changes per plane >> >> If all patches are merged through amd-staging-drm-next I worry that >> conflicts creep in if any code around replace_property_blob_from_id >> changes in DRM. >> >> My plan is to merge DRM patches through drm-misc-next, as well >> as include them in the amd-staging-drm-next merge. They should then >> fall out at the next amd-staging-drm-next pull and (hopefully) >> ensure that there is no conflict. >> >> If no objections I'll go ahead with that later this week. > > Double-merging tends to be the worst because git doesn't realize the > commits match, which actually makes the conflicts worse when they > happen (because the 3-way merge diff gets absolute confused by all the > changed context and misplaces everything to the max). So please don't, > _only_ every cherry-pick when a patch in -next is also needed in > -fixes, and we didn't put it into the right tree. But even that is a > bit tricky and should only be done by maintainers (using dim > cherry-pick if it's drm-misc) because the conflicts tend to be bad and > need to be sorted out with backmerges sooner than later. > > For this case merge everything through one tree with the right acks, > pull to drm-next asap and then backmerge into the other tree. Here > probably amdgpu-next with drm-misc maintainer acks for the 3 core > patches. Or if amdgpu-next pull won't come for a while, put them into > drm-misc-next and just wait a week until it's in drm-next, then > forward amdgpu-next. > Maxime, Maarten, Thomas, could I get an ACK from you for the three DRM core patches and an ACK for pulling them through the AMD tree? Thanks, Harry > Cheers, Sima > >> Harry >> >>> drm/amd/display: add driver-specific property for plane degamma LUT >>> drm/amd/display: explicitly define EOTF and inverse EOTF >>> drm/amd/display: document AMDGPU pre-defined transfer functions >>> drm/amd/display: add plane 3D LUT driver-specific properties >>> drm/amd/display: add plane shaper LUT and TF driver-specific >>> properties >>> drm/amd/display: add CRTC gamma TF driver-specific property >>> drm/amd/display: add comments to describe DM crtc color mgmt behavior >>> drm/amd/display: encapsulate atomic regamma operation >>> drm/amd/display: decouple steps for mapping CRTC degamma to DC plane >>> drm/amd/display: reject atomic commit if setting both plane and CRTC >>> degamma >>> drm/amd/display: add plane shaper LUT support >>> drm/amd/display: add plane shaper TF support >>> drm/amd/display: add plane 3D LUT support >>> drm/amd/display: add plane CTM driver-specific property >>> drm/amd/display: add plane CTM support >>> >>> drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 91 ++ >>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 34 +- >>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 108 +++ >>> .../amd/display/amdgpu_dm/amdgpu_dm_color.c | 818 -- >>> .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c| 72 ++ >>> .../amd/display/amdgpu_dm/amdgpu_dm_plane.c | 232 - >>> .../gpu/drm/amd/display/include/fixed31_32.h | 12 + >>> drivers/gpu/drm/arm/malidp_crtc.c | 2 +- >>> drivers/gpu/drm/drm_atomic.c | 1 + >>> drivers/gpu/drm/drm_atomic_state_helper.c | 1 + >>> drivers/gpu/drm/drm_atomic_uapi.c | 43 +- >>> drivers/gpu/drm/drm_property.c| 49 ++ >>> include/drm/drm_mode_object.h | 2 +- >>> include/drm/drm_plane.h | 7 + >>> include/drm/drm_property.h| 6 + >>> include/uapi/drm/drm_mode.h | 8 + >>> 16 files changed, 1377 insertions(+), 109 deletions(-) >>> >> > >
Re: [PATCH v5 00/32] drm/amd/display: add AMD driver-specific properties for color mgmt
On Fri, Dec 01, 2023 at 10:20:40AM -0500, Harry Wentland wrote: > > > On 2023-11-30 06:34, Daniel Vetter wrote: > > On Tue, 28 Nov 2023 at 23:11, Harry Wentland wrote: > >> > >> On 2023-11-16 14:57, Melissa Wen wrote: > >>> Hello, > >>> > >>> This series extends the current KMS color management API with AMD > >>> driver-specific properties to enhance the color management support on > >>> AMD Steam Deck. The key additions to the color pipeline include: > >>> > >> > >> snip > >> > >>> Melissa Wen (18): > >>> drm/drm_mode_object: increase max objects to accommodate new color > >>> props > >>> drm/drm_property: make replace_property_blob_from_id a DRM helper > >>> drm/drm_plane: track color mgmt changes per plane > >> > >> If all patches are merged through amd-staging-drm-next I worry that > >> conflicts creep in if any code around replace_property_blob_from_id > >> changes in DRM. > >> > >> My plan is to merge DRM patches through drm-misc-next, as well > >> as include them in the amd-staging-drm-next merge. They should then > >> fall out at the next amd-staging-drm-next pull and (hopefully) > >> ensure that there is no conflict. > >> > >> If no objections I'll go ahead with that later this week. > > > > Double-merging tends to be the worst because git doesn't realize the > > commits match, which actually makes the conflicts worse when they > > happen (because the 3-way merge diff gets absolute confused by all the > > changed context and misplaces everything to the max). So please don't, > > _only_ every cherry-pick when a patch in -next is also needed in > > -fixes, and we didn't put it into the right tree. But even that is a > > bit tricky and should only be done by maintainers (using dim > > cherry-pick if it's drm-misc) because the conflicts tend to be bad and > > need to be sorted out with backmerges sooner than later. > > > > For this case merge everything through one tree with the right acks, > > pull to drm-next asap and then backmerge into the other tree. Here > > probably amdgpu-next with drm-misc maintainer acks for the 3 core > > patches. Or if amdgpu-next pull won't come for a while, put them into > > drm-misc-next and just wait a week until it's in drm-next, then > > forward amdgpu-next. > > > > Maxime, Maarten, Thomas, could I get an ACK from you for the three > DRM core patches and an ACK for pulling them through the AMD tree? Acked-by: Maxime Ripard Maxime signature.asc Description: PGP signature