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;