The `exit_consumer` and `exit_notifier` fields are only used internally
by the exit_event() method implementation or by send_exit_event() in the
sound device. So, they do not need to be exposed in the public API of
backend structures.
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Add a no-op null backend that allows vhost-device-gpu
to compile with --no-default-features and update the
README, enabling testing of all feature combinations.
The null backend is automatically selected when
no-default features are enabled.
Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
This commit refactors vhost-device-gpu by separating
virglrenderer from rutabaga, and using gfxstream via
rutabaga, Simplifying future backend development.
This commit introduces a significant refactor of the
virtio-gpu backend architecture:
- Transition `gfxstream` support to use `Rutabaga`
abstraction.
- Decouple `virglrenderer` from `Rutabaga`, allowing
it to be used as standalone.
- Unify backend handling using thread-local storage
and macro-based runtime dispatch.
Key Changes:
VirglRenderer Backend:
- `virgl.rs` is now a standalone backend that
directly calls `libvirglrenderer` functions.
- Removed reliance on `rutabaga` for virgl path.
Gfxstream Backend via Rutabaga:
- Introduced `gfxstream.rs` backend using `rutabaga`
- Thread-local `GfxstreamAdapter` manages its own
`Rutabaga` instance, initialized lazily.
- Preserved internal `GfxstreamResource` tracking
with scanout support and memory handling.
Renderer Selection Logic:
- In `device.rs`, `lazy_init_and_handle_event()` now:
- Dispatches `VirglRendererAdapter` and
`GfxstreamAdapter` using thread-local storage(TLS)
- Introduced `extract_backend_and_vring()` helper for
reusing backend setup logic.
Code Deduplication:
- Abstracted common logic for both backends to common.rs.
- Shared helpers reused between gfxstream and virgl.
- Improved modularity with fewer duplicated error
handling branches.
Testing and Validation:
- Replaced `virtio_gpu.rs` testing paths with new unit
tests for `gfxstream.rs` and `virgl.rs`.
- Added code coverage for the new refactored crate.
- Update coverage file to reflect the drop in coverage
due to exclusion of some gfxstream tests from CI
since they can't run in CI without GPU drivers.
Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
Rename the 'gfxstream' feature flag to
'backend-gfxstream' for consistency with
the new modular backend architecture and
update the README.
Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
- update RutabagaBuilder to accept fence handler at
construction
- replace query() with resource3d_info()
- adjust tests for new fence + GuestMemory setup
- drop removed fields (e.g. guest_cpu_mappable)
Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
It is used by all the tests so don't gate it just by gfxstream. In
fact we don't need clap::ValueEnum either as the use super::* imports
it anyway so we can drop the whole feature stanza.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Refactored the set_scanout implementation to send
VHOST_USER_GPU_DMABUF_SCANOUT or DMABUF_SCANOUT2 messages when
using the VirglRenderer backend. This enables proper support
for exporting resources via DMABUF and passing the relevant
metadata (width, height, stride, format, modifier) to the
frontend.
Updated VirtioGpuResource to store optional handle and 3D info
required for DMABUF scanout, and added validation for these
fields.
Extended test coverage to include validation for invalid scanout
IDs, missing resources, and backend-specific behavior for both
VirglRenderer and Gfxstream.
Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
- Added `component_type` field to `RutabagaVirtioGpu` to retain the
selected backend type (e.g., VirglRenderer, Gfxstream).
- Refactored `configure_rutabaga_builder` to return both the builder
and the selected component type.
- Updated `new_gpu` test helper to accept a `RutabagaComponentType`
argument, allowing tests to be parameterized by GPU backend.
This prepares the codebase for backend-specific logic, such as
validating behavior based on the component used.
Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
Corrected the AssociatedScanouts methods to remove the
const keyword and allow them to be mutable functions
Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
- Updated rutabaga_gfx to 0.1.62, which now requires env vars to
use system-provided virglrenderer and minigbm libraries for both
gfxstream and virglrenderer GPU backends.
- Updated README with new build instructions using
CROSVM_USE_SYSTEM_* env vars.
- Update transfer_read to use the latest rutabaga_gfx changes
- The GNU CI builds and tests for vhost-device-gpu currently fail
because they try to build against the vendored virglrenderer tree.
Locally we already build with CROSVM_USE_SYSTEM_* env vars, so
mirror that setup in CI as well.
Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
virtio-queue v0.15 introduces a new Descriptor API supporting both
split and packed virtqueue.
Update our dependencies and code to work with the new version
of the crate, including updating vhost-user-backend and virtio-vsock.
Updates `vhost-user-backend` from 0.18.0 to 0.19.0
- [Release notes](https://github.com/rust-vmm/vhost/releases)
- [Commits](rust-vmm/vhost@vhost-user-backend-v0.18.0...vhost-user-backend-v0.19.0)
Updates `virtio-queue` from 0.14.0 to 0.15.0
- [Release notes](https://github.com/rust-vmm/vm-virtio/releases)
- [Commits](rust-vmm/vm-virtio@virtio-queue-v0.14.0...virtio-queue-v0.15.0)
Updates `virtio-vsock` from 0.8.0 to 0.9.0
- [Release notes](https://github.com/rust-vmm/vm-virtio/releases)
- [Commits](rust-vmm/vm-virtio@virtio-vsock-v0.8.0...virtio-vsock-v0.9.0)
Signed-off-by: Wenyu Huang <huangwenyuu@outlook.com>
The CLI interface should be stable now and coverage is good. Support
for more backends as described in the README is comming later.
Note that this decreases the test coverage in the staging directory from
82.43% to 74.62%.
Signed-off-by: Matej Hrica <mhrica@redhat.com>