On 09/25, Harry Wentland wrote: > > > On 2023-09-13 12:43, Melissa Wen wrote: > > Hi, > > > > This is an update of previous RFC [0] improving the data collection of > > Gamma Correction and Blend Gamma color blocks. > > > > As I mentioned in the last version, I'm updating the color state part of > > DTN log to match DCN3.0 HW better. Currently, the DTN log considers the > > DCN10 color pipeline, which is useless for DCN3.0 because of all the > > differences in color caps between DCN versions. In addition to new color > > blocks and caps, some semantic differences made the DCN10 output not fit > > DCN30. > > > > In this RFC, the first patch adds new color state elements to DPP and > > implements the reading of registers according to HW blocks. Similarly to > > MPC, the second patch also creates a DCN3-specific function to read the > > MPC state and add the MPC color state logging to it. With DPP and MPC > > color-register reading, I detach DCN10 color state logging from the HW > > log and create a `.log_color_state` hook for logging color state > > according to HW color blocks with DCN30 as the first use case. Finally, > > the last patch adds DPP and MPC color caps output to facilitate > > understanding of the color state log. > > > > This version works well with the driver-specific color properties[1] and > > steamdeck/gamescope[2] together, where we can see color state changing > > from default values. > > > > Here is a before vs. after example: > > > > Without this series: > > =================== > > 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 > > [ 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 3h 3 2 0 0 0 > > [ 3]: 0h 3h fh 2 2 0 0 0 > > > > With this series (Steamdeck/Gamescope): > > ====================================== > > > > DPP: DGAM ROM DGAM ROM type DGAM LUT SHAPER mode 3DLUT mode 3DLUT bit > > depth 3DLUT size RGAM mode GAMUT mode C11 C12 C13 C14 C21 C22 C23 > > C24 C31 C32 C33 C34 > > [ 0]: 1 sRGB Bypass RAM A RAM B > > 12-bit 17x17x17 RAM A 0 00000000h 00000000h 00000000h > > 00000000h 00000000h 00000000h > > [ 1]: 1 sRGB Bypass RAM B RAM A > > 12-bit 17x17x17 RAM A 0 00000000h 00000000h 00000000h > > 00000000h 00000000h 00000000h > > [ 2]: 1 sRGB Bypass RAM B RAM A > > 12-bit 17x17x17 RAM A 0 00000000h 00000000h 00000000h > > 00000000h 00000000h 00000000h > > [ 3]: 1 sRGB Bypass RAM A RAM B > > 12-bit 17x17x17 RAM A 0 00000000h 00000000h 00000000h > > 00000000h 00000000h 00000000h > > > > 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 mode C11 C12 C33 C34 > > [ 0]: 0h 0h 2h 3 0 1 0 0 > > Bypass Bypass 12-bit 17x17x17 RAM A > > 0 00000000h 00000000h > > [ 1]: 0h 1h fh 2 2 0 0 0 > > Bypass Bypass 12-bit 17x17x17 Bypass A > > 0 00000000h 00000000h > > [ 2]: 0h 2h 3h 3 0 1 0 0 > > Bypass Bypass 12-bit 17x17x17 Bypass A > > 0 00000000h 00000000h > > [ 3]: 0h 3h 1h 3 2 0 0 0 > > Bypass Bypass 12-bit 17x17x17 Bypass A > > 0 00000000h 00000000h > > > > MPC Color Caps: gamut_remap:1, 3dlut:2, ogam_ram:1, ocsc:1 > > > > With this series (Steamdeck/KDE): > > ================================ > > > > DPP: DGAM ROM DGAM ROM type DGAM LUT SHAPER mode 3DLUT mode 3DLUT bit > > depth 3DLUT size RGAM mode GAMUT mode C11 C12 C13 C14 C21 C22 C23 > > C24 C31 C32 C33 C34 > > [ 0]: 0 sRGB Bypass Bypass Bypass > > 12-bit 9x9x9 Bypass 0 00000000h 00000000h 00000000h > > 00000000h 00000000h 00000000h > > [ 3]: 0 sRGB Bypass Bypass Bypass > > 12-bit 9x9x9 Bypass 0 00000000h 00000000h 00000000h > > 00000000h 00000000h 00000000h > > > > 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 mode C11 C12 C33 C34 > > [ 0]: 0h 0h 3h 3 2 0 0 0 > > Bypass Bypass 12-bit 17x17x17 RAM A > > 1 00002000h 00002000h > > [ 3]: 0h 3h fh 2 2 0 0 0 > > Bypass Bypass 12-bit 17x17x17 Bypass A > > 0 00000000h 00000000h > > > > MPC Color Caps: gamut_remap:1, 3dlut:2, ogam_ram:1, ocsc:1 > > > > Before extending it to other DCN families, I have some doubts. > > - Does this approach of the `.log_color_state` hook make sense for you? > > Yes > > > - Is there any conflict between logging color state by HW version and > > DTN log usage? > > - Is there a template/style for DTN log output that I should follow or > > information that I should include? > > > > At this point it looks like we only use the DTN log for debug purposes, > so no conflict and no need to follow a specific format, as long as the > output is human-parseable (which yours is). > > At one point in the past these were used by automated tests on other > platforms but that's no longer the case.
Great! I'll prepare a next version from your suggestions and also addressing Siqueira's review. Thanks for the guidance. Melissa > > Harry > > > Let me know your thoughts. > > > > Thanks, > > > > Melissa > > > > [0] https://lore.kernel.org/amd-gfx/20230905142545.451153-1-m...@igalia.com/ > > [1] https://lore.kernel.org/amd-gfx/20230810160314.48225-1-m...@igalia.com/ > > [2] https://github.com/ValveSoftware/gamescope > > > > Melissa Wen (5): > > drm/amd/display: detach color state from hw state logging > > drm/amd/display: fill up DCN3 DPP color state > > drm/amd/display: create DCN3-specific log for MPC state > > drm/amd/display: hook DCN30 color state logging to DTN log > > drm/amd/display: add DPP and MPC color caps to DTN log > > > > .../amd/display/dc/dcn10/dcn10_hw_sequencer.c | 53 +++++++-- > > .../gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c | 45 ++++++- > > .../drm/amd/display/dc/dcn30/dcn30_hwseq.c | 111 ++++++++++++++++++ > > .../drm/amd/display/dc/dcn30/dcn30_hwseq.h | 3 + > > .../gpu/drm/amd/display/dc/dcn30/dcn30_init.c | 1 + > > .../gpu/drm/amd/display/dc/dcn30/dcn30_mpc.c | 55 ++++++++- > > .../drm/amd/display/dc/dcn301/dcn301_init.c | 1 + > > drivers/gpu/drm/amd/display/dc/inc/hw/dpp.h | 8 ++ > > drivers/gpu/drm/amd/display/dc/inc/hw/mpc.h | 13 ++ > > .../gpu/drm/amd/display/dc/inc/hw_sequencer.h | 2 + > > 10 files changed, 280 insertions(+), 12 deletions(-) > > >