Re: [PATCH v4 08/11] drm/amd/display: Use GAMCOR for first TF if YUV conversion is needed
Robert Mader <[email protected]> Tue, 28 Jul 2026 18:01:39 +0200
| Newsgroups | org.freedesktop.lists.amd-gfx,org.freedesktop.lists.dri-devel |
|---|---|
| Message-ID | <[email protected]> |
Hi, as per my previous comment: Tested-by: Robert Mader <[email protected]> On 22.07.26 15:46, Harry Wentland wrote: > For subsampled formats we need to use GAMCOR instead of > the DEGAM block. The color module can create a LUT for > that if we set map_user_ramp to true. So do that when > we have subsampled formats. > > Assisted-by: Claude:claude-sonnet-4.5 > Signed-off-by: Harry Wentland <[email protected]> > --- > .../drm/amd/display/amdgpu_dm/amdgpu_dm_color.c | 17 ++++++++++++++++- > 1 file changed, 16 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c > index 62791077ceef..8913bc9f0f06 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c > @@ -1524,6 +1524,8 @@ __set_colorop_in_tf_1d_curve(struct dc_plane_state *dc_plane_state, > struct dc_transfer_func *tf = &dc_plane_state->in_transfer_func; > struct drm_colorop *colorop = colorop_state->colorop; > struct drm_device *drm = colorop->dev; > + struct dc_color_caps *color_caps = NULL; > + bool is_subsampled_format; > > if (colorop->type != DRM_COLOROP_1D_CURVE) > return -EINVAL; > @@ -1537,10 +1539,23 @@ __set_colorop_in_tf_1d_curve(struct dc_plane_state *dc_plane_state, > } > > drm_dbg(drm, "Degamma colorop with ID: %d\n", colorop->base.id); > - > tf->type = TF_TYPE_PREDEFINED; > + > + /* Check if format requires post-scale color processing (subsampled formats) */ > + is_subsampled_format = (dc_plane_state->format >= SURFACE_PIXEL_FORMAT_VIDEO_BEGIN && > + dc_plane_state->format < SURFACE_PIXEL_FORMAT_SUBSAMPLE_END); > + > tf->tf = amdgpu_colorop_tf_to_dc_tf(colorop_state->curve_1d_type); > > + if (dc_plane_state->ctx && dc_plane_state->ctx->dc) > + color_caps = &dc_plane_state->ctx->dc->caps.color; > + > + if (!mod_color_calculate_degamma_params(color_caps, tf, NULL, > + is_subsampled_format)) { > + drm_err(drm, "Failed to calculate degamma params\n"); > + return -EINVAL; > + } > + > return 0; > } > EXPORT_IF_KUNIT(__set_colorop_in_tf_1d_curve); -- Robert Mader Consultant Software Developer Collabora Ltd. Platinum Building, St John's Innovation Park, Cambridge CB4 0DS, UK Registered in England & Wales, no. 5513718