Re: [PATCH v4 3/3] drm/amd/display: advertise PIXEL_NONE and PREMULTI blend mode for DCE
Alex Hung <[email protected]>
| Newsgroups | org.freedesktop.lists.amd-gfx,org.freedesktop.lists.dri-devel |
|---|---|
| Message-ID | <[email protected]> |
Reviewed-by: Alex Hung <[email protected]> On 8/26/26 04: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 > 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);