On 06/27/2018 09:34 AM, Erik Skultety wrote: > VNC doesn't support OpenGL natively, but can run with non-native > egl-headless support, so enable that. > > Signed-off-by: Erik Skultety <eskultet@xxxxxxxxxx> > --- > docs/formatdomain.html.in | 6 ++++ > docs/schemas/domaincommon.rng | 7 ++++ > src/conf/domain_conf.c | 8 +++++ > src/qemu/qemu_command.c | 7 ++++ > tests/qemuxml2argvdata/graphics-vnc-gl-invalid.xml | 37 ++++++++++++++++++++++ > tests/qemuxml2argvdata/graphics-vnc-gl.args | 28 ++++++++++++++++ > tests/qemuxml2argvdata/graphics-vnc-gl.xml | 37 ++++++++++++++++++++++ > tests/qemuxml2argvtest.c | 1 + > 8 files changed, 131 insertions(+) > create mode 100644 tests/qemuxml2argvdata/graphics-vnc-gl-invalid.xml > create mode 100644 tests/qemuxml2argvdata/graphics-vnc-gl.args > create mode 100644 tests/qemuxml2argvdata/graphics-vnc-gl.xml > hmmm... I recall some discussion about egl-headless in the review of the RFC: https://www.redhat.com/archives/libvir-list/2018-June/msg00461.html So, what's the point? Well I was going to ask why no capability for egl-headless, but the above link (and a couple followups) discusses the issue. Anyway, I think either a commit log message or a comment in the code when egl-headless is added may be appropriate. Another option is following what commit 3278a7bb does and adding the 2.10 check for the capability that is added. > diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in > index 0d68596991..aa0d6b26df 100644 > --- a/docs/formatdomain.html.in > +++ b/docs/formatdomain.html.in > @@ -6350,6 +6350,12 @@ qemu-kvm -net nic,model=? /dev/null > auto-allocation and <code>autoport</code> having no effect due to > security reasons) <span class="since">Since 1.0.6</span>. > </p> > + <p> > + <span class="since">Since 4.6.0</span> it's possible to use the > + <code>gl</code> element with <code>enable='yes'</code> to enable > + OpenGL support using QEMU's egl-headless display, since VNC > + doesn't support OpenGL natively like SPICE does. > + </p> > </dd> > <dt><code>spice</code> <span class="since">Since 0.8.6</span></dt> > <dd> > diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng > index f46145cf9b..20649c5f6f 100644 > --- a/docs/schemas/domaincommon.rng > +++ b/docs/schemas/domaincommon.rng > @@ -3135,6 +3135,13 @@ > </attribute> > </optional> > <ref name="listenElements"/> > + <optional> > + <element name="gl"> > + <attribute name="enable"> > + <ref name="virYesNo"/> > + </attribute> > + </element> > + </optional> > </group> > <group> > <attribute name="type"> > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index 6bfa3ca130..2ccd9e124f 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -13619,8 +13619,11 @@ virDomainGraphicsDefParseXMLVNC(virDomainGraphicsDefPtr def, > char *websocket = virXMLPropString(node, "websocket"); > char *sharePolicy = virXMLPropString(node, "sharePolicy"); > char *autoport = virXMLPropString(node, "autoport"); > + xmlNodePtr save = ctxt->node; > int ret = -1; > > + ctxt->node = node; > + Not used here - but virDomainGraphicsListensParseXML does the same thing... I think you can remove it here or just pass node to virDomainGraphicsListensParseXML - your call. > if (virDomainGraphicsListensParseXML(def, node, ctxt, flags) < 0) > goto cleanup; > > @@ -13681,12 +13684,17 @@ virDomainGraphicsDefParseXMLVNC(virDomainGraphicsDefPtr def, > def->type) < 0) > goto cleanup; > > + if (virDomainGraphicsGLDefParseXML(def, > + virXPathNode("./gl[1]", ctxt)) < 0) Fits on previous line > + goto cleanup; > + > ret = 0; > cleanup: > VIR_FREE(port); > VIR_FREE(autoport); > VIR_FREE(websocket); > VIR_FREE(sharePolicy); > + ctxt->node = save; > return ret; > } > With a couple of cleanups and addressing the egl-headless conundrum, I think we're good... John -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list