Re: [PATCH] drm/amd/display: pull colorops into state when recreating a plane

Alex Hung <[email protected]>
Newsgroups org.freedesktop.lists.amd-gfx
Message-ID <[email protected]>
Reviewed-by: Alex Hung <[email protected]>

On 8/25/26 09:35, Harry Wentland wrote:
> [Why]
> When should_reset_plane() forces a plane's dc_plane_state to be
> recreated (e.g. on every ALLOW_MODESET commit on DCN < 3.2),
> fill_dc_plane_attributes() re-derives the plane's color pipeline from
> the DRM colorop states. The per-stage helpers look up each colorop
> with for_each_new_colorop_in_state(), which only iterates colorops
> attached to the current commit. If userspace didn't touch color in
> that commit the colorops are absent, so the fixed matrix (YUV->RGB),
> shaper, 3D LUT and regamma all silently fall back to bypass. This
> corrupts the plane's colors - e.g. an HDR P010 video losing its
> color-space conversion - until the pipeline happens to be re-committed.
> 
> [How]
> When recreating a plane that has an active color_pipeline, call
> drm_atomic_add_affected_colorops() so the plane's colorops are pulled
> into the commit and the derivation sees the current pipeline instead
> of defaulting every stage to bypass. This mirrors what the core
> already does on a modeset via drm_atomic_add_affected_planes().
> 
> Assisted-by: Copilot:claude-opus-4.8
> Signed-off-by: Harry Wentland <[email protected]>
> ---
>   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 13 +++++++++++++
>   1 file changed, 13 insertions(+)
> 
> 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 49f1a22f2888..4ee677f5b8b7 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -6337,6 +6337,19 @@ static int dm_update_plane_state(struct dc *dc,
>   		if (ret)
>   			goto out;
>   
> +		/*
> +		 * Recreating the plane re-derives its DC color pipeline from the
> +		 * colorop states in this commit. Pull the plane's colorops in so
> +		 * the derivation sees the current pipeline; otherwise every stage
> +		 * silently defaults to bypass (dropping YUV->RGB, shaper, 3D LUT
> +		 * and regamma) when userspace didn't touch color in this commit.
> +		 */
> +		if (new_plane_state->color_pipeline) {
> +			ret = drm_atomic_add_affected_colorops(state, plane);
> +			if (ret)
> +				goto out;
> +		}
> +
>   		WARN_ON(dm_new_plane_state->dc_state);
>   
>   		dc_new_plane_state = dc_create_plane_state(dc);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.