mbox series

[00/36] drm/amd/display: add AMD driver-specific properties for color mgmt

Message ID 20230523221520.3115570-1-mwen@igalia.com (mailing list archive)
Headers show
Series drm/amd/display: add AMD driver-specific properties for color mgmt | expand

Message

Melissa Wen May 23, 2023, 10:14 p.m. UTC
This series is a refined version of our RFC [1] for AMD driver-specific
color management properties. It is a collection of contributions from
Joshua, Harry and I to enhance AMD KMS color pipeline for Steam
Deck/SteamOS by exposing the large set of color caps available in AMD
display HW.

Considering RFC feedback, this patchset differs from the previous one by
removing the KConfig option and just guarding driver-specific properties
with `AMD_PRIVATE_COLOR` - but we also removed the guards from internal
elements and operations. We stopped to advertise CRTC shaper and 3D LUTs
properties since they aren't in use in the Steam Deck color pipeline[2].
On the other hand, we keep mapping CRTC shaper and 3D LUTs (DM) to DC
MPC setup. We also improved curve calculations to take into account HW
color caps.

In short, for pre-blending, we added the following properties:
- plane degamma LUT and predefined transfer function;
- plane HDR multiplier
- plane shaper LUT/transfer function;
- plane 3D LUT; and finally,
- plane blend LUT/transfer function, just before blending.

After blending, we already have DRM CRTC degamma/gamma LUTs and CTM,
therefore, we extend post-blending color pipeline with CRTC gamma
transfer function.

The first three patches are on DRM KMS side. We expose DRM property
helper for blob lookup and replacement so that we can use it for
managing driver-specific properties. We add a tracked for plane color
mgmt changes and increase the maximum number of properties to
accommodate this expansion.

The userspace case here is Gamescope which is the compositor for
SteamOS. It's already using all of this functionality to implement its
color management pipeline right now [3].

Current IGT tests kms_color and amdgpu/amd_color on DCN301 and DCN21 HW
preserve the same results with and without the guard. 

Finally, I may have missed something, please let me know if that's the
case.

Best Regards,

Melissa Wen

[1] https://lore.kernel.org/dri-devel/20230423141051.702990-1-mwen@igalia.com
[2] https://github.com/ValveSoftware/gamescope/blob/master/src/docs/Steam%20Deck%20Display%20Pipeline.png
[3] https://github.com/ValveSoftware/gamescope


Harry Wentland (2):
  drm/amd/display: fix segment distribution for linear LUTs
  drm/amd/display: fix the delta clamping for shaper LUT

Joshua Ashton (13):
  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: copy 3D LUT settings from crtc state to stream_update
  drm/amd/display: dynamically acquire 3DLUT resources for color changes
  drm/amd/display: add CRTC regamma TF support
  drm/amd/display: set sdr_ref_white_level to 80 for out_transfer_func
  drm/amd/display: add support for plane degamma TF and LUT properties
  drm/amd/display: add dc_fixpt_from_s3132 helper
  drm/adm/display: add HDR multiplier support
  drm/amd/display: handle empty LUTs in __set_input_tf
  drm/amd/display: add DRM plane blend LUT and TF support
  drm/amd/display: allow newer DC hardware to use degamma ROM for PQ/HLG

Melissa Wen (21):
  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 CRTC driver-specific property for gamma TF
  drm/amd/display: add plane driver-specific properties for degamma LUT
  drm/amd/display: add plane 3D LUT driver-specific properties
  drm/amd/display: add plane shaper LUT driver-specific properties
  drm/amd/display: add plane shaper TF driver-private property
  drm/amd/display: add comments to describe DM crtc color mgmt behavior
  drm/amd/display: encapsulate atomic regamma operation
  drm/amd/display: update lut3d and shaper lut to stream
  drm/amd/display: allow BYPASS 3D LUT but keep shaper LUT settings
  drm/amd/display: handle MPC 3D LUT resources for a given context
  drm/amd/display: add CRTC 3D LUT support
  drm/amd/display: add CRTC shaper LUT support
  drm/amd/display: add CRTC shaper TF support
  drm/amd/display: mark plane as needing reset if plane color mgmt
    changes
  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: program DPP shaper and 3D LUT if updated
  drm/amd/display: add plane shaper/3D LUT and shaper TF support

 drivers/gpu/drm/amd/amdgpu/amdgpu_display.c   | 125 ++++
 drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h      |  69 ++
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |  28 +-
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 110 +++-
 .../amd/display/amdgpu_dm/amdgpu_dm_color.c   | 612 ++++++++++++++++--
 .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c    |  72 ++-
 .../amd/display/amdgpu_dm/amdgpu_dm_plane.c   | 213 +++++-
 drivers/gpu/drm/amd/display/dc/core/dc.c      |  49 +-
 drivers/gpu/drm/amd/display/dc/dc.h           |   8 +
 .../amd/display/dc/dcn10/dcn10_cm_common.c    | 107 ++-
 .../drm/amd/display/dc/dcn20/dcn20_hwseq.c    |   5 +-
 .../drm/amd/display/dc/dcn30/dcn30_hwseq.c    |   9 +-
 .../amd/display/dc/dcn301/dcn301_resource.c   |  26 +-
 .../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 +
 22 files changed, 1416 insertions(+), 140 deletions(-)

