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@xxxxxxxxxx> > --- > 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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list