Re: [PATCH v3 2/3] drm/amd/display: fix missing blend-mode-prop warning for DCN
Alex Hung <[email protected]>
| Newsgroups | gmane.comp.freedesktop.amd-gfx,gmane.comp.video.dri.devel |
|---|---|
| Message-ID | <[email protected]> |
I can confirm IGT's "kms_plane_alpha_blend --run-subtest alpha-basic" no
longer fails with v3.
On 8/13/26 08:30, Melissa Wen wrote:
> validate_blend_mode_for_alpha_formats() warns when a plane supports
> formats with alpha but doesn't expose the blend mode property. Fix this
> by adding the same overlay plane blend modes to primary plane, since
> they are all universal planes in DCN-generation. Cursor planes support
> ARGB8888 format and CURSOR_MODE_COLOR_PRE_MULTIPLIED_ALPHA is set by
> default (other color formats are not implemented), so only expose
> support to PREMULTI, which is the default blend mode on DRM.
>
> Fixes: 860e748bddcc ("drm: ensure blend mode supported if pixel format with alpha exposed")
> Reviewed-by: Leandro Ribeiro <leandro.ribeiro-ZGY8ohtN/[email protected]>
> Signed-off-by: Melissa Wen <[email protected]>
>
> ---
> v3:
> - keep primary planes w/o alpha property
> - re-order if-conditions for readability
> ---
> .../amd/display/amdgpu_dm/amdgpu_dm_plane.c | 21 ++++++++++++++++---
> 1 file changed, 18 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> index 1b564cfe2120..ab9bbe8ca333 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> @@ -1923,16 +1923,31 @@ int amdgpu_dm_plane_init(struct amdgpu_display_manager *dm,
> if (res)
> return res;
>
> - if (plane->type == DRM_PLANE_TYPE_OVERLAY &&
> - plane_cap && plane_cap->per_pixel_alpha) {
> + /* TODO: Check which blend modes are supported in DCE-generation
> + * planes, i.e. DC_PLANE_TYPE_DCE_RGB/UNDERLAY and expose blend mode
> + * property accordingly.
> + */
> + if ((plane->type == DRM_PLANE_TYPE_OVERLAY ||
> + plane->type == DRM_PLANE_TYPE_PRIMARY) &&
> + plane_cap && plane_cap->per_pixel_alpha &&
> + plane_cap->type == DC_PLANE_TYPE_DCN_UNIVERSAL) {
> unsigned int blend_caps = BIT(DRM_MODE_BLEND_PIXEL_NONE) |
> BIT(DRM_MODE_BLEND_PREMULTI) |
> BIT(DRM_MODE_BLEND_COVERAGE);
>
> - drm_plane_create_alpha_property(plane);
> drm_plane_create_blend_mode_property(plane, blend_caps);
> +
> + if (plane->type == DRM_PLANE_TYPE_OVERLAY)
> + drm_plane_create_alpha_property(plane);
> }
>
> + /* Cursor color format is set to CURSOR_MODE_COLOR_PRE_MULTIPLIED_ALPHA
> + * by default, so only advertise DRM_MODE_BLEND_PREMULTI blend mode for
> + * this type of plane.
> + */
> + if (plane->type == DRM_PLANE_TYPE_CURSOR)
> + drm_plane_create_blend_mode_property(plane, BIT(DRM_MODE_BLEND_PREMULTI));
> +
> if (plane->type == DRM_PLANE_TYPE_PRIMARY) {
> /*
> * Allow OVERLAY planes to be used as underlays by assigning an