Comments

Dmitry Baryshkov May 29, 2023, 10:55 p.m. UTC | #1
On 24/05/2023 01:14, Melissa Wen wrote:
> This series is a refined version of our RFC [1] for AMD driver-specific
> color management properties. It is a collection of contributions from
> Joshua, Harry and I to enhance AMD KMS color pipeline for Steam
> Deck/SteamOS by exposing the large set of color caps available in AMD
> display HW.
> 
> Considering RFC feedback, this patchset differs from the previous one by
> removing the KConfig option and just guarding driver-specific properties
> with `AMD_PRIVATE_COLOR` - but we also removed the guards from internal
> elements and operations. We stopped to advertise CRTC shaper and 3D LUTs
> properties since they aren't in use in the Steam Deck color pipeline[2].
> On the other hand, we keep mapping CRTC shaper and 3D LUTs (DM) to DC
> MPC setup. We also improved curve calculations to take into account HW
> color caps.
> 
> In short, for pre-blending, we added the following properties:
> - plane degamma LUT and predefined transfer function;
> - plane HDR multiplier
> - plane shaper LUT/transfer function;
> - plane 3D LUT; and finally,
> - plane blend LUT/transfer function, just before blending.

This set of properties sounds interesting and not fully AMD-specific. 
Could you please consider moving them to the more generic location?

For the reference, MSM (Qualcomm) display hardware supports 
degamma/gamma LUTs for planes too. One of the suggested usecases for 
these degamma/gamma units is to support colorspace transfer functions.

Thus, at least some of these properties can be implemented in drm/msm 
driver too.

> After blending, we already have DRM CRTC degamma/gamma LUTs and CTM,
> therefore, we extend post-blending color pipeline with CRTC gamma
> transfer function.
> 
> The first three patches are on DRM KMS side. We expose DRM property
> helper for blob lookup and replacement so that we can use it for
> managing driver-specific properties. We add a tracked for plane color
> mgmt changes and increase the maximum number of properties to
> accommodate this expansion.
> 
> The userspace case here is Gamescope which is the compositor for
> SteamOS. It's already using all of this functionality to implement its
> color management pipeline right now [3].
> 
> Current IGT tests kms_color and amdgpu/amd_color on DCN301 and DCN21 HW
> preserve the same results with and without the guard.
> 
> Finally, I may have missed something, please let me know if that's the
> case.
> 
> Best Regards,
> 
> Melissa Wen
> 
> [1] https://lore.kernel.org/dri-devel/20230423141051.702990-1-mwen@igalia.com
> [2] https://github.com/ValveSoftware/gamescope/blob/master/src/docs/Steam%20Deck%20Display%20Pipeline.png
> [3] https://github.com/ValveSoftware/gamescope
> 
> 
> Harry Wentland (2):
>    drm/amd/display: fix segment distribution for linear LUTs
>    drm/amd/display: fix the delta clamping for shaper LUT
> 
> Joshua Ashton (13):
>    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: copy 3D LUT settings from crtc state to stream_update
>    drm/amd/display: dynamically acquire 3DLUT resources for color changes
>    drm/amd/display: add CRTC regamma TF support
>    drm/amd/display: set sdr_ref_white_level to 80 for out_transfer_func
>    drm/amd/display: add support for plane degamma TF and LUT properties
>    drm/amd/display: add dc_fixpt_from_s3132 helper
>    drm/adm/display: add HDR multiplier support
>    drm/amd/display: handle empty LUTs in __set_input_tf
>    drm/amd/display: add DRM plane blend LUT and TF support
>    drm/amd/display: allow newer DC hardware to use degamma ROM for PQ/HLG
> 
> Melissa Wen (21):
>    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 CRTC driver-specific property for gamma TF
>    drm/amd/display: add plane driver-specific properties for degamma LUT
>    drm/amd/display: add plane 3D LUT driver-specific properties
>    drm/amd/display: add plane shaper LUT driver-specific properties
>    drm/amd/display: add plane shaper TF driver-private property
>    drm/amd/display: add comments to describe DM crtc color mgmt behavior
>    drm/amd/display: encapsulate atomic regamma operation
>    drm/amd/display: update lut3d and shaper lut to stream
>    drm/amd/display: allow BYPASS 3D LUT but keep shaper LUT settings
>    drm/amd/display: handle MPC 3D LUT resources for a given context
>    drm/amd/display: add CRTC 3D LUT support
>    drm/amd/display: add CRTC shaper LUT support
>    drm/amd/display: add CRTC shaper TF support
>    drm/amd/display: mark plane as needing reset if plane color mgmt
>      changes
>    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: program DPP shaper and 3D LUT if updated
>    drm/amd/display: add plane shaper/3D LUT and shaper TF support
> 
>   drivers/gpu/drm/amd/amdgpu/amdgpu_display.c   | 125 ++++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h      |  69 ++
>   .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |  28 +-
>   .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 110 +++-
>   .../amd/display/amdgpu_dm/amdgpu_dm_color.c   | 612 ++++++++++++++++--
>   .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c    |  72 ++-
>   .../amd/display/amdgpu_dm/amdgpu_dm_plane.c   | 213 +++++-
>   drivers/gpu/drm/amd/display/dc/core/dc.c      |  49 +-
>   drivers/gpu/drm/amd/display/dc/dc.h           |   8 +
>   .../amd/display/dc/dcn10/dcn10_cm_common.c    | 107 ++-
>   .../drm/amd/display/dc/dcn20/dcn20_hwseq.c    |   5 +-
>   .../drm/amd/display/dc/dcn30/dcn30_hwseq.c    |   9 +-
>   .../amd/display/dc/dcn301/dcn301_resource.c   |  26 +-
>   .../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 +
>   22 files changed, 1416 insertions(+), 140 deletions(-)
>
Pekka Paalanen May 30, 2023, 7:22 a.m. UTC | #2
On Tue, 30 May 2023 01:55:21 +0300
Dmitry Baryshkov <dmitry.baryshkov@linaro.org> wrote:

