Message ID | 20220810083711.219642-4-taki@igel.co.jp (mailing list archive) |
---|---|
State | New |
Delegated to: | Kieran Bingham |
Headers | show |
Series | Add DRM pixel blend mode support to R-Car DU | expand |
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@ideasonboard.com> > Signed-off-by: Takanari Hayama <taki@igel.co.jp> Reviewed-by: Laurent Pinchart <laurent.pinchart@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)); >
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));
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@ideasonboard.com> Signed-off-by: Takanari Hayama <taki@igel.co.jp> --- drivers/gpu/drm/rcar-du/rcar_du_vsp.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-)