Hans de Goede
2013-10-08 10:25:01 UTC
I realize that it may be a bit early to start this discussion,
given the somewhat preliminary state of Virgil, still I would
like to start a discussion about this now for 2 reasons:
1) I believe it would be good to start thinking about this earlier
rather then later.
2) I would like to present a general overview of a plan for this
at kvm-forum to get input on this from the wider kvm-forum community.
I've already had a quick discussion about this with Dave Airlie, and
our ideas on this aligned perfectly.
The basic idea is to use qemu's console layer (include/ui/console.h)
as an abstraction between the new virtio-vga device Dave has in mind
(which will include optional 3D rendering capability through VIRGIL),
and various display options, ie SDL, vnc and Spice.
The console layer would need some extensions for this:
1) Multi head support, a question which comes up here, is do we only
add support for multiple heads on a single card, or do we also want
to support multiple cards each driving a head here ? I myself tend
to go with the KISS solution for now and only support a single
card with multiple heads.
2) The ability for a video-card generating output to pass a dma-buf
context to the display (ui in qemu terms) to get the contents from,
rather then requiring the contents to be rendered to some memory
buffer. This way we can save the quite expensive read-back from gpu
memory of the rendered result and then copying that back to the
framebuffer of the gpu for local displays (ie gtk, SDL), we would
of course still need the read back of the rendered output for
vnc / spice.
For proper multi-head support in the ui layer for local displays,
we will need to use SDL-2, either by porting the current SDL ui code
to SDL-2, or by introducing a new SDL-2 ui component.
The changes needed to the gtk ui for multi-head support are not clear
at this moment (no-one has looked into this yet AFAIK).
Note that having multi-head support in qemu's console layer +
a multi-head capable SDL-2 ui, means that we could also use
a qxl device together with the SDL-2 ui to do multi-head
locally, which could be interesting for a variety of use-cases.