[PATCH v2 1/2] drm/vkms: allow full alpha blending on all planes

Arthur Grillo Queiroz Cabral arthurgrillo at riseup.net
Fri Apr 21 11:36:07 UTC 2023



On 20/04/23 20:22, Maíra Canal wrote:
> Before commit bc0d7fdefec6 ("drm: vkms: Supports to the case where
> primary plane doesn't match the CRTC"), the composition was executed on
> top of the primary plane. Therefore, the primary plane was not able to
> support the alpha channel. After commit bc0d7fdefec6, this is possible,
> as the composition is now executed on top of the CRTC.
> 
> So, allow all planes to support the alpha channel, making full alpha
> blending possible in vkms.
> 
> Signed-off-by: Maíra Canal <mcanal at igalia.com>
> Reviewed-by: Melissa Wen <mwen at igalia.com>
> ---

On both:

Reviewed-by: Arthur Grillo <arthurgrillo at riseup.net>

Best Regards,
~Arthur Grillo

> 
> v1 -> v2: https://lore.kernel.org/dri-devel/20230414190913.106633-1-mcanal@igalia.com/T/
> 
> * s/vkms_primary_helper_funcs/vkms_plane_helper_funcs (Melissa Wen)
> * Add Melissa's Reviewed-by
> 
> ---
>  drivers/gpu/drm/vkms/vkms_plane.c | 34 +++----------------------------
>  1 file changed, 3 insertions(+), 31 deletions(-)
> 
> diff --git a/drivers/gpu/drm/vkms/vkms_plane.c b/drivers/gpu/drm/vkms/vkms_plane.c
> index c41cec7dcb70..c2888e5266bc 100644
> --- a/drivers/gpu/drm/vkms/vkms_plane.c
> +++ b/drivers/gpu/drm/vkms/vkms_plane.c
> @@ -12,12 +12,6 @@
>  #include "vkms_formats.h"
>  
>  static const u32 vkms_formats[] = {
> -	DRM_FORMAT_XRGB8888,
> -	DRM_FORMAT_XRGB16161616,
> -	DRM_FORMAT_RGB565
> -};
> -
> -static const u32 vkms_plane_formats[] = {
>  	DRM_FORMAT_ARGB8888,
>  	DRM_FORMAT_XRGB8888,
>  	DRM_FORMAT_XRGB16161616,
> @@ -185,7 +179,7 @@ static void vkms_cleanup_fb(struct drm_plane *plane,
>  	drm_gem_fb_vunmap(fb, shadow_plane_state->map);
>  }
>  
> -static const struct drm_plane_helper_funcs vkms_primary_helper_funcs = {
> +static const struct drm_plane_helper_funcs vkms_plane_helper_funcs = {
>  	.atomic_update		= vkms_plane_atomic_update,
>  	.atomic_check		= vkms_plane_atomic_check,
>  	.prepare_fb		= vkms_prepare_fb,
> @@ -196,38 +190,16 @@ struct vkms_plane *vkms_plane_init(struct vkms_device *vkmsdev,
>  				   enum drm_plane_type type, int index)
>  {
>  	struct drm_device *dev = &vkmsdev->drm;
> -	const struct drm_plane_helper_funcs *funcs;
>  	struct vkms_plane *plane;
> -	const u32 *formats;
> -	int nformats;
> -
> -	switch (type) {
> -	case DRM_PLANE_TYPE_PRIMARY:
> -		formats = vkms_formats;
> -		nformats = ARRAY_SIZE(vkms_formats);
> -		funcs = &vkms_primary_helper_funcs;
> -		break;
> -	case DRM_PLANE_TYPE_CURSOR:
> -	case DRM_PLANE_TYPE_OVERLAY:
> -		formats = vkms_plane_formats;
> -		nformats = ARRAY_SIZE(vkms_plane_formats);
> -		funcs = &vkms_primary_helper_funcs;
> -		break;
> -	default:
> -		formats = vkms_formats;
> -		nformats = ARRAY_SIZE(vkms_formats);
> -		funcs = &vkms_primary_helper_funcs;
> -		break;
> -	}
>  
>  	plane = drmm_universal_plane_alloc(dev, struct vkms_plane, base, 1 << index,
>  					   &vkms_plane_funcs,
> -					   formats, nformats,
> +					   vkms_formats, ARRAY_SIZE(vkms_formats),
>  					   NULL, type, NULL);
>  	if (IS_ERR(plane))
>  		return plane;
>  
> -	drm_plane_helper_add(&plane->base, funcs);
> +	drm_plane_helper_add(&plane->base, &vkms_plane_helper_funcs);
>  
>  	return plane;
>  }


More information about the dri-devel mailing list