[libvirt] [PATCH] qemu: add sdl opengl support

Maciej Wolny maciej.wolny at codethink.co.uk
Wed May 2 10:48:24 UTC 2018


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?




More information about the libvir-list mailing list