From 425329181f1db19f34a8ffffc1da9afa7f323f13 Mon Sep 17 00:00:00 2001 From: Erik Skultety Date: Sat, 30 Jun 2018 18:20:33 +0200 Subject: [PATCH] conf: Introduce virDomainGraphicsDefHasOpenGL helper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A simple helper which will loop through all the graphics elements and checks whether at least one of them enables OpenGL support, either by containing or being of type 'egl-headless'. Signed-off-by: Erik Skultety Acked-by: Michal Privoznik Reviewed-by: Ján Tomko --- src/conf/domain_conf.c | 43 ++++++++++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 3 +++ src/libvirt_private.syms | 1 + 3 files changed, 47 insertions(+) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 89c6556026..187a8b36a0 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -30274,3 +30274,46 @@ virDomainDefHasManagedPR(const virDomainDef *def) return false; } + + +/** + * virDomainGraphicsDefHasOpenGL: + * @def: domain definition + * + * Returns true if a domain config contains at least one element + * with OpenGL support enabled, false otherwise. + */ +bool +virDomainGraphicsDefHasOpenGL(const virDomainDef *def) +{ + size_t i; + + for (i = 0; i < def->ngraphics; i++) { + virDomainGraphicsDefPtr graphics = def->graphics[i]; + + /* we only care about OpenGL support for a given type here */ + switch (graphics->type) { + case VIR_DOMAIN_GRAPHICS_TYPE_VNC: + case VIR_DOMAIN_GRAPHICS_TYPE_RDP: + case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP: + continue; + case VIR_DOMAIN_GRAPHICS_TYPE_SDL: + if (graphics->data.sdl.gl == VIR_TRISTATE_BOOL_YES) + return true; + + continue; + case VIR_DOMAIN_GRAPHICS_TYPE_SPICE: + if (graphics->data.spice.gl == VIR_TRISTATE_BOOL_YES) + return true; + + continue; + case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS: + return true; + + case VIR_DOMAIN_GRAPHICS_TYPE_LAST: + break; + } + } + + return false; +} diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 26f75b15d0..3deda1d978 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3642,4 +3642,7 @@ virDomainDiskGetDetectZeroesMode(virDomainDiskDiscard discard, bool virDomainDefHasManagedPR(const virDomainDef *def); +bool +virDomainGraphicsDefHasOpenGL(const virDomainDef *def); + #endif /* __DOMAIN_CONF_H */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index c27c224e93..ebf3979109 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -359,6 +359,7 @@ virDomainGetFilesystemForTarget; virDomainGraphicsAuthConnectedTypeFromString; virDomainGraphicsAuthConnectedTypeToString; virDomainGraphicsDefFree; +virDomainGraphicsDefHasOpenGL; virDomainGraphicsGetListen; virDomainGraphicsListenAppendAddress; virDomainGraphicsListenAppendSocket;