[virglrenderer-devel] coherent memory access for virgl

Gurchetan Singh gurchetansingh at chromium.org
Tue Oct 2 03:31:18 UTC 2018


On Fri, Sep 28, 2018 at 3:36 AM Gerd Hoffmann <kraxel at redhat.com> wrote:
>
>   Hi,
>
> > If virglrenderer will do the allocation, what about
> > virtio_gpu_resource_create_2d -- who calls that in guest userspace?
>
> Guest userspace can't call it explicitly.  The
> DRM_VIRTGPU_RESOURCE_CREATE ioctl will use virtio_gpu_resource_create_3d
> in case virgl is enabled and virtio_gpu_resource_create_2d otherwise.
>
> The kernel will use virtio_gpu_resource_create_2d for drm framebuffers
> (fbdev emulation and dumb drm buffers).
>
> > Should it ever be host-optimized (since we're essentially talking
> > about single-level 2D textures/render targets/scan-out buffers)?
>
> No.
>
> > > > We already need to extend the DRM_VIRTGPU_RESOURCE_INFO ioctl, since
> > > > it doesn't return the stride and doesn't work for YUV buffers (see
> > > > crrev.com/c/1208591).  Maybe we can also add a bitmask, which we can
> > > > populate with memory info (i.e, HOST_BIT | COHERENT_BIT)?
> > >
> > > Well, for userspace it can be transparent.  Userspace will just call
> > > mmap() and the kernel will sort things transparently depending on the
> > > buffer allocation (userspace knowing how buffers are allocated is
> > > probably useful nevertheless).
> > >
> > > I was thinking about the kernel / vmm interface.  The virtio-gpu kms
> > > driver certainly needs to know about the buffer allocation ...
> >
> > The KMS part will be more difficult than the EGL part.
> >
> > For example, on some ARM devices, AFBC can be only used on the (host)
> > primary KMS plane.
>
> What is AFBC?  Some drm format modifier?

Yes, it stands for ARM frame buffer compression and it's widely used
on that architecture.

>
> > If a video running in QEMU is full screen, it's advantageous to
> > allocate an AFBC buffer and then scan-it out.  But if the QEMU window
> > becomes smaller, the best option is to use a linear strided buffer and
> > schedule that as an overlay.  But the guest always thinks it's
> > fullscreen ...
>
> > How is the guest currently notified about size changes of it's drawing
> > target?
>
> virtio-gpu device sends an event.  virtio-gpu driver queries the host
> (GET_DISPLAY_INFO cmd).  virtio-gpu updates video mode list and sends
> monitor hotplug event to userspace (via udev).
>
> > Do buffers get re-allocated?
>
> That is up to userspace.  Typically the desktop (i.e. gnome shell)
> handles it.

Speaking of reallocation, the current Linux modifier API
(gbm_bo_create_with_modifiers) passes in a list of supported modifiers
for gbm to allocate from.  Assuming we do think of a way to notify the
guest about the available KMS-supported modifiers, any new allocation
ioctl will probably need to pass the modifier list to the host.



>
> cheers,
>   Gerd
>


More information about the virglrenderer-devel mailing list