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>
- 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>
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>