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(a)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 :|