From: Marc-André Lureau Date: Wed, 25 Nov 2015 08:42:31 +0000 (+0100) Subject: domain: replace bool accel{2d, 3d} with a tristate X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=806ae4993320804b82a6ec1da5237625cc081ad6;p=libvirt.git domain: replace bool accel{2d, 3d} with a tristate Allowing to have the extra undefined/default state. Signed-off-by: Marc-André Lureau Signed-off-by: Michal Privoznik --- diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index cf51ad61a5..e04227a1aa 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -12007,8 +12007,9 @@ virDomainVideoAccelDefParseXML(xmlNodePtr node) { xmlNodePtr cur; virDomainVideoAccelDefPtr def; - char *accel3d = NULL; char *accel2d = NULL; + char *accel3d = NULL; + int val; cur = node->children; while (cur != NULL) { @@ -12026,24 +12027,29 @@ virDomainVideoAccelDefParseXML(xmlNodePtr node) return NULL; if (VIR_ALLOC(def) < 0) - return NULL; + goto cleanup; if (accel3d) { - if (STREQ(accel3d, "yes")) - def->accel3d = true; - else - def->accel3d = false; - VIR_FREE(accel3d); + if ((val = virTristateBoolTypeFromString(accel3d)) <= 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unknown accel3d value '%s'"), accel3d); + goto cleanup; + } + def->accel3d = val; } if (accel2d) { - if (STREQ(accel2d, "yes")) - def->accel2d = true; - else - def->accel2d = false; - VIR_FREE(accel2d); + if ((val = virTristateBoolTypeFromString(accel2d)) <= 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unknown accel2d value '%s'"), accel2d); + goto cleanup; + } + def->accel2d = val; } + cleanup: + VIR_FREE(accel2d); + VIR_FREE(accel3d); return def; } @@ -20873,10 +20879,15 @@ static void virDomainVideoAccelDefFormat(virBufferPtr buf, virDomainVideoAccelDefPtr def) { - virBufferAsprintf(buf, "accel3d ? "yes" : "no"); - virBufferAsprintf(buf, " accel2d='%s'", - def->accel2d ? "yes" : "no"); + virBufferAddLit(buf, "accel3d) { + virBufferAsprintf(buf, " accel3d='%s'", + virTristateBoolTypeToString(def->accel3d)); + } + if (def->accel2d) { + virBufferAsprintf(buf, " accel2d='%s'", + virTristateBoolTypeToString(def->accel2d)); + } virBufferAddLit(buf, "/>\n"); } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index c4ea304d47..33f51de71c 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1382,8 +1382,8 @@ typedef enum { typedef struct _virDomainVideoAccelDef virDomainVideoAccelDef; typedef virDomainVideoAccelDef *virDomainVideoAccelDefPtr; struct _virDomainVideoAccelDef { - bool accel3d; - bool accel2d; + int accel2d; /* enum virTristateBool */ + int accel3d; /* enum virTristateBool */ }; diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 4839a62c6d..0e84f30ffb 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -1553,11 +1553,15 @@ vboxAttachVideo(virDomainDefPtr def, IMachine *machine) VIR_DIV_UP(def->videos[0]->vram, 1024)); gVBoxAPI.UIMachine.SetMonitorCount(machine, def->videos[0]->heads); if (def->videos[0]->accel) { - gVBoxAPI.UIMachine.SetAccelerate3DEnabled(machine, - def->videos[0]->accel->accel3d); - if (gVBoxAPI.accelerate2DVideo) + if (def->videos[0]->accel->accel3d) { + gVBoxAPI.UIMachine.SetAccelerate3DEnabled(machine, + def->videos[0]->accel->accel3d == VIR_TRISTATE_BOOL_YES); + } + if (def->videos[0]->accel->accel2d && + gVBoxAPI.accelerate2DVideo) { gVBoxAPI.UIMachine.SetAccelerate2DVideoEnabled(machine, - def->videos[0]->accel->accel2d); + def->videos[0]->accel->accel2d == VIR_TRISTATE_BOOL_YES); + } } else { gVBoxAPI.UIMachine.SetAccelerate3DEnabled(machine, 0); if (gVBoxAPI.accelerate2DVideo) @@ -3277,8 +3281,10 @@ vboxDumpVideo(virDomainDefPtr def, vboxGlobalData *data ATTRIBUTE_UNUSED, def->videos[0]->vram = VRAMSize * 1024; def->videos[0]->heads = monitorCount; if (VIR_ALLOC(def->videos[0]->accel) >= 0) { - def->videos[0]->accel->accel3d = accelerate3DEnabled; - def->videos[0]->accel->accel2d = accelerate2DEnabled; + def->videos[0]->accel->accel3d = accelerate3DEnabled ? + VIR_TRISTATE_BOOL_YES : VIR_TRISTATE_BOOL_NO; + def->videos[0]->accel->accel2d = accelerate2DEnabled ? + VIR_TRISTATE_BOOL_YES : VIR_TRISTATE_BOOL_NO; } } }