[libvirt] [PATCH] qemu: add sdl opengl support
Daniel P. Berrangé
berrange at redhat.com
Tue May 8 11:14:01 UTC 2018
On Tue, May 08, 2018 at 12:12:42PM +0100, Maciej Wolny wrote:
> On 02/05/18 11:54, Daniel P. Berrangé wrote:
> > On Wed, May 02, 2018 at 11:48:24AM +0100, Maciej Wolny wrote:
> >> On 02/05/18 08:13, Daniel P. Berrangé wrote:
> >>> On Tue, May 01, 2018 at 08:22:45PM +0100, Maciej Wolny wrote:
> >>>> Add SDL graphics gl attribute, modify the domain XML schema, add a
> >>>> test, modify the documentation to include the new option.
> >>>>
> >>>> Signed-off-by: Maciej Wolny <maciej.wolny at codethink.co.uk>
> >>>> ---
> >>>> docs/schemas/domaincommon.rng | 8 +++++
> >>>> src/conf/domain_conf.c | 41 ++++++++++++++++++++++
> >>>> src/conf/domain_conf.h | 1 +
> >>>> src/qemu/qemu_capabilities.c | 2 ++
> >>>> src/qemu/qemu_capabilities.h | 1 +
> >>>> src/qemu/qemu_command.c | 19 ++++++++++
> >>>> .../qemuxml2argvdata/video-virtio-gpu-sdl-gl.args | 28 +++++++++++++++
> >>>> tests/qemuxml2argvdata/video-virtio-gpu-sdl-gl.xml | 38 ++++++++++++++++++++
> >>>> tests/qemuxml2argvtest.c | 5 +++
> >>>> 9 files changed, 143 insertions(+)
> >>>> create mode 100644 tests/qemuxml2argvdata/video-virtio-gpu-sdl-gl.args
> >>>> create mode 100644 tests/qemuxml2argvdata/video-virtio-gpu-sdl-gl.xml
> >>>>
> >>>> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
> >>>> index 3569b9212..a2ef93c09 100644
> >>>> --- a/docs/schemas/domaincommon.rng
> >>>> +++ b/docs/schemas/domaincommon.rng
> >>>> @@ -3031,6 +3031,14 @@
> >>>> <ref name="virYesNo"/>
> >>>> </attribute>
> >>>> </optional>
> >>>> + <optional>
> >>>> + <element name="gl">
> >>>> + <attribute name="enable">
> >>>> + <ref name="virYesNo"/>
> >>>> + </attribute>
> >>>> + <empty/>
> >>>> + </element>
> >>>> + </optional>
> >>>> </group>
> >>>> <group>
> >>>> <attribute name="type">
> >>>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> >>>> index b0257068d..7d65ca9df 100644
> >>>> --- a/src/conf/domain_conf.c
> >>>> +++ b/src/conf/domain_conf.c
> >>>> @@ -13448,6 +13448,7 @@ static int
> >>>> virDomainGraphicsDefParseXMLSDL(virDomainGraphicsDefPtr def,
> >>>> xmlNodePtr node)
> >>>> {
> >>>> + xmlNodePtr cur;
> >>>> char *fullscreen = virXMLPropString(node, "fullscreen");
> >>>> int ret = -1;
> >>>> @@ -13468,6 +13469,34 @@ virDomainGraphicsDefParseXMLSDL(virDomainGraphicsDefPtr def,
> >>>> def->data.sdl.xauth = virXMLPropString(node, "xauth");
> >>>> def->data.sdl.display = virXMLPropString(node, "display");
> >>>> + cur = node->children;
> >>>> + while (cur != NULL) {
> >>>> + if (cur->type == XML_ELEMENT_NODE) {
> >>>> + if (virXMLNodeNameEqual(cur, "gl")) {
> >>>> + char *enable = virXMLPropString(cur, "enable");
> >>>> + int enableVal;
> >>>> +
> >>>> + 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);
> >>>> + goto cleanup;
> >>>> + }
> >>>> + VIR_FREE(enable);
> >>>> +
> >>>> + def->data.sdl.gl = enableVal;
> >>>> + }
> >>>> + }
> >>>> + cur = cur->next;
> >>>> + }
> >>>> +
> >>>> ret = 0;
> >>>> cleanup:
> >>>> VIR_FREE(fullscreen);
> >>>> @@ -25652,6 +25681,18 @@ virDomainGraphicsDefFormat(virBufferPtr buf,
> >>>> if (def->data.sdl.fullscreen)
> >>>> virBufferAddLit(buf, " fullscreen='yes'");
> >>>> + if (!children && def->data.sdl.gl) {
> >>>> + virBufferAddLit(buf, ">\n");
> >>>> + virBufferAdjustIndent(buf, 2);
> >>>> + children = true;
> >>>> + }
> >>>> +
> >>>> + if (def->data.sdl.gl) {
> >>>> + virBufferAsprintf(buf, "<gl enable='%s'",
> >>>> + virTristateBoolTypeToString(def->data.sdl.gl));
> >>>> + virBufferAddLit(buf, "/>\n");
> >>>> + }
> >>>
> >>> SPICE GL support allows a "rendernode" property to be set - I'm wondering
> >>> if that is relevant to SDL or not ?
> >>>
> >>>
> >>> Regards,
> >>> Daniel
> >>>
> >>
> >> I purposefully didn't look into this because we didn't need that option for
> >> our use cases - would you still merge this patch without implementing this
> >> option?
> >
> > My thought was that if rendernode is also applicable for SPICE, then
> > instead of duplicating the struct fields and duplicating parsing, we
> > should create a helper method for dealing with the <gl> element that
> > can be shared with SPICE & SDL. If rendernode is not allowed with
> > SPICE in QEMU, then your simpler approach is sufficient
>
> Grepping through the source code of QEMU, it seems that the rendernode option
> is only used for SPICE (for egl_rendernode_init in ui/spice-core.c).
Ok, thanks for checking - sounds like your simple code is fine as is.
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
More information about the libvir-list
mailing list