On 07/09/2018 06:24 PM, Erik Skultety wrote:
Since 2.10 QEMU supports a new display type egl-headless which uses
the
drm nodes for OpenGL rendering copying back the rendered bits back to
QEMU into a dma-buf which can be accessed by standard "display" apps
like VNC or SPICE. Although this display type can be used on its own,
for any practical use case it makes sense to pair it with either VNC or
SPICE display. The clear benefit of this display is that VNC gains
OpenGL support, which it natively doesn't have, and SPICE gains remote
OpenGL support (native OpenGL support only works locally through a UNIX
socket, i.e. listen type=socket/none)
Signed-off-by: Erik Skultety <eskultet(a)redhat.com>
---
docs/formatdomain.html.in | 33 ++++++++++++-
docs/schemas/domaincommon.rng | 3 ++
src/conf/domain_conf.c | 6 ++-
src/conf/domain_conf.h | 1 +
src/libxl/libxl_conf.c | 1 +
src/qemu/qemu_command.c | 35 +++++++++++++-
src/qemu/qemu_domain.c | 54 ++++++++++++++++++++++
src/qemu/qemu_driver.c | 2 +
src/qemu/qemu_hotplug.c | 1 +
src/qemu/qemu_process.c | 4 ++
src/vmx/vmx.c | 1 +
tests/domaincapsschemadata/full.xml | 1 +
tests/qemuxml2argvdata/graphics-egl-headless.args | 26 +++++++++++
tests/qemuxml2argvdata/graphics-egl-headless.xml | 31 +++++++++++++
.../qemuxml2argvdata/graphics-sdl-egl-headless.xml | 35 ++++++++++++++
.../graphics-spice-egl-headless.args | 31 +++++++++++++
.../graphics-spice-egl-headless.xml | 36 +++++++++++++++
.../graphics-spice-invalid-egl-headless.xml | 37 +++++++++++++++
.../graphics-vnc-egl-headless.args | 28 +++++++++++
.../qemuxml2argvdata/graphics-vnc-egl-headless.xml | 37 +++++++++++++++
tests/qemuxml2argvtest.c | 17 +++++++
.../graphics-spice-egl-headless.xml | 44 ++++++++++++++++++
.../graphics-vnc-egl-headless.xml | 42 +++++++++++++++++
tests/qemuxml2xmltest.c | 2 +
24 files changed, 504 insertions(+), 4 deletions(-)
create mode 100644 tests/qemuxml2argvdata/graphics-egl-headless.args
create mode 100644 tests/qemuxml2argvdata/graphics-egl-headless.xml
create mode 100644 tests/qemuxml2argvdata/graphics-sdl-egl-headless.xml
create mode 100644 tests/qemuxml2argvdata/graphics-spice-egl-headless.args
create mode 100644 tests/qemuxml2argvdata/graphics-spice-egl-headless.xml
create mode 100644 tests/qemuxml2argvdata/graphics-spice-invalid-egl-headless.xml
create mode 100644 tests/qemuxml2argvdata/graphics-vnc-egl-headless.args
create mode 100644 tests/qemuxml2argvdata/graphics-vnc-egl-headless.xml
create mode 100644 tests/qemuxml2xmloutdata/graphics-spice-egl-headless.xml
create mode 100644 tests/qemuxml2xmloutdata/graphics-vnc-egl-headless.xml
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index b10bbc40a4..f488050bf8 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -3695,6 +3695,57 @@ qemuDomainDefPostParseBasic(virDomainDefPtr def,
}
+static int
+qemuDomainDefGraphicsPostParse(virDomainDefPtr def)
+{
+ virDomainGraphicsDefPtr graphics = NULL;
+ bool have_egl_headless = false;
+ size_t i;
+
+ /* are we running with egl-headless? */
+ for (i = 0; i < def->ngraphics; i++) {
+ graphics = def->graphics[i];
+
+ if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS) {
+ have_egl_headless = true;
+ break;
+ }
+ }
+
+ /* Only VNC and SPICE can be paired with egl-headless, the other types
+ * either don't make sense to pair with egl-headless or aren't even
+ * supported by QEMU.
+ */
+ if (have_egl_headless) {
+ for (i = 0; i < def->ngraphics; i++) {
+ graphics = def->graphics[i];
+
+ if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS &&
+ graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
+ graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("graphics type 'egl-headless' is only
supported "
+ "with one of: 'vnc', 'spice'
graphics types"));
+ return -1;
+ }
+
+ /* '-spice gl=on' and '-display egl-headless' are mutually
+ * exclusive
+ */
+ if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&
+ graphics->data.spice.gl == VIR_TRISTATE_BOOL_YES) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("multiple OpenGL displays are not supported
"
+ "by QEMU"));
+ return -1;
+ }
+ }
+ }
+
+ return 0;
+}
+
So this ^^ is actually a validate callback. I think it should be named
as such and thus called from elsewhere.
The rest looks okay.
Michal