From 7e45ef7def7eafd64d5b6355c7c2d8673712eade Mon Sep 17 00:00:00 2001 From: Dorinda Bassey Date: Tue, 4 Nov 2025 13:31:42 +0100 Subject: [PATCH] vhost-device-gpu: Add virglrenderer dependency and feature Add virglrenderer-rs as an optional dependency and introduce the backend-virgl feature flag to enable the new virglrenderer backend. Signed-off-by: Dorinda Bassey --- Cargo.lock | 137 ++++++++++++++++++++++-------------- vhost-device-gpu/Cargo.toml | 4 +- 2 files changed, 86 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5ef5a78..fe5d638 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,7 +20,7 @@ dependencies = [ "alsa-sys", "bitflags 2.10.0", "cfg-if", - "libc", + "libc 0.2.177", ] [[package]] @@ -29,7 +29,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" dependencies = [ - "libc", + "libc 0.2.177", "pkg-config", ] @@ -243,7 +243,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", - "libc", + "libc 0.2.177", "libloading", ] @@ -310,7 +310,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" dependencies = [ "encode_unicode", - "libc", + "libc 0.2.177", "once_cell", "unicode-width", "windows-sys 0.61.1", @@ -454,7 +454,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e74d68fe2927dbf47aa976d14d93db9b23dced457c7bb2bdc6925a16d31b736e" dependencies = [ "bitflags 2.10.0", - "libc", + "libc 0.2.177", ] [[package]] @@ -469,8 +469,8 @@ version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ - "libc", - "windows-sys 0.52.0", + "libc 0.2.177", + "windows-sys 0.61.1", ] [[package]] @@ -481,7 +481,7 @@ checksum = "25b686663ba7f08d92880ff6ba22170f1df4e83629341cba34cf82cd65ebea99" dependencies = [ "bitvec", "cfg-if", - "libc", + "libc 0.2.177", "nix 0.29.0", ] @@ -604,7 +604,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", - "libc", + "libc 0.2.177", "r-efi", "wasip2", ] @@ -617,9 +617,9 @@ checksum = "171ed2f6dd927abbe108cfd9eebff2052c335013f5879d55bab0dc1dee19b706" dependencies = [ "glib-sys", "gobject-sys", - "libc", + "libc 0.2.177", "system-deps", - "windows-sys 0.52.0", + "windows-sys 0.61.1", ] [[package]] @@ -638,7 +638,7 @@ dependencies = [ "glib-macros", "glib-sys", "gobject-sys", - "libc", + "libc 0.2.177", "memchr", "smallvec", ] @@ -662,7 +662,7 @@ version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d09d3d0fddf7239521674e57b0465dfbd844632fec54f059f7f56112e3f927e1" dependencies = [ - "libc", + "libc 0.2.177", "system-deps", ] @@ -679,7 +679,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "538e41d8776173ec107e7b0f2aceced60abc368d7e1d81c1f0e2ecd35f59080d" dependencies = [ "glib-sys", - "libc", + "libc 0.2.177", "system-deps", ] @@ -697,7 +697,7 @@ dependencies = [ "gstreamer-sys", "itertools 0.14.0", "kstring", - "libc", + "libc 0.2.177", "muldiv", "num-integer", "num-rational", @@ -720,7 +720,7 @@ dependencies = [ "gstreamer", "gstreamer-app-sys", "gstreamer-base", - "libc", + "libc 0.2.177", ] [[package]] @@ -732,7 +732,7 @@ dependencies = [ "glib-sys", "gstreamer-base-sys", "gstreamer-sys", - "libc", + "libc 0.2.177", "system-deps", ] @@ -747,7 +747,7 @@ dependencies = [ "gstreamer", "gstreamer-audio-sys", "gstreamer-base", - "libc", + "libc 0.2.177", "smallvec", ] @@ -761,7 +761,7 @@ dependencies = [ "gobject-sys", "gstreamer-base-sys", "gstreamer-sys", - "libc", + "libc 0.2.177", "system-deps", ] @@ -776,7 +776,7 @@ dependencies = [ "glib", "gstreamer", "gstreamer-base-sys", - "libc", + "libc 0.2.177", ] [[package]] @@ -788,7 +788,7 @@ dependencies = [ "glib-sys", "gobject-sys", "gstreamer-sys", - "libc", + "libc 0.2.177", "system-deps", ] @@ -801,7 +801,7 @@ dependencies = [ "cfg-if", "glib-sys", "gobject-sys", - "libc", + "libc 0.2.177", "system-deps", ] @@ -918,6 +918,12 @@ version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +[[package]] +name = "libc" +version = "1.0.0-alpha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7222002e5385b4d9327755661e3847c970e8fbf9dea6da8c57f16e8cfbff53a8" + [[package]] name = "libgpiod" version = "1.0.0" @@ -926,7 +932,7 @@ checksum = "9e395c45c5a3d87e601c2691acb100cda22286b1dba1101515dcc1928d5b6899" dependencies = [ "errno", "intmap", - "libc", + "libc 0.2.177", "libgpiod-sys", "thiserror 2.0.17", ] @@ -961,7 +967,7 @@ dependencies = [ "cc", "convert_case 0.8.0", "cookie-factory", - "libc", + "libc 0.2.177", "libspa-sys", "nix 0.30.1", "nom 8.0.0", @@ -1037,7 +1043,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c76e90ba0bde4c5eb7c1b23d9b0b87333ce3e3db9a3f5fd44b2caae3c99358" dependencies = [ "cfg-if", - "libc", + "libc 0.2.177", "log", "remain", "rustix", @@ -1057,7 +1063,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ - "libc", + "libc 0.2.177", "log", "wasi", "windows-sys 0.59.0", @@ -1108,7 +1114,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93062a0dce6da2517ea35f301dfc88184ce18d3601ec786a727a87bf535deca9" dependencies = [ "byteorder", - "libc", + "libc 0.2.177", "log", "neli-proc-macros", ] @@ -1135,7 +1141,7 @@ dependencies = [ "bitflags 2.10.0", "cfg-if", "cfg_aliases", - "libc", + "libc 0.2.177", "memoffset", ] @@ -1148,7 +1154,7 @@ dependencies = [ "bitflags 2.10.0", "cfg-if", "cfg_aliases", - "libc", + "libc 0.2.177", ] [[package]] @@ -1258,7 +1264,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", - "libc", + "libc 0.2.177", "redox_syscall", "smallvec", "windows-link", @@ -1290,7 +1296,7 @@ checksum = "9688b89abf11d756499f7c6190711d6dbe5a3acdb30c8fbf001d6596d06a8d44" dependencies = [ "anyhow", "bitflags 2.10.0", - "libc", + "libc 0.2.177", "libspa", "libspa-sys", "nix 0.30.1", @@ -1569,9 +1575,9 @@ checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ "bitflags 2.10.0", "errno", - "libc", + "libc 0.2.177", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.1", ] [[package]] @@ -1599,7 +1605,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f517ff4f36da6a1bae02e05a59865736a5e594329ff1f958eac5865989ba2e3" dependencies = [ "cfg-if", - "libc", + "libc 0.2.177", "log", "mesa3d_util", "pkg-config", @@ -1705,7 +1711,7 @@ version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" dependencies = [ - "libc", + "libc 0.2.177", "signal-hook-registry", ] @@ -1715,7 +1721,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc" dependencies = [ - "libc", + "libc 0.2.177", "mio", "signal-hook", ] @@ -1726,7 +1732,7 @@ version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ - "libc", + "libc 0.2.177", ] [[package]] @@ -1747,7 +1753,7 @@ version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ - "libc", + "libc 0.2.177", "windows-sys 0.52.0", ] @@ -1761,7 +1767,7 @@ dependencies = [ "embedded-can", "hex", "itertools 0.13.0", - "libc", + "libc 0.2.177", "log", "nb", "neli", @@ -1839,7 +1845,7 @@ dependencies = [ "getrandom", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.61.1", ] [[package]] @@ -2015,7 +2021,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a4dcad85a129d97d5d4b2f3c47a4affdeedd76bdcd02094bcb5d9b76cac2d05" dependencies = [ "bitflags 2.10.0", - "libc", + "libc 0.2.177", "uuid", "vm-memory", "vmm-sys-util", @@ -2068,7 +2074,7 @@ dependencies = [ "assert_matches", "clap", "env_logger", - "libc", + "libc 0.2.177", "libgpiod", "log", "thiserror 2.0.17", @@ -2088,7 +2094,7 @@ dependencies = [ "bitflags 2.10.0", "clap", "env_logger", - "libc", + "libc 0.2.177", "log", "mockall", "rusty-fork", @@ -2097,6 +2103,7 @@ dependencies = [ "thiserror 2.0.17", "vhost", "vhost-user-backend", + "virglrenderer", "virtio-bindings", "virtio-queue", "vm-memory", @@ -2110,7 +2117,7 @@ dependencies = [ "assert_matches", "clap", "env_logger", - "libc", + "libc 0.2.177", "log", "thiserror 2.0.17", "vhost", @@ -2130,7 +2137,7 @@ dependencies = [ "env_logger", "epoll", "evdev", - "libc", + "libc 0.2.177", "log", "nix 0.30.1", "rand", @@ -2152,7 +2159,7 @@ dependencies = [ "clap", "env_logger", "epoll", - "libc", + "libc 0.2.177", "log", "rand", "tempfile", @@ -2236,7 +2243,7 @@ dependencies = [ "bitflags 2.10.0", "clap", "env_logger", - "libc", + "libc 0.2.177", "log", "thiserror 2.0.17", "vhost", @@ -2254,7 +2261,7 @@ dependencies = [ "assert_matches", "clap", "env_logger", - "libc", + "libc 0.2.177", "log", "thiserror 2.0.17", "vhost", @@ -2275,7 +2282,7 @@ dependencies = [ "env_logger", "epoll", "figment", - "libc", + "libc 0.2.177", "log", "serde", "tempfile", @@ -2296,7 +2303,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e183205a9ba7cb9c47fcb0fc0a07fc295a110efbb11ab78ad0d793b0a38a7bde" dependencies = [ - "libc", + "libc 0.2.177", "log", "vhost", "virtio-bindings", @@ -2305,6 +2312,28 @@ dependencies = [ "vmm-sys-util", ] +[[package]] +name = "virglrenderer" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14b3ceb5f84adcbd531661a6c6c0883c3d6cd83427886d3179675b19268f4450" +dependencies = [ + "libc 1.0.0-alpha.1", + "log", + "thiserror 2.0.17", + "virglrenderer-sys", +] + +[[package]] +name = "virglrenderer-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3b62ecfe310dacb7a9cd5b9e4c2e25fa5663a9c860c3396ed3b11ee1e06e4b4" +dependencies = [ + "bindgen", + "pkg-config", +] + [[package]] name = "virtio-bindings" version = "0.2.6" @@ -2342,7 +2371,7 @@ checksum = "1fd5e56d48353c5f54ef50bd158a0452fc82f5383da840f7b8efc31695dd3b9d" dependencies = [ "arc-swap", "bitflags 2.10.0", - "libc", + "libc 0.2.177", "thiserror 1.0.69", "vmm-sys-util", "winapi", @@ -2355,7 +2384,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d21f366bf22bfba3e868349978766a965cbe628c323d58e026be80b8357ab789" dependencies = [ "bitflags 1.3.2", - "libc", + "libc 0.2.177", ] [[package]] @@ -2364,7 +2393,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e8b4d00e672f147fc86a09738fadb1445bd1c0a40542378dfb82909deeee688" dependencies = [ - "libc", + "libc 0.2.177", "nix 0.29.0", ] @@ -2374,7 +2403,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" dependencies = [ - "libc", + "libc 0.2.177", ] [[package]] diff --git a/vhost-device-gpu/Cargo.toml b/vhost-device-gpu/Cargo.toml index 6bc07c8..d6d2236 100644 --- a/vhost-device-gpu/Cargo.toml +++ b/vhost-device-gpu/Cargo.toml @@ -14,9 +14,10 @@ edition = "2021" resolver = "2" [features] -default = ["backend-gfxstream"] +default = ["backend-virgl", "backend-gfxstream"] xen = ["vm-memory/xen", "vhost/xen", "vhost-user-backend/xen"] backend-gfxstream = ["rutabaga_gfx/gfxstream"] +backend-virgl = ["dep:virglrenderer"] [dependencies] clap = { version = "4.5", features = ["derive"] } @@ -27,6 +28,7 @@ log = "0.4" [target.'cfg(not(target_env = "musl"))'.dependencies] rutabaga_gfx = { version = "0.1.75", features = ["virgl_renderer"] } thiserror = "2.0.17" +virglrenderer = {version = "0.1.2", optional = true } vhost = { version = "0.14.0", features = ["vhost-user-backend"] } vhost-user-backend = "0.20" virtio-bindings = "0.2.5"