[libvirt] [PATCH v2 3/5] qemu: Add gl property to graphics of type sdl in domain config
John Ferlan
jferlan at redhat.com
Thu May 10 20:17:30 UTC 2018
On 05/10/2018 06:53 AM, Maciej Wolny wrote:
> Support OpenGL accelerated rendering when using SDL graphics in the
> domain config. Add associated test and documentation.
>
> Signed-off-by: Maciej Wolny <maciej.wolny at codethink.co.uk>
> ---
> docs/formatdomain.html.in | 6 +++
> docs/schemas/domaincommon.rng | 8 ++++
> src/conf/domain_conf.c | 44 ++++++++++++++++++++-
> src/conf/domain_conf.h | 1 +
> tests/qemuxml2argvdata/video-virtio-gpu-sdl-gl.xml | 38 ++++++++++++++++++
> .../qemuxml2xmloutdata/video-virtio-gpu-sdl-gl.xml | 45 ++++++++++++++++++++++
> tests/qemuxml2xmltest.c | 1 +
> 7 files changed, 141 insertions(+), 2 deletions(-)
> create mode 100644 tests/qemuxml2argvdata/video-virtio-gpu-sdl-gl.xml
> create mode 100644 tests/qemuxml2xmloutdata/video-virtio-gpu-sdl-gl.xml
>
[...]
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -13448,11 +13448,18 @@ virDomainGraphicsDefParseXMLVNC(virDomainGraphicsDefPtr def,
>
> static int
> virDomainGraphicsDefParseXMLSDL(virDomainGraphicsDefPtr def,
> - xmlNodePtr node)
> + xmlNodePtr node,
> + xmlXPathContextPtr ctxt)
> {
> + xmlNodePtr save = ctxt->node;
> + char *enable;
Initialize = NULL, then...
> + int enableVal;
> + xmlNodePtr glNode;
> char *fullscreen = virXMLPropString(node, "fullscreen");
> int ret = -1;
>
> + ctxt->node = node;
> +
> if (fullscreen != NULL) {
> if (STREQ(fullscreen, "yes")) {
> def->data.sdl.fullscreen = true;
> @@ -13470,9 +13477,30 @@ virDomainGraphicsDefParseXMLSDL(virDomainGraphicsDefPtr def,
> def->data.sdl.xauth = virXMLPropString(node, "xauth");
> def->data.sdl.display = virXMLPropString(node, "display");
>
> + glNode = virXPathNode("./gl", ctxt);
> + if (glNode) {
> + enable = virXMLPropString(glNode, "enable");
> + if (!enable) {
> + virReportError(VIR_ERR_XML_ERROR, "%s",
> + _("sdl gl element missing enable"));
> + goto cleanup;
> + }
> +
> + enableVal = virTristateBoolTypeFromString(enable);
> + if (enableVal < 0) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("unknown enable value '%s'"), enable);
> + VIR_FREE(enable);
Move the VIR_FREE(enable) into cleanup and remove the one 3 lines later.
> + goto cleanup;
> + }
> + VIR_FREE(enable);
> + def->data.sdl.gl = enableVal;
> + }
> +
> ret = 0;
> cleanup:
> VIR_FREE(fullscreen);
> + ctxt->node = save;
> return ret;
> }
>
> @@ -13901,7 +13929,7 @@ virDomainGraphicsDefParseXML(xmlNodePtr node,
> goto error;
> break;
> case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
> - if (virDomainGraphicsDefParseXMLSDL(def, node) < 0)
> + if (virDomainGraphicsDefParseXMLSDL(def, node, ctxt) < 0)
> goto error;
> break;
> case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
> @@ -25654,6 +25682,18 @@ virDomainGraphicsDefFormat(virBufferPtr buf,
> if (def->data.sdl.fullscreen)
> virBufferAddLit(buf, " fullscreen='yes'");
>
> + if (!children && def->data.sdl.gl != VIR_TRISTATE_BOOL_ABSENT) {
Well I certainly hope it cannot be true at this point; otherwise, the
compiler reorganized things on us ;-)... I'll leave it as is since it's
a bit of preventive coding...
> + virBufferAddLit(buf, ">\n");
> + virBufferAdjustIndent(buf, 2);
> + children = true;
> + }
> +
> + if (def->data.sdl.gl != VIR_TRISTATE_BOOL_ABSENT) {
> + virBufferAsprintf(buf, "<gl enable='%s'",
> + virTristateBoolTypeToString(def->data.sdl.gl));
> + virBufferAddLit(buf, "/>\n");
> + }
> +
> break;
>
I'll make the above adjustment to enable processing before pushing
Reviewed-by: John Ferlan <jferlan at redhat.com>
John
More information about the libvir-list
mailing list