> On 24/05/2023 01:14, Melissa Wen wrote:
> > This series is a refined version of our RFC [1] for AMD driver-specific
> > color management properties. It is a collection of contributions from
> > Joshua, Harry and I to enhance AMD KMS color pipeline for Steam
> > Deck/SteamOS by exposing the large set of color caps available in AMD
> > display HW.
> > 
> > Considering RFC feedback, this patchset differs from the previous one by
> > removing the KConfig option and just guarding driver-specific properties
> > with `AMD_PRIVATE_COLOR` - but we also removed the guards from internal
> > elements and operations. We stopped to advertise CRTC shaper and 3D LUTs
> > properties since they aren't in use in the Steam Deck color pipeline[2].
> > On the other hand, we keep mapping CRTC shaper and 3D LUTs (DM) to DC
> > MPC setup. We also improved curve calculations to take into account HW
> > color caps.
> > 
> > In short, for pre-blending, we added the following properties:
> > - plane degamma LUT and predefined transfer function;
> > - plane HDR multiplier
> > - plane shaper LUT/transfer function;
> > - plane 3D LUT; and finally,
> > - plane blend LUT/transfer function, just before blending.  
> 
> This set of properties sounds interesting and not fully AMD-specific. 
> Could you please consider moving them to the more generic location?

No, please see the following thread for plans for more generic UAPI:

https://lists.freedesktop.org/archives/dri-devel/2023-May/403173.html

AMD just needs something right now, so they try their own stuff first
without exposing it to userspace.


Thanks,
pq

