With an external HDR monitor, we can see gradient banding around the sun
in the intro of Ori and the Will of the Wisps game on steamOS/Gamescope.
Gamescope uses AMD predefined transfer functions for degamma,
shaper/pre-3D-LUT and blend/post-3D-LUT plus CRTC regamma, however, only
degamma block has hardcoded curves. Shaper, blend, regamma predefined
TFs are software-computed by AMD color module into PWL LUTs.

For this translation, the driver originally used the same helper for
EOTFs and inverse EOTFs, even though they differ in input domain, number
of regions and number of TF points per region.

This series targets DCN3+ hw families. It was verified with
steamOS/gamescope on DCN301 and DCN321 both HDMI-connected to an
external HDR monitor (Samsung G6 OLED 27").

Patch 1 reverts commit 8b89acc0b2ba ("drm/amd/display: Remove unused
cm3_helper_translate_curve_to_degamma_hw_format") to reintroduce a
degamma-specific helper and patch 2 wire it up for encoded ->
linear-light LUTs (degamma/blend). With 16 samples per region across 12
regions for blend LUT (where hardware fixed-function curves are not
available and predefined TFs are software-computed into LUTs), banding
on Ori becomes almost imperceptible.

Patch 3 and 4 increase precision in the brightest half, where PQ/SRGB
EOTFs are steeper, by enabling up to 256 samples per region and halving
the per-region point count across 9 regions (128 in [0.5, 1], 64 in
[0.25, 0.5], …). This better matches the shape of PQ/SRGB EOTFs.
Although patches 3 and 4 seem conceptually correct to me, I couldn't see
clear improvement in the bright end with or without them.

With this series:
- degamma and blend LUTs use
  cm3_helper_translate_curve_to_degamma_hw_format(): encoded input,
  non-zero end slope, up to 256 points linearly interpolated between
  adjacent TF pts, fitting [0,1] encoded input range.
- shaper and regamma LUTs continue using
  cm3_helper_translate_curve_to_hw_format(): linear-light input, zero
  end slope, 16 points per region across 32 regions.

Screenshots are not available: my available cameras couldn't capture the
banding cleanly againts the HDR monitor.

Let me know your thoughts!

Melissa

Melissa Wen (4):
  Revert "drm/amd/display: Remove unused
    cm3_helper_translate_curve_to_degamma_hw_format"
  drm/amd/display: use a separate helper to translate degamma curves
  drm/amd/display: support up to 256 samples per region
  drm/amd/display: rework segmentation for linearizing LUT

 .../amd/display/dc/dcn30/dcn30_cm_common.c    | 184 ++++++++++++++++++
 .../display/dc/dwb/dcn30/dcn30_cm_common.h    |   4 +
 .../amd/display/dc/hwss/dcn32/dcn32_hwseq.c   |  10 +-
 3 files changed, 192 insertions(+), 6 deletions(-)

-- 
2.53.0

Reply via email to