domain: replace bool accel{2d, 3d} with a tristate

Allowing to have the extra undefined/default state.

Signed-off-by: Marc-André Lureau <marcandre.lureau@gmail.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Marc-André Lureau 2015-11-25 09:42:31 +01:00 committed by Michal Privoznik
parent 56a4fe2818
commit 806ae49933
3 changed files with 41 additions and 24 deletions

View File

@ -12007,8 +12007,9 @@ virDomainVideoAccelDefParseXML(xmlNodePtr node)
{ {
xmlNodePtr cur; xmlNodePtr cur;
virDomainVideoAccelDefPtr def; virDomainVideoAccelDefPtr def;
char *accel3d = NULL;
char *accel2d = NULL; char *accel2d = NULL;
char *accel3d = NULL;
int val;
cur = node->children; cur = node->children;
while (cur != NULL) { while (cur != NULL) {
@ -12026,24 +12027,29 @@ virDomainVideoAccelDefParseXML(xmlNodePtr node)
return NULL; return NULL;
if (VIR_ALLOC(def) < 0) if (VIR_ALLOC(def) < 0)
return NULL; goto cleanup;
if (accel3d) { if (accel3d) {
if (STREQ(accel3d, "yes")) if ((val = virTristateBoolTypeFromString(accel3d)) <= 0) {
def->accel3d = true; virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
else _("unknown accel3d value '%s'"), accel3d);
def->accel3d = false; goto cleanup;
VIR_FREE(accel3d); }
def->accel3d = val;
} }
if (accel2d) { if (accel2d) {
if (STREQ(accel2d, "yes")) if ((val = virTristateBoolTypeFromString(accel2d)) <= 0) {
def->accel2d = true; virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
else _("unknown accel2d value '%s'"), accel2d);
def->accel2d = false; goto cleanup;
VIR_FREE(accel2d); }
def->accel2d = val;
} }
cleanup:
VIR_FREE(accel2d);
VIR_FREE(accel3d);
return def; return def;
} }
@ -20873,10 +20879,15 @@ static void
virDomainVideoAccelDefFormat(virBufferPtr buf, virDomainVideoAccelDefFormat(virBufferPtr buf,
virDomainVideoAccelDefPtr def) virDomainVideoAccelDefPtr def)
{ {
virBufferAsprintf(buf, "<acceleration accel3d='%s'", virBufferAddLit(buf, "<acceleration");
def->accel3d ? "yes" : "no"); if (def->accel3d) {
virBufferAsprintf(buf, " accel2d='%s'", virBufferAsprintf(buf, " accel3d='%s'",
def->accel2d ? "yes" : "no"); virTristateBoolTypeToString(def->accel3d));
}
if (def->accel2d) {
virBufferAsprintf(buf, " accel2d='%s'",
virTristateBoolTypeToString(def->accel2d));
}
virBufferAddLit(buf, "/>\n"); virBufferAddLit(buf, "/>\n");
} }

View File

@ -1382,8 +1382,8 @@ typedef enum {
typedef struct _virDomainVideoAccelDef virDomainVideoAccelDef; typedef struct _virDomainVideoAccelDef virDomainVideoAccelDef;
typedef virDomainVideoAccelDef *virDomainVideoAccelDefPtr; typedef virDomainVideoAccelDef *virDomainVideoAccelDefPtr;
struct _virDomainVideoAccelDef { struct _virDomainVideoAccelDef {
bool accel3d; int accel2d; /* enum virTristateBool */
bool accel2d; int accel3d; /* enum virTristateBool */
}; };

View File

@ -1553,11 +1553,15 @@ vboxAttachVideo(virDomainDefPtr def, IMachine *machine)
VIR_DIV_UP(def->videos[0]->vram, 1024)); VIR_DIV_UP(def->videos[0]->vram, 1024));
gVBoxAPI.UIMachine.SetMonitorCount(machine, def->videos[0]->heads); gVBoxAPI.UIMachine.SetMonitorCount(machine, def->videos[0]->heads);
if (def->videos[0]->accel) { if (def->videos[0]->accel) {
gVBoxAPI.UIMachine.SetAccelerate3DEnabled(machine, if (def->videos[0]->accel->accel3d) {
def->videos[0]->accel->accel3d); gVBoxAPI.UIMachine.SetAccelerate3DEnabled(machine,
if (gVBoxAPI.accelerate2DVideo) def->videos[0]->accel->accel3d == VIR_TRISTATE_BOOL_YES);
}
if (def->videos[0]->accel->accel2d &&
gVBoxAPI.accelerate2DVideo) {
gVBoxAPI.UIMachine.SetAccelerate2DVideoEnabled(machine, gVBoxAPI.UIMachine.SetAccelerate2DVideoEnabled(machine,
def->videos[0]->accel->accel2d); def->videos[0]->accel->accel2d == VIR_TRISTATE_BOOL_YES);
}
} else { } else {
gVBoxAPI.UIMachine.SetAccelerate3DEnabled(machine, 0); gVBoxAPI.UIMachine.SetAccelerate3DEnabled(machine, 0);
if (gVBoxAPI.accelerate2DVideo) if (gVBoxAPI.accelerate2DVideo)
@ -3277,8 +3281,10 @@ vboxDumpVideo(virDomainDefPtr def, vboxGlobalData *data ATTRIBUTE_UNUSED,
def->videos[0]->vram = VRAMSize * 1024; def->videos[0]->vram = VRAMSize * 1024;
def->videos[0]->heads = monitorCount; def->videos[0]->heads = monitorCount;
if (VIR_ALLOC(def->videos[0]->accel) >= 0) { if (VIR_ALLOC(def->videos[0]->accel) >= 0) {
def->videos[0]->accel->accel3d = accelerate3DEnabled; def->videos[0]->accel->accel3d = accelerate3DEnabled ?
def->videos[0]->accel->accel2d = accelerate2DEnabled; VIR_TRISTATE_BOOL_YES : VIR_TRISTATE_BOOL_NO;
def->videos[0]->accel->accel2d = accelerate2DEnabled ?
VIR_TRISTATE_BOOL_YES : VIR_TRISTATE_BOOL_NO;
} }
} }
} }