On 2023-11-28 12:52, Melissa Wen wrote: > This series updates the color state section of the AMD DTN log to match > color resource differences between DCN versions. > > Currently, the DTN log considers the DCN10 color pipeline, which is > useless for newer DCN versions due to all the color capability > differences. In addition to the new color blocks and features, some > semantic differences meant that the DCN10 output was no longer suitable > for newer families. > > This version addresses comments from Siqueira and Harry [1]. It also > contains some improvements: DPP and MPC gamut remap matrix data in 31.32 > fixed point format and coverage of DCN2+ and DCN3+. > > - The first patch decouple DCN10 color state from HW log in a > preparation for color logs specific to each DCN family. > - Harry kindly provided the second patch with a way to read Gamut Remap > Matrix data in 31.32 fixed point format instead of HW values. > - With this, I replaced the DCN10 gamut remap output to display values > in the new format (third patch). > - Patches 4 and 6 fill up the color state of DPP and MPC blocks for DCN3 > from the right registers. > - As DCN3+ has a new MPC color block for post-blending Gamut Remap > matrix, in the patch 5 I reuse Harry's approach for reading DPP gamut > remap matrix and create a helper to read data of MPC gamut remap > matrix. > - Patch 7 and 9 create the new color state log specific for DCN2+ and > DCN3+. I didn't extend to DCN32 (and also DCN35) because I observed > some differences in the shaper and 3D LUT registers of this version. > - Patch 8 adds description of DPP and MPC color blocks for for better > interpretation of data. > > This new approach works well with the driver-specific color > properties[2] and steamdeck/gamescope[3] together, where we can see > color state changing from default values. I also tested with > steamdeck/KDE and DCN21/GNOME. > > Please find some `before vs after` results below: > > === > > DCN301 - Before: > --------------- > > DPP: IGAM format IGAM mode DGAM mode RGAM mode GAMUT mode C11 C12 > C13 C14 C21 C22 C23 C24 C31 C32 C33 C34 > [ 0]: 0h BypassFixed Bypass Bypass 0 > 00000000h 00000000h 00000000h 00000000h 00000000h 00000000h > [ 1]: 0h BypassFixed Bypass Bypass 0 > 00000000h 00000000h 00000000h 00000000h 00000000h 00000000h > [ 2]: 0h BypassFixed Bypass Bypass 0 > 00000000h 00000000h 00000000h 00000000h 00000000h 00000000h > [ 3]: 0h BypassFixed Bypass Bypass 0 > 00000000h 00000000h 00000000h 00000000h 00000000h 00000000h > > MPCC: OPP DPP MPCCBOT MODE ALPHA_MODE PREMULT OVERLAP_ONLY IDLE > [ 0]: 0h 0h 2h 3 0 1 0 0 > [ 1]: 0h 1h fh 2 2 0 0 0 > [ 2]: 0h 2h 3h 3 0 1 0 0 > [ 3]: 0h 3h 1h 3 2 0 0 0 > > > DCN301 - After (Gamescope): > --------------------------- > > DPP: DGAM ROM DGAM ROM type DGAM LUT SHAPER mode 3DLUT mode 3DLUT bit > depth 3DLUT size RGAM mode GAMUT adjust C11 C12 C13 > C14 C21 C22 C23 C24 C31 C32 > C33 C34 > [ 0]: 1 sRGB Bypass RAM B RAM A > 12-bit 17x17x17 RAM A Bypass 0000000000 0000000000 0000000000 > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > 0000000000 0000000000 > [ 1]: 1 sRGB Bypass RAM B RAM A > 12-bit 17x17x17 RAM A Bypass 0000000000 0000000000 0000000000 > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > 0000000000 0000000000 > [ 2]: 1 sRGB Bypass RAM B RAM A > 12-bit 17x17x17 RAM A Bypass 0000000000 0000000000 0000000000 > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > 0000000000 0000000000 > [ 3]: 1 sRGB Bypass RAM B RAM A > 12-bit 17x17x17 RAM A Bypass 0000000000 0000000000 0000000000 > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > 0000000000 0000000000 > > DPP Color Caps: input_lut_shared:0 icsc:1 dgam_ram:0 dgam_rom: > srgb:1,bt2020:1,gamma2_2:1,pq:1,hlg:1 post_csc:1 gamcor:1 > dgam_rom_for_yuv:0 3d_lut:1 blnd_lut:1 oscs:0 > > MPCC: OPP DPP MPCCBOT MODE ALPHA_MODE PREMULT OVERLAP_ONLY IDLE > SHAPER mode 3DLUT mode 3DLUT bit-depth 3DLUT size OGAM mode OGAM LUT > GAMUT adjust C11 C12 C13 C14 C21 C22 > C23 C24 C31 C32 C33 C34 > [ 0]: 0h 0h 2h 3 0 1 0 0 > Bypass Bypass 12-bit 17x17x17 RAM A Bypass > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > [ 1]: 0h 1h fh 2 2 0 0 0 > Bypass Bypass 12-bit 17x17x17 Bypass A Bypass > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > [ 2]: 0h 2h 3h 3 0 1 0 0 > Bypass Bypass 12-bit 17x17x17 Bypass A Bypass > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > [ 3]: 0h 3h 1h 3 2 0 0 0 > Bypass Bypass 12-bit 17x17x17 Bypass A Bypass > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > > MPC Color Caps: gamut_remap:1, 3dlut:2, ogam_ram:1, ocsc:1 > > > DCN301 - After (KDE/X11): > ------------------------ > > DPP: DGAM ROM DGAM ROM type DGAM LUT SHAPER mode 3DLUT mode 3DLUT bit > depth 3DLUT size RGAM mode GAMUT adjust C11 C12 C13 > C14 C21 C22 C23 C24 C31 C32 > C33 C34 > [ 0]: 0 sRGB Bypass Bypass Bypass > 12-bit 9x9x9 Bypass Bypass 0000000000 0000000000 0000000000 > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > 0000000000 0000000000 > [ 3]: 0 sRGB Bypass Bypass Bypass > 12-bit 9x9x9 Bypass Bypass 0000000000 0000000000 0000000000 > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > 0000000000 0000000000 > > DPP Color Caps: input_lut_shared:0 icsc:1 dgam_ram:0 dgam_rom: > srgb:1,bt2020:1,gamma2_2:1,pq:1,hlg:1 post_csc:1 gamcor:1 > dgam_rom_for_yuv:0 3d_lut:1 blnd_lut:1 oscs:0 > > MPCC: OPP DPP MPCCBOT MODE ALPHA_MODE PREMULT OVERLAP_ONLY IDLE > SHAPER mode 3DLUT mode 3DLUT bit-depth 3DLUT size OGAM mode OGAM LUT > GAMUT adjust C11 C12 C13 C14 C21 C22 > C23 C24 C31 C32 C33 C34 > [ 0]: 0h 0h 3h 3 2 0 0 0 > Bypass Bypass 12-bit 17x17x17 RAM A SW > 4294967296 0000000000 0000000000 0000000000 0000000000 4294967296 > 0000000000 0000000000 0000000000 0000000000 4294967296 0000000000 > [ 3]: 0h 3h fh 2 2 0 0 0 > Bypass Bypass 12-bit 17x17x17 Bypass A Bypass > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 > > MPC Color Caps: gamut_remap:1, 3dlut:2, ogam_ram:1, ocsc:1 > > =============== > > DCN21 - Before: > --------------- > > DPP: IGAM format IGAM mode DGAM mode RGAM mode GAMUT mode C11 C12 > C13 C14 C21 C22 C23 C24 C31 C32 C33 C34 > [ 0]: 0h BypassFixed Bypass Bypass 1 > 00002000h 00000000h 20000000h 00000000h 00000000h 00002000h > [ 3]: 0h BypassFixed Bypass Bypass 1 > 00002000h 00000000h 20000000h 00000000h 00000000h 00002000h > > MPCC: OPP DPP MPCCBOT MODE ALPHA_MODE PREMULT OVERLAP_ONLY IDLE > [ 0]: 0h 0h 3h 3 2 0 0 0 > [ 3]: 0h 3h fh 2 2 0 0 0 > > > > DCN21 - After (GNOME): > ---------------------- > > DPP: DGAM mode SHAPER mode 3DLUT mode 3DLUT bit depth 3DLUT size RGAM > mode GAMUT adjust C11 C12 C13 C14 C21 > C22 C23 C24 C31 C32 C33 C34 > [ 0]: Bypass Bypass Bypass 12-bit 9x9x9 > Bypass SW 4294967296 0000000000 0000000000 0000000000 0000000000 > 4294967296 0000000000 0000000000 0000000000 0000000000 4294967296 0000000000 > [ 3]: Bypass Bypass Bypass 12-bit 9x9x9 > Bypass SW 4294967296 0000000000 0000000000 0000000000 0000000000 > 4294967296 0000000000 0000000000 0000000000 0000000000 4294967296 0000000000 > > DPP Color Caps: input_lut_shared:0 icsc:1 dgam_ram:1 dgam_rom: > srgb:1,bt2020:1,gamma2_2:0,pq:0,hlg:0 post_csc:0 gamcor:0 > dgam_rom_for_yuv:1 3d_lut:1 blnd_lut:1 oscs:0 > > MPCC: OPP DPP MPCCBOT MODE ALPHA_MODE PREMULT OVERLAP_ONLY IDLE OGAM > mode > [ 0]: 0h 0h 3h 3 2 0 0 0 > RAM A > [ 3]: 0h 3h fh 2 2 0 0 0 > Bypass > > MPC Color Caps: gamut_remap:0, 3dlut:0, ogam_ram:1, ocsc:1 > > === > > Let me know your thoughts. > Thanks for improving this. The series is Reviewed-by: Harry Wentland <harry.wentl...@amd.com> I'll merge it over the next day or two (depending on how well our CI cooperates). Harry > Melissa > > [1] https://lore.kernel.org/amd-gfx/20230913164329.123687-1-m...@igalia.com/ > [2] https://lore.kernel.org/amd-gfx/20231116195812.906115-1-m...@igalia.com/ > [3] > https://github.com/ValveSoftware/gamescope/blob/master/src/docs/Steam%20Deck%20Display%20Pipeline.png > > > Harry Wentland (1): > drm/amd/display: Add dpp_get_gamut_remap functions > > Melissa Wen (8): > drm/amd/display: decouple color state from hw state log > drm/amd/display: read gamut remap matrix in fixed-point 31.32 format > drm/amd/display: fill up DCN3 DPP color state > drm/amd/display: add get_gamut_remap helper for MPC3 > drm/amd/display: create DCN3-specific log for MPC state > drm/amd/display: hook up DCN30 color blocks data to DTN log > drm/amd/display: add DPP and MPC color caps to DTN log > drm/amd/display: hook up DCN20 color blocks data to DTN log > > .../drm/amd/display/dc/basics/conversion.c | 34 ++++ > .../drm/amd/display/dc/basics/conversion.h | 4 + > .../amd/display/dc/dcn10/dcn10_cm_common.c | 20 +++ > .../amd/display/dc/dcn10/dcn10_cm_common.h | 4 +- > .../gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c | 3 +- > .../gpu/drm/amd/display/dc/dcn10/dcn10_dpp.h | 3 + > .../drm/amd/display/dc/dcn10/dcn10_dpp_cm.c | 70 +++++++- > .../gpu/drm/amd/display/dc/dcn20/dcn20_dpp.c | 31 ++-- > .../gpu/drm/amd/display/dc/dcn20/dcn20_dpp.h | 3 + > .../drm/amd/display/dc/dcn20/dcn20_dpp_cm.c | 55 +++++++ > .../gpu/drm/amd/display/dc/dcn20/dcn20_init.c | 1 + > .../gpu/drm/amd/display/dc/dcn20/dcn20_mpc.c | 24 ++- > .../drm/amd/display/dc/dcn201/dcn201_dpp.c | 1 + > .../gpu/drm/amd/display/dc/dcn21/dcn21_init.c | 1 + > .../gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c | 38 ++++- > .../gpu/drm/amd/display/dc/dcn30/dcn30_dpp.h | 2 + > .../drm/amd/display/dc/dcn30/dcn30_dpp_cm.c | 54 +++++++ > .../gpu/drm/amd/display/dc/dcn30/dcn30_init.c | 1 + > .../gpu/drm/amd/display/dc/dcn30/dcn30_mpc.c | 106 ++++++++++++- > .../gpu/drm/amd/display/dc/dcn30/dcn30_mpc.h | 4 + > .../drm/amd/display/dc/dcn301/dcn301_init.c | 1 + > .../gpu/drm/amd/display/dc/dcn31/dcn31_init.c | 1 + > .../drm/amd/display/dc/dcn314/dcn314_init.c | 1 + > .../gpu/drm/amd/display/dc/dcn32/dcn32_dpp.c | 1 + > .../amd/display/dc/hwss/dcn10/dcn10_hwseq.c | 90 ++++++++--- > .../amd/display/dc/hwss/dcn20/dcn20_hwseq.c | 106 +++++++++++++ > .../amd/display/dc/hwss/dcn20/dcn20_hwseq.h | 2 + > .../amd/display/dc/hwss/dcn30/dcn30_hwseq.c | 149 ++++++++++++++++++ > .../amd/display/dc/hwss/dcn30/dcn30_hwseq.h | 3 + > .../drm/amd/display/dc/hwss/hw_sequencer.h | 2 + > drivers/gpu/drm/amd/display/dc/inc/hw/dpp.h | 14 ++ > drivers/gpu/drm/amd/display/dc/inc/hw/mpc.h | 7 + > 32 files changed, 795 insertions(+), 41 deletions(-) >