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