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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx
[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(-)


--
With best wishes
Dmitry




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux