24.09.2026 17:22, Baorui.Liu пишет: > From: Sophia Gong <[email protected]> > > Advertise additional pixel formats for virtio-gpu overlay planes so a > userspace compositor can use KMS overlay composition instead of > falling back to GPU composition. > > Handle DRM_PLANE_TYPE_OVERLAY in virtio_gpu_plane_init() with a > dedicated format list, and reuse the primary plane update path for > overlay scanout. > > Signed-off-by: Sophia Gong <[email protected]> > Signed-off-by: Baorui.Liu <[email protected]> > --- > drivers/gpu/drm/virtio/virtgpu_plane.c | 26 ++++++++++++++++++++++++++ > 1 file changed, 26 insertions(+) > > diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c > b/drivers/gpu/drm/virtio/virtgpu_plane.c > index 29e4b458ae57..23ca880692f1 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_plane.c > +++ b/drivers/gpu/drm/virtio/virtgpu_plane.c > @@ -41,6 +41,21 @@ static const uint32_t virtio_gpu_cursor_formats[] = { > DRM_FORMAT_HOST_ARGB8888, > }; > > +static const uint32_t virtio_gpu_overlay_formats[] = { > + DRM_FORMAT_XRGB8888, > + DRM_FORMAT_ARGB8888, > + DRM_FORMAT_BGRX8888, > + DRM_FORMAT_BGRA8888, > + DRM_FORMAT_RGBX8888, > + DRM_FORMAT_RGBA8888, > + DRM_FORMAT_XBGR8888, > + DRM_FORMAT_ABGR8888, > + DRM_FORMAT_XRGB2101010, > + DRM_FORMAT_BGRX1010102, > + DRM_FORMAT_NV12, > + DRM_FORMAT_P010, > +}; > + > uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc) > { > uint32_t format; > @@ -572,6 +587,13 @@ static const struct drm_plane_helper_funcs > virtio_gpu_cursor_helper_funcs = { > .atomic_update = virtio_gpu_cursor_plane_update, > }; > > +static const struct drm_plane_helper_funcs virtio_gpu_overlay_helper_funcs = > { > + .prepare_fb = virtio_gpu_plane_prepare_fb, > + .cleanup_fb = virtio_gpu_plane_cleanup_fb, > + .atomic_check = virtio_gpu_plane_atomic_check, > + .atomic_update = virtio_gpu_primary_plane_update, > +}; > + > struct drm_plane *virtio_gpu_plane_init(struct virtio_gpu_device *vgdev, > enum drm_plane_type type, > int index) > @@ -586,6 +608,10 @@ struct drm_plane *virtio_gpu_plane_init(struct > virtio_gpu_device *vgdev, > formats = virtio_gpu_cursor_formats; > nformats = ARRAY_SIZE(virtio_gpu_cursor_formats); > funcs = &virtio_gpu_cursor_helper_funcs; > + } else if (type == DRM_PLANE_TYPE_OVERLAY) { > + formats = virtio_gpu_overlay_formats; > + nformats = ARRAY_SIZE(virtio_gpu_overlay_formats); > + funcs = &virtio_gpu_overlay_helper_funcs; > } else { > formats = virtio_gpu_formats; > nformats = ARRAY_SIZE(virtio_gpu_formats);
This won't work on its own without actually creating overlay planes and having host supporting overlays based on virtio-gpu specification defining how overlays are defined in protocol and work. Upstreaming such feature will require you to provide spec, full guest and host implementations of overlays. -- Best regards, Dmitry
