Re: [PATCH v4 3/3] drm/amd/display: advertise PIXEL_NONE and PREMULTI blend mode for DCE
Melissa Wen <[email protected]>
| Newsgroups | org.freedesktop.lists.amd-gfx,org.freedesktop.lists.dri-devel |
|---|---|
| Message-ID | <[email protected]> |
On 26/08/2026 12:37, Melissa Wen wrote:
> DCE can support PREMULTI and COVERAGE blend mode depending on its
> generation, however current driver implementation either doesn't expose
> more than primary and cursor plane, or doesn't program registers for any
> blend mode other than PIXEL_NONE. To fix the missing-blend-mode-prop
> warning according to current DCE plane caps, create blend mode property
> with PIXEL_NONE and PREMULTI for primary planes. As long as the
> background is black and there is no overlay plane, PIXEL_NONE and
> PREMULTI are equivalent, and PREMULTI has been the mandatory/default
> mode for years, so keep it to avoid regressions.
>
> Fixes: 860e748bddcc ("drm: ensure blend mode supported if pixel format with alpha exposed")
> Tested-by: Viktor Jägersküpper <[email protected]>
> Tested-by: Dan Wheeler <[email protected]> #v3
> Reviewed-by: Alex Hung <[email protected]> #v3
> Reviewed-by: Leandro Ribeiro <[email protected]> #v2
Hi,
Only this patch changed in this v4, and it was only tested by Viktor.
As r-b tags came from previous version, can I get an ack/r-b to this one
too?
Thanks,
Melissa
> Signed-off-by: Melissa Wen <[email protected]>
>
> ---
> v3:
> - fix indentation (Alex H)
> v4:
> - add PREMULTI to avoid regression (reported by Viktor)
> ---
> .../amd/display/amdgpu_dm/amdgpu_dm_plane.c | 24 +++++++++++++------
> 1 file changed, 17 insertions(+), 7 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 ab9bbe8ca333..402f0d333150 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,14 +1923,24 @@ int amdgpu_dm_plane_init(struct amdgpu_display_manager *dm,
> if (res)
> return res;
>
> - /* 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.
> + /* Blend mode support varies on DCE generations according to HW caps
> + * and number of planes per CRTC. However, as current driver
> + * implementation only creates one primary and one cursor plane per
> + * CRTC for DCE (overlay is only created if
> + * DC_PLANE_TYPE_DCN_UNIVERSAL), the primary plane blend mode is
> + * ignored across DCE versions. Keep PREMULTI to avoid uAPI
> + * regressions: it was the default/mandatory mode for many years and,
> + * with no overlay plane, primary composes on top of a black
> + * background, where PREMULTI and PIXEL_NONE are equivalent.
> */
> - 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) {
> + if (plane_cap && plane_cap->type != DC_PLANE_TYPE_DCN_UNIVERSAL) {
> + unsigned int blend_caps = BIT(DRM_MODE_BLEND_PIXEL_NONE) |
> + BIT(DRM_MODE_BLEND_PREMULTI);
> +
> + drm_plane_create_blend_mode_property(plane, blend_caps);
> + } else if ((plane->type == DRM_PLANE_TYPE_OVERLAY ||
> + plane->type == DRM_PLANE_TYPE_PRIMARY) &&
> + plane_cap && plane_cap->per_pixel_alpha) {
> unsigned int blend_caps = BIT(DRM_MODE_BLEND_PIXEL_NONE) |
> BIT(DRM_MODE_BLEND_PREMULTI) |
> BIT(DRM_MODE_BLEND_COVERAGE);