[PATCH v2 3/3] drm: rcar-du: Add DRM_MODE_BLEND_PIXEL_NONE support
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri Aug 19 02:10:10 UTC 2022
Hello Hayama-san,
Thank you for the patch.
On Wed, Aug 10, 2022 at 05:37:11PM +0900, Takanari Hayama wrote:
> DRM_MODE_BLEND_PIXEL_NONE ignores an alpha channel.
>
> Rcar-du driver supports only 3 formats with an alpha channel
> (DRM_FORMAT_ARGB1555, DRM_FORMAT_ARGB8888 and DRM_FORMAT_ARGB4444). We
> simply override the format passed to VSP1 for blending with the pixel
> format without alpha channel.
>
> Suggested-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> Signed-off-by: Takanari Hayama <taki at igel.co.jp>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> drivers/gpu/drm/rcar-du/rcar_du_vsp.c | 20 +++++++++++++++++++-
> 1 file changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c
> index b9580fcfec7a..7cce2d414ced 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c
> @@ -151,6 +151,7 @@ static void rcar_du_vsp_plane_setup(struct rcar_du_vsp_plane *plane)
> .alpha = state->state.alpha >> 8,
> .zpos = state->state.zpos,
> };
> + u32 fourcc = state->format->fourcc;
> unsigned int i;
>
> cfg.src.left = state->state.src.x1 >> 16;
> @@ -169,7 +170,23 @@ static void rcar_du_vsp_plane_setup(struct rcar_du_vsp_plane *plane)
>
> cfg.premult = (state->state.pixel_blend_mode == DRM_MODE_BLEND_PREMULTI);
>
> - format = rcar_du_format_info(state->format->fourcc);
> + if (state->state.pixel_blend_mode == DRM_MODE_BLEND_PIXEL_NONE) {
> + switch (fourcc) {
> + case DRM_FORMAT_ARGB1555:
> + fourcc = DRM_FORMAT_XRGB1555;
> + break;
> +
> + case DRM_FORMAT_ARGB4444:
> + fourcc = DRM_FORMAT_XRGB4444;
> + break;
> +
> + case DRM_FORMAT_ARGB8888:
> + fourcc = DRM_FORMAT_XRGB8888;
> + break;
> + }
> + }
> +
> + format = rcar_du_format_info(fourcc);
> cfg.pixelformat = format->v4l2;
>
> vsp1_du_atomic_update(plane->vsp->vsp, crtc->vsp_pipe,
> @@ -447,6 +464,7 @@ int rcar_du_vsp_init(struct rcar_du_vsp *vsp, struct device_node *np,
> }
>
> drm_plane_create_blend_mode_property(&plane->plane,
> + BIT(DRM_MODE_BLEND_PIXEL_NONE) |
> BIT(DRM_MODE_BLEND_PREMULTI) |
> BIT(DRM_MODE_BLEND_COVERAGE));
>
--
Regards,
Laurent Pinchart
More information about the dri-devel
mailing list