Ensure the driver tracks changes in any colorop property of a plane
color pipeline by using the same mechanism of CRTC color management and
update plane color blocks when any colorop property changes. It fixes an
issue observed on gamescope settings for night mode which is done via
shaper/3D-LUT updates.

Signed-off-by: Melissa Wen <[email protected]>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index dfe95c9b8746..dc3f284d0834 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -9955,7 +9955,7 @@ static void amdgpu_dm_commit_planes(struct 
drm_atomic_state *state,
                        continue;
 
                bundle->surface_updates[planes_count].surface = dc_plane;
-               if (new_pcrtc_state->color_mgmt_changed) {
+               if (new_pcrtc_state->color_mgmt_changed || 
new_plane_state->color_mgmt_changed) {
                        bundle->surface_updates[planes_count].gamma = 
&dc_plane->gamma_correction;
                        bundle->surface_updates[planes_count].in_transfer_func 
= &dc_plane->in_transfer_func;
                        
bundle->surface_updates[planes_count].gamut_remap_matrix = 
&dc_plane->gamut_remap_matrix;
@@ -11695,6 +11695,10 @@ static bool should_reset_plane(struct drm_atomic_state 
*state,
        if (new_crtc_state->color_mgmt_changed)
                return true;
 
+       /* Plane color pipeline or its colorop changes. */
+       if (new_plane_state->color_mgmt_changed)
+               return true;
+
        /*
         * On zpos change, planes need to be reordered by removing and re-adding
         * them one by one to the dc state, in order of descending zpos.
-- 
2.51.0

Reply via email to