> For the reference, MSM (Qualcomm) display hardware supports 
> degamma/gamma LUTs for planes too. One of the suggested usecases for 
> these degamma/gamma units is to support colorspace transfer functions.
> 
> Thus, at least some of these properties can be implemented in drm/msm 
> driver too.
> 
> > After blending, we already have DRM CRTC degamma/gamma LUTs and CTM,
> > therefore, we extend post-blending color pipeline with CRTC gamma
> > transfer function.
> > 
> > The first three patches are on DRM KMS side. We expose DRM property
> > helper for blob lookup and replacement so that we can use it for
> > managing driver-specific properties. We add a tracked for plane color
> > mgmt changes and increase the maximum number of properties to
> > accommodate this expansion.
> > 
> > The userspace case here is Gamescope which is the compositor for
> > SteamOS. It's already using all of this functionality to implement its
> > color management pipeline right now [3].
> > 
> > Current IGT tests kms_color and amdgpu/amd_color on DCN301 and DCN21 HW
> > preserve the same results with and without the guard.
> > 
> > Finally, I may have missed something, please let me know if that's the
> > case.
> > 
> > Best Regards,
> > 
> > Melissa Wen
> > 
> > [1] https://lore.kernel.org/dri-devel/20230423141051.702990-1-mwen@igalia.com
> > [2] https://github.com/ValveSoftware/gamescope/blob/master/src/docs/Steam%20Deck%20Display%20Pipeline.png
> > [3] https://github.com/ValveSoftware/gamescope
> > 
> > 
> > Harry Wentland (2):
> >    drm/amd/display: fix segment distribution for linear LUTs
> >    drm/amd/display: fix the delta clamping for shaper LUT
> > 
> > Joshua Ashton (13):
> >    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: copy 3D LUT settings from crtc state to stream_update
> >    drm/amd/display: dynamically acquire 3DLUT resources for color changes
> >    drm/amd/display: add CRTC regamma TF support
> >    drm/amd/display: set sdr_ref_white_level to 80 for out_transfer_func
> >    drm/amd/display: add support for plane degamma TF and LUT properties
> >    drm/amd/display: add dc_fixpt_from_s3132 helper
> >    drm/adm/display: add HDR multiplier support
> >    drm/amd/display: handle empty LUTs in __set_input_tf
> >    drm/amd/display: add DRM plane blend LUT and TF support
> >    drm/amd/display: allow newer DC hardware to use degamma ROM for PQ/HLG
> > 
> > Melissa Wen (21):
> >    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 CRTC driver-specific property for gamma TF
> >    drm/amd/display: add plane driver-specific properties for degamma LUT
> >    drm/amd/display: add plane 3D LUT driver-specific properties
> >    drm/amd/display: add plane shaper LUT driver-specific properties
> >    drm/amd/display: add plane shaper TF driver-private property
> >    drm/amd/display: add comments to describe DM crtc color mgmt behavior
> >    drm/amd/display: encapsulate atomic regamma operation
> >    drm/amd/display: update lut3d and shaper lut to stream
> >    drm/amd/display: allow BYPASS 3D LUT but keep shaper LUT settings
> >    drm/amd/display: handle MPC 3D LUT resources for a given context
> >    drm/amd/display: add CRTC 3D LUT support
> >    drm/amd/display: add CRTC shaper LUT support
> >    drm/amd/display: add CRTC shaper TF support
> >    drm/amd/display: mark plane as needing reset if plane color mgmt
> >      changes
> >    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: program DPP shaper and 3D LUT if updated
> >    drm/amd/display: add plane shaper/3D LUT and shaper TF support
> > 
> >   drivers/gpu/drm/amd/amdgpu/amdgpu_display.c   | 125 ++++
> >   drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h      |  69 ++
> >   .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |  28 +-
> >   .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 110 +++-
> >   .../amd/display/amdgpu_dm/amdgpu_dm_color.c   | 612 ++++++++++++++++--
> >   .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c    |  72 ++-
> >   .../amd/display/amdgpu_dm/amdgpu_dm_plane.c   | 213 +++++-
> >   drivers/gpu/drm/amd/display/dc/core/dc.c      |  49 +-
> >   drivers/gpu/drm/amd/display/dc/dc.h           |   8 +
> >   .../amd/display/dc/dcn10/dcn10_cm_common.c    | 107 ++-
> >   .../drm/amd/display/dc/dcn20/dcn20_hwseq.c    |   5 +-
> >   .../drm/amd/display/dc/dcn30/dcn30_hwseq.c    |   9 +-
> >   .../amd/display/dc/dcn301/dcn301_resource.c   |  26 +-
> >   .../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 +
> >   22 files changed, 1416 insertions(+), 140 deletions(-)
> >   
>
Harry Wentland June 2, 2023, 3:18 p.m. UTC | #3
On 5/23/23 18:14, Melissa Wen wrote:
> This series is a refined version of our RFC [1] for AMD driver-specific
> color management properties. It is a collection of contributions from
> Joshua, Harry and I to enhance AMD KMS color pipeline for Steam
> Deck/SteamOS by exposing the large set of color caps available in AMD
> display HW.
> 
> Considering RFC feedback, this patchset differs from the previous one by
> removing the KConfig option and just guarding driver-specific properties
> with `AMD_PRIVATE_COLOR` - but we also removed the guards from internal
> elements and operations. We stopped to advertise CRTC shaper and 3D LUTs
> properties since they aren't in use in the Steam Deck color pipeline[2].
> On the other hand, we keep mapping CRTC shaper and 3D LUTs (DM) to DC
> MPC setup. We also improved curve calculations to take into account HW
> color caps.
> 
> In short, for pre-blending, we added the following properties:
> - plane degamma LUT and predefined transfer function;
> - plane HDR multiplier
> - plane shaper LUT/transfer function;
> - plane 3D LUT; and finally,
> - plane blend LUT/transfer function, just before blending.
> 
> After blending, we already have DRM CRTC degamma/gamma LUTs and CTM,
> therefore, we extend post-blending color pipeline with CRTC gamma
> transfer function.
> 
> The first three patches are on DRM KMS side. We expose DRM property
> helper for blob lookup and replacement so that we can use it for
> managing driver-specific properties. We add a tracked for plane color
> mgmt changes and increase the maximum number of properties to
> accommodate this expansion.
> 
> The userspace case here is Gamescope which is the compositor for
> SteamOS. It's already using all of this functionality to implement its
> color management pipeline right now [3].
> 
> Current IGT tests kms_color and amdgpu/amd_color on DCN301 and DCN21 HW
> preserve the same results with and without the guard. 
> 
> Finally, I may have missed something, please let me know if that's the
> case.
> 

Looks like we're on the right track with this.

Patches 1-3, 15, 17, 24-31, 33-35 are
Reviewed-by: Harry Wentland <harry.wentland@amd.com>

I left comments on a bunch of the other patches. Let's replace drm_
prefices with amdgpu_ or amdgpu_dm and move the property registration/
definition from amdgpu_display.c to amdgpu_dm_color.c.

I'll chase internal feedback for some of the DC patches. They look fine
to me but I don't want them to cause problems on other OSes. I might
pull them through our internal repo. Will update you on that.

Patches 16-22 will be untested without properties to actually set them.
That makes me a bit uncomfortable but on the other hand they provide
functionality that we'll want eventually. Let me think about them a bit
more and also make sure the DC portions won't cause issues.

Harry

> Best Regards,
> 
> Melissa Wen
> 
> [1] https://lore.kernel.org/dri-devel/20230423141051.702990-1-mwen@igalia.com
> [2] https://github.com/ValveSoftware/gamescope/blob/master/src/docs/Steam%20Deck%20Display%20Pipeline.png
> [3] https://github.com/ValveSoftware/gamescope
> 
> 
> Harry Wentland (2):
>   drm/amd/display: fix segment distribution for linear LUTs
>   drm/amd/display: fix the delta clamping for shaper LUT
> 
> Joshua Ashton (13):
>   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: copy 3D LUT settings from crtc state to stream_update
>   drm/amd/display: dynamically acquire 3DLUT resources for color changes
>   drm/amd/display: add CRTC regamma TF support
>   drm/amd/display: set sdr_ref_white_level to 80 for out_transfer_func
>   drm/amd/display: add support for plane degamma TF and LUT properties
>   drm/amd/display: add dc_fixpt_from_s3132 helper
>   drm/adm/display: add HDR multiplier support
>   drm/amd/display: handle empty LUTs in __set_input_tf
>   drm/amd/display: add DRM plane blend LUT and TF support
>   drm/amd/display: allow newer DC hardware to use degamma ROM for PQ/HLG
> 
> Melissa Wen (21):
>   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 CRTC driver-specific property for gamma TF
>   drm/amd/display: add plane driver-specific properties for degamma LUT
>   drm/amd/display: add plane 3D LUT driver-specific properties
>   drm/amd/display: add plane shaper LUT driver-specific properties
>   drm/amd/display: add plane shaper TF driver-private property
>   drm/amd/display: add comments to describe DM crtc color mgmt behavior
>   drm/amd/display: encapsulate atomic regamma operation
>   drm/amd/display: update lut3d and shaper lut to stream
>   drm/amd/display: allow BYPASS 3D LUT but keep shaper LUT settings
>   drm/amd/display: handle MPC 3D LUT resources for a given context
>   drm/amd/display: add CRTC 3D LUT support
>   drm/amd/display: add CRTC shaper LUT support
>   drm/amd/display: add CRTC shaper TF support
>   drm/amd/display: mark plane as needing reset if plane color mgmt
>     changes
>   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: program DPP shaper and 3D LUT if updated
>   drm/amd/display: add plane shaper/3D LUT and shaper TF support
> 
>  drivers/gpu/drm/amd/amdgpu/amdgpu_display.c   | 125 ++++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h      |  69 ++
>  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |  28 +-
>  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 110 +++-
>  .../amd/display/amdgpu_dm/amdgpu_dm_color.c   | 612 ++++++++++++++++--
>  .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c    |  72 ++-
>  .../amd/display/amdgpu_dm/amdgpu_dm_plane.c   | 213 +++++-
>  drivers/gpu/drm/amd/display/dc/core/dc.c      |  49 +-
>  drivers/gpu/drm/amd/display/dc/dc.h           |   8 +
>  .../amd/display/dc/dcn10/dcn10_cm_common.c    | 107 ++-
>  .../drm/amd/display/dc/dcn20/dcn20_hwseq.c    |   5 +-
>  .../drm/amd/display/dc/dcn30/dcn30_hwseq.c    |   9 +-
>  .../amd/display/dc/dcn301/dcn301_resource.c   |  26 +-
>  .../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 +
>  22 files changed, 1416 insertions(+), 140 deletions(-)
>
Melissa Wen June 6, 2023, 5:22 p.m. UTC | #4
On 06/02, Harry Wentland wrote:
> 
> 
> On 5/23/23 18:14, Melissa Wen wrote:
> > This series is a refined version of our RFC [1] for AMD driver-specific
> > color management properties. It is a collection of contributions from
> > Joshua, Harry and I to enhance AMD KMS color pipeline for Steam
> > Deck/SteamOS by exposing the large set of color caps available in AMD
> > display HW.
> > 
> > Considering RFC feedback, this patchset differs from the previous one by
> > removing the KConfig option and just guarding driver-specific properties
> > with `AMD_PRIVATE_COLOR` - but we also removed the guards from internal
> > elements and operations. We stopped to advertise CRTC shaper and 3D LUTs
> > properties since they aren't in use in the Steam Deck color pipeline[2].
> > On the other hand, we keep mapping CRTC shaper and 3D LUTs (DM) to DC
> > MPC setup. We also improved curve calculations to take into account HW
> > color caps.
> > 
> > In short, for pre-blending, we added the following properties:
> > - plane degamma LUT and predefined transfer function;
> > - plane HDR multiplier
> > - plane shaper LUT/transfer function;
> > - plane 3D LUT; and finally,
> > - plane blend LUT/transfer function, just before blending.
> > 
> > After blending, we already have DRM CRTC degamma/gamma LUTs and CTM,
> > therefore, we extend post-blending color pipeline with CRTC gamma
> > transfer function.
> > 
> > The first three patches are on DRM KMS side. We expose DRM property
> > helper for blob lookup and replacement so that we can use it for
> > managing driver-specific properties. We add a tracked for plane color
> > mgmt changes and increase the maximum number of properties to
> > accommodate this expansion.
> > 
> > The userspace case here is Gamescope which is the compositor for
> > SteamOS. It's already using all of this functionality to implement its
> > color management pipeline right now [3].
> > 
> > Current IGT tests kms_color and amdgpu/amd_color on DCN301 and DCN21 HW
> > preserve the same results with and without the guard. 
> > 
> > Finally, I may have missed something, please let me know if that's the
> > case.
> > 
> 
> Looks like we're on the right track with this.
> 
> Patches 1-3, 15, 17, 24-31, 33-35 are
> Reviewed-by: Harry Wentland <harry.wentland@amd.com>

Thanks!

> 
> I left comments on a bunch of the other patches. Let's replace drm_
> prefices with amdgpu_ or amdgpu_dm and move the property registration/
> definition from amdgpu_display.c to amdgpu_dm_color.c.

Okay.

> 
> I'll chase internal feedback for some of the DC patches. They look fine
> to me but I don't want them to cause problems on other OSes. I might
> pull them through our internal repo. Will update you on that.
> 
> Patches 16-22 will be untested without properties to actually set them.
> That makes me a bit uncomfortable but on the other hand they provide
> functionality that we'll want eventually. Let me think about them a bit
> more and also make sure the DC portions won't cause issues.

Okay. I'll rework these patches to isolate them from the properties we
are exposing. I can move it to the end of the patch or I can detach from
this series and send them in a separate version. Probably the latter
makes more sense.

Thanks for reviewing this long series. I'll prepare a next version
addressing all sugestions.

Melissa

> 
> Harry
> 
> > Best Regards,
> > 
> > Melissa Wen
> > 
> > [1] https://lore.kernel.org/dri-devel/20230423141051.702990-1-mwen@igalia.com
> > [2] https://github.com/ValveSoftware/gamescope/blob/master/src/docs/Steam%20Deck%20Display%20Pipeline.png
> > [3] https://github.com/ValveSoftware/gamescope
> > 
> > 
> > Harry Wentland (2):
> >   drm/amd/display: fix segment distribution for linear LUTs
> >   drm/amd/display: fix the delta clamping for shaper LUT
> > 
> > Joshua Ashton (13):
> >   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: copy 3D LUT settings from crtc state to stream_update
> >   drm/amd/display: dynamically acquire 3DLUT resources for color changes
> >   drm/amd/display: add CRTC regamma TF support
> >   drm/amd/display: set sdr_ref_white_level to 80 for out_transfer_func
> >   drm/amd/display: add support for plane degamma TF and LUT properties
> >   drm/amd/display: add dc_fixpt_from_s3132 helper
> >   drm/adm/display: add HDR multiplier support
> >   drm/amd/display: handle empty LUTs in __set_input_tf
> >   drm/amd/display: add DRM plane blend LUT and TF support
> >   drm/amd/display: allow newer DC hardware to use degamma ROM for PQ/HLG
> > 
> > Melissa Wen (21):
> >   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 CRTC driver-specific property for gamma TF
> >   drm/amd/display: add plane driver-specific properties for degamma LUT
> >   drm/amd/display: add plane 3D LUT driver-specific properties
> >   drm/amd/display: add plane shaper LUT driver-specific properties
> >   drm/amd/display: add plane shaper TF driver-private property
> >   drm/amd/display: add comments to describe DM crtc color mgmt behavior
> >   drm/amd/display: encapsulate atomic regamma operation
> >   drm/amd/display: update lut3d and shaper lut to stream
> >   drm/amd/display: allow BYPASS 3D LUT but keep shaper LUT settings
> >   drm/amd/display: handle MPC 3D LUT resources for a given context
> >   drm/amd/display: add CRTC 3D LUT support
> >   drm/amd/display: add CRTC shaper LUT support
> >   drm/amd/display: add CRTC shaper TF support
> >   drm/amd/display: mark plane as needing reset if plane color mgmt
> >     changes
> >   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: program DPP shaper and 3D LUT if updated
> >   drm/amd/display: add plane shaper/3D LUT and shaper TF support
> > 
> >  drivers/gpu/drm/amd/amdgpu/amdgpu_display.c   | 125 ++++
> >  drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h      |  69 ++
> >  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |  28 +-
> >  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 110 +++-
> >  .../amd/display/amdgpu_dm/amdgpu_dm_color.c   | 612 ++++++++++++++++--
> >  .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c    |  72 ++-
> >  .../amd/display/amdgpu_dm/amdgpu_dm_plane.c   | 213 +++++-
> >  drivers/gpu/drm/amd/display/dc/core/dc.c      |  49 +-
> >  drivers/gpu/drm/amd/display/dc/dc.h           |   8 +
> >  .../amd/display/dc/dcn10/dcn10_cm_common.c    | 107 ++-
> >  .../drm/amd/display/dc/dcn20/dcn20_hwseq.c    |   5 +-
> >  .../drm/amd/display/dc/dcn30/dcn30_hwseq.c    |   9 +-
> >  .../amd/display/dc/dcn301/dcn301_resource.c   |  26 +-
> >  .../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 +
> >  22 files changed, 1416 insertions(+), 140 deletions(-)
> > 
>
Melissa Wen June 6, 2023, 5:29 p.m. UTC | #5
On 06/06, Melissa Wen wrote:
> On 06/02, Harry Wentland wrote:
> > 
> > 
> > On 5/23/23 18:14, Melissa Wen wrote:
> > > This series is a refined version of our RFC [1] for AMD driver-specific
> > > color management properties. It is a collection of contributions from
> > > Joshua, Harry and I to enhance AMD KMS color pipeline for Steam
> > > Deck/SteamOS by exposing the large set of color caps available in AMD
> > > display HW.
> > > 
> > > Considering RFC feedback, this patchset differs from the previous one by
> > > removing the KConfig option and just guarding driver-specific properties
> > > with `AMD_PRIVATE_COLOR` - but we also removed the guards from internal
> > > elements and operations. We stopped to advertise CRTC shaper and 3D LUTs
> > > properties since they aren't in use in the Steam Deck color pipeline[2].
> > > On the other hand, we keep mapping CRTC shaper and 3D LUTs (DM) to DC
> > > MPC setup. We also improved curve calculations to take into account HW
> > > color caps.
> > > 
> > > In short, for pre-blending, we added the following properties:
> > > - plane degamma LUT and predefined transfer function;
> > > - plane HDR multiplier
> > > - plane shaper LUT/transfer function;
> > > - plane 3D LUT; and finally,
> > > - plane blend LUT/transfer function, just before blending.
> > > 
> > > After blending, we already have DRM CRTC degamma/gamma LUTs and CTM,
> > > therefore, we extend post-blending color pipeline with CRTC gamma
> > > transfer function.
> > > 
> > > The first three patches are on DRM KMS side. We expose DRM property
> > > helper for blob lookup and replacement so that we can use it for
> > > managing driver-specific properties. We add a tracked for plane color
> > > mgmt changes and increase the maximum number of properties to
> > > accommodate this expansion.
> > > 
> > > The userspace case here is Gamescope which is the compositor for
> > > SteamOS. It's already using all of this functionality to implement its
> > > color management pipeline right now [3].
> > > 
> > > Current IGT tests kms_color and amdgpu/amd_color on DCN301 and DCN21 HW
> > > preserve the same results with and without the guard. 
> > > 
> > > Finally, I may have missed something, please let me know if that's the
> > > case.
> > > 
> > 
> > Looks like we're on the right track with this.
> > 
> > Patches 1-3, 15, 17, 24-31, 33-35 are
> > Reviewed-by: Harry Wentland <harry.wentland@amd.com>
> 
> Thanks!
> 
> > 
> > I left comments on a bunch of the other patches. Let's replace drm_
> > prefices with amdgpu_ or amdgpu_dm and move the property registration/
> > definition from amdgpu_display.c to amdgpu_dm_color.c.
> 
> Okay.
> 
> > 
> > I'll chase internal feedback for some of the DC patches. They look fine
> > to me but I don't want them to cause problems on other OSes. I might
> > pull them through our internal repo. Will update you on that.
> > 
> > Patches 16-22 will be untested without properties to actually set them.
> > That makes me a bit uncomfortable but on the other hand they provide
> > functionality that we'll want eventually. Let me think about them a bit
> > more and also make sure the DC portions won't cause issues.
> 
> Okay. I'll rework these patches to isolate them from the properties we
> are exposing. I can move it to the end of the patch or I can detach from
s/the patch/this series

> this series and send them in a separate version. Probably the latter
> makes more sense.
> 
> Thanks for reviewing this long series. I'll prepare a next version
> addressing all sugestions.
> 
> Melissa
> 
> > 
> > Harry
> > 
> > > Best Regards,
> > > 
> > > Melissa Wen
> > > 
> > > [1] https://lore.kernel.org/dri-devel/20230423141051.702990-1-mwen@igalia.com
> > > [2] https://github.com/ValveSoftware/gamescope/blob/master/src/docs/Steam%20Deck%20Display%20Pipeline.png
> > > [3] https://github.com/ValveSoftware/gamescope
> > > 
> > > 
> > > Harry Wentland (2):
> > >   drm/amd/display: fix segment distribution for linear LUTs
> > >   drm/amd/display: fix the delta clamping for shaper LUT
> > > 
> > > Joshua Ashton (13):
> > >   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: copy 3D LUT settings from crtc state to stream_update
> > >   drm/amd/display: dynamically acquire 3DLUT resources for color changes
> > >   drm/amd/display: add CRTC regamma TF support
> > >   drm/amd/display: set sdr_ref_white_level to 80 for out_transfer_func
> > >   drm/amd/display: add support for plane degamma TF and LUT properties
> > >   drm/amd/display: add dc_fixpt_from_s3132 helper
> > >   drm/adm/display: add HDR multiplier support
> > >   drm/amd/display: handle empty LUTs in __set_input_tf
> > >   drm/amd/display: add DRM plane blend LUT and TF support
> > >   drm/amd/display: allow newer DC hardware to use degamma ROM for PQ/HLG
> > > 
> > > Melissa Wen (21):
> > >   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 CRTC driver-specific property for gamma TF
> > >   drm/amd/display: add plane driver-specific properties for degamma LUT
> > >   drm/amd/display: add plane 3D LUT driver-specific properties
> > >   drm/amd/display: add plane shaper LUT driver-specific properties
> > >   drm/amd/display: add plane shaper TF driver-private property
> > >   drm/amd/display: add comments to describe DM crtc color mgmt behavior
> > >   drm/amd/display: encapsulate atomic regamma operation
> > >   drm/amd/display: update lut3d and shaper lut to stream
> > >   drm/amd/display: allow BYPASS 3D LUT but keep shaper LUT settings
> > >   drm/amd/display: handle MPC 3D LUT resources for a given context
> > >   drm/amd/display: add CRTC 3D LUT support
> > >   drm/amd/display: add CRTC shaper LUT support
> > >   drm/amd/display: add CRTC shaper TF support
> > >   drm/amd/display: mark plane as needing reset if plane color mgmt
> > >     changes
> > >   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: program DPP shaper and 3D LUT if updated
> > >   drm/amd/display: add plane shaper/3D LUT and shaper TF support
> > > 
> > >  drivers/gpu/drm/amd/amdgpu/amdgpu_display.c   | 125 ++++
> > >  drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h      |  69 ++
> > >  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |  28 +-
> > >  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 110 +++-
> > >  .../amd/display/amdgpu_dm/amdgpu_dm_color.c   | 612 ++++++++++++++++--
> > >  .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c    |  72 ++-
> > >  .../amd/display/amdgpu_dm/amdgpu_dm_plane.c   | 213 +++++-
> > >  drivers/gpu/drm/amd/display/dc/core/dc.c      |  49 +-
> > >  drivers/gpu/drm/amd/display/dc/dc.h           |   8 +
> > >  .../amd/display/dc/dcn10/dcn10_cm_common.c    | 107 ++-
> > >  .../drm/amd/display/dc/dcn20/dcn20_hwseq.c    |   5 +-
> > >  .../drm/amd/display/dc/dcn30/dcn30_hwseq.c    |   9 +-
> > >  .../amd/display/dc/dcn301/dcn301_resource.c   |  26 +-
> > >  .../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 +
> > >  22 files changed, 1416 insertions(+), 140 deletions(-)
> > > 
> >