mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
conf: add support for 'blob' in virtio video device
Add the ability to enable blob resources for the virtio video device. This will accelerate the display path due to less or no copying of pixel data. Blob resource support can be enabled with e.g.: <video> <model type='virtio' blob='on'/> </video> Some additional background information about blob resources: https://lists.freedesktop.org/archives/dri-devel/2020-August/275972.html https://www.kraxel.org/blog/2021/05/virtio-gpu-qemu-graphics-update/ Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2032406 Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
464a87ec52
commit
96d43ab285
@ -6437,6 +6437,13 @@ A video device.
|
||||
:since:`since 1.3.3` ) extends secondary bar and makes it addressable as
|
||||
64bit memory.
|
||||
|
||||
:since:`Since 9.2.0` (QEMU driver only), devices with type "virtio" have an
|
||||
optional ``blob`` attribute that can be set to "on" or "off". Setting
|
||||
``blob`` to "on" will enable the use of blob resources in the device. This
|
||||
can accelerate the display path by reducing or eliminating copying of pixel
|
||||
data between the guest and host. Note that blob resource support requires
|
||||
QEMU version 6.1 or newer.
|
||||
|
||||
:since:`Since 5.9.0` , the ``model`` element may also have an optional
|
||||
``resolution`` sub-element. The ``resolution`` element has attributes ``x``
|
||||
and ``y`` to set the minimum resolution for the video device. This
|
||||
|
@ -12904,6 +12904,9 @@ virDomainVideoModelDefParseXML(virDomainVideoDef *def,
|
||||
if (virXMLPropUIntDefault(node, "heads", 10, VIR_XML_PROP_NONE, &def->heads, 1) < 0)
|
||||
return -1;
|
||||
|
||||
if (virXMLPropTristateSwitch(node, "blob", VIR_XML_PROP_NONE, &def->blob) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -25280,6 +25283,8 @@ virDomainVideoDefFormat(virBuffer *buf,
|
||||
virBufferAsprintf(buf, " heads='%u'", def->heads);
|
||||
if (def->primary)
|
||||
virBufferAddLit(buf, " primary='yes'");
|
||||
if (def->blob != VIR_TRISTATE_SWITCH_ABSENT)
|
||||
virBufferAsprintf(buf, " blob='%s'", virTristateSwitchTypeToString(def->blob));
|
||||
if (def->accel || def->res) {
|
||||
virBufferAddLit(buf, ">\n");
|
||||
virBufferAdjustIndent(buf, 2);
|
||||
|
@ -1824,6 +1824,7 @@ struct _virDomainVideoDef {
|
||||
bool primary;
|
||||
virDomainVideoAccelDef *accel;
|
||||
virDomainVideoResolutionDef *res;
|
||||
virTristateSwitch blob;
|
||||
virDomainVideoDriverDef *driver;
|
||||
virDomainDeviceInfo info;
|
||||
virDomainVirtioOptions *virtio;
|
||||
|
@ -225,9 +225,16 @@ virDomainVideoDefValidate(const virDomainVideoDef *video,
|
||||
}
|
||||
}
|
||||
|
||||
if (video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
|
||||
(virDomainCheckVirtioOptionsAreAbsent(video->virtio) < 0))
|
||||
return -1;
|
||||
if (video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO) {
|
||||
if (virDomainCheckVirtioOptionsAreAbsent(video->virtio) < 0)
|
||||
return -1;
|
||||
if (video->blob != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("video type '%s' does not support blob resources"),
|
||||
virDomainVideoTypeToString(video->type));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -4499,6 +4499,11 @@
|
||||
<ref name="virYesNo"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="blob">
|
||||
<ref name="virOnOff"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="acceleration">
|
||||
<optional>
|
||||
|
Loading…
Reference in New Issue
Block a user