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(-)
> 

Reply via email to