diff mbox series

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

Message ID 20230420232228.273340-1-mcanal@igalia.com (mailing list archive)
State New, archived
Headers show
Series [v2,1/2] drm/vkms: allow full alpha blending on all planes | expand

Commit Message

Maíra Canal April 20, 2023, 11:22 p.m. UTC
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@igalia.com>
Reviewed-by: Melissa Wen <mwen@igalia.com>
---

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(-)

Comments

Arthur Grillo April 21, 2023, 11:36 a.m. UTC | #1
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@igalia.com>
> Reviewed-by: Melissa Wen <mwen@igalia.com>
> ---

On both:

Reviewed-by: Arthur Grillo <arthurgrillo@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;
>  }
Maíra Canal April 26, 2023, 8:55 p.m. UTC | #2
On 4/20/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@igalia.com>
> Reviewed-by: Melissa Wen <mwen@igalia.com>

Applied to drm/drm-misc (drm-misc-next).

Best Regards,
- Maíra Canal

> ---
> 
> 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;
>   }
diff mbox series

Patch

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;
 }