Message ID | 20240322052829.9893-8-shawn.sung@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Support IGT in display driver | expand |
Hi, Shawn: On Fri, 2024-03-22 at 13:28 +0800, Shawn Sung wrote: > From: Hsiao Chien Sung <shawn.sung@mediatek.com> > > Support "Pre-multiplied" and "None" blend mode on MediaTek's chips by > adding correct blend mode property when the planes init. > Before this patch, only the "Coverage" mode (default) is supported. > > For more information, there are three pixel blend modes in DRM > driver: > "None", "Pre-multiplied", and "Coverage". > > To understand the difference between these modes, let's take a look > at > the following two approaches to do alpha blending: > > 1. Straight: > dst.RGB = src.RGB * src.A + dst.RGB * (1 - src.A) > This is straightforward and easy to understand, when the source layer > is > compositing with the destination layer, it's alpha will affect the > result. This is also known as "post-multiplied", or "Coverage" mode. > > 2. Pre-multiplied: > dst.RGB = src.RGB + dst.RGB * (1 - src.A) > Since the source RGB have already multiplied its alpha, only > destination > RGB need to multiply it. This is the "Pre-multiplied" mode in DRM. > > For the "None" blend mode in DRM, it means the pixel alpha is ignored > when compositing the layers, only the constant alpha for the > composited > layer will take effects. > > Reviewed-by: AngeloGioacchino Del Regno < > angelogioacchino.delregno@collabora.com> > Reviewed-by: CK Hu <ck.hu@mediatek.com> > Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com> > --- > drivers/gpu/drm/mediatek/mtk_plane.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/drivers/gpu/drm/mediatek/mtk_plane.c > b/drivers/gpu/drm/mediatek/mtk_plane.c > index 1723d4333f371..5bf757a3ef202 100644 > --- a/drivers/gpu/drm/mediatek/mtk_plane.c > +++ b/drivers/gpu/drm/mediatek/mtk_plane.c > @@ -346,6 +346,17 @@ int mtk_plane_init(struct drm_device *dev, > struct drm_plane *plane, > DRM_INFO("Create rotation property failed\n"); > } > > + err = drm_plane_create_alpha_property(plane); > + if (err) > + DRM_ERROR("failed to create property: alpha\n"); > + > + err = drm_plane_create_blend_mode_property(plane, > + BIT(DRM_MODE_BLEND_P > REMULTI) | > + BIT(DRM_MODE_BLEND_C > OVERAGE) | > + BIT(DRM_MODE_BLEND_P > IXEL_NONE)); After all sub driver support these function, then create blend property. So move this patch after all sub driver support these blend mode. Regards, CK > + if (err) > + DRM_ERROR("failed to create property: blend_mode\n"); > + > drm_plane_helper_add(plane, &mtk_plane_helper_funcs); > > return 0;
Hi CK, On Fri, 2024-03-22 at 09:37 +0000, CK Hu (胡俊光) wrote: > > diff --git a/drivers/gpu/drm/mediatek/mtk_plane.c > > b/drivers/gpu/drm/mediatek/mtk_plane.c > > index 1723d4333f371..5bf757a3ef202 100644 > > --- a/drivers/gpu/drm/mediatek/mtk_plane.c > > +++ b/drivers/gpu/drm/mediatek/mtk_plane.c > > @@ -346,6 +346,17 @@ int mtk_plane_init(struct drm_device *dev, > > struct drm_plane *plane, > > DRM_INFO("Create rotation property failed\n"); > > } > > > > + err = drm_plane_create_alpha_property(plane); > > + if (err) > > + DRM_ERROR("failed to create property: alpha\n"); > > + > > + err = drm_plane_create_blend_mode_property(plane, > > + BIT(DRM_MODE_BLEND_P > > REMULTI) | > > + BIT(DRM_MODE_BLEND_C > > OVERAGE) | > > + BIT(DRM_MODE_BLEND_P > > IXEL_NONE)); > > After all sub driver support these function, then create blend > property. So move this patch after all sub driver support these blend > mode. > Got it. Will rearrange the patches in the next version Thanks, Shawn
diff --git a/drivers/gpu/drm/mediatek/mtk_plane.c b/drivers/gpu/drm/mediatek/mtk_plane.c index 1723d4333f371..5bf757a3ef202 100644 --- a/drivers/gpu/drm/mediatek/mtk_plane.c +++ b/drivers/gpu/drm/mediatek/mtk_plane.c @@ -346,6 +346,17 @@ int mtk_plane_init(struct drm_device *dev, struct drm_plane *plane, DRM_INFO("Create rotation property failed\n"); } + err = drm_plane_create_alpha_property(plane); + if (err) + DRM_ERROR("failed to create property: alpha\n"); + + err = drm_plane_create_blend_mode_property(plane, + BIT(DRM_MODE_BLEND_PREMULTI) | + BIT(DRM_MODE_BLEND_COVERAGE) | + BIT(DRM_MODE_BLEND_PIXEL_NONE)); + if (err) + DRM_ERROR("failed to create property: blend_mode\n"); + drm_plane_helper_add(plane, &mtk_plane_helper_funcs); return 0;