From 3434b3283ebd94f4a070a31398fec08fd554e0c5 Mon Sep 17 00:00:00 2001 From: Pujun Lun Date: Fri, 21 Oct 2022 11:14:13 -0700 Subject: [PATCH] devices: set default GPU mode for Windows. Only gfxstream is being actively used on Windows for now, so we either use it or fall back to 2D rendering by default. This CL also puts ModeVirglRenderer under the "virglrenderer" feature flag, so that the arg parser would reject it when specified by mistake. BUG=b:254284360 TEST=presubmit Change-Id: Ifa39e4a528acf1bd45a85e7327b3edded3a4e7d6 Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/3971026 Reviewed-by: Daniel Verkamp Reviewed-by: Gurchetan Singh Reviewed-by: Kaiyi Li Commit-Queue: Pujun Lun --- devices/src/virtio/gpu/mod.rs | 18 ++++++++++++++++++ devices/src/virtio/gpu/parameters.rs | 6 +----- src/crosvm/sys/unix/config.rs | 15 +++++++++------ 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/devices/src/virtio/gpu/mod.rs b/devices/src/virtio/gpu/mod.rs index 25e6c6028e..989c76c1db 100644 --- a/devices/src/virtio/gpu/mod.rs +++ b/devices/src/virtio/gpu/mod.rs @@ -81,6 +81,7 @@ use super::Writer; pub enum GpuMode { #[serde(rename = "2d", alias = "2D")] Mode2D, + #[cfg(feature = "virgl_renderer")] #[serde(rename = "virglrenderer", alias = "3d", alias = "3D")] ModeVirglRenderer, #[cfg(feature = "gfxstream")] @@ -88,6 +89,22 @@ pub enum GpuMode { ModeGfxstream, } +impl Default for GpuMode { + fn default() -> Self { + #[cfg(all(windows, feature = "gfxstream"))] + return GpuMode::ModeGfxstream; + + #[cfg(all(unix, feature = "virgl_renderer"))] + return GpuMode::ModeVirglRenderer; + + #[cfg(not(any( + all(windows, feature = "gfxstream"), + all(unix, feature = "virgl_renderer"), + )))] + return GpuMode::Mode2D; + } +} + #[derive(Copy, Clone, Debug)] pub struct VirtioScanoutBlobData { pub width: u32, @@ -1108,6 +1125,7 @@ impl Gpu { let rutabaga_channels_opt = Some(rutabaga_channels); let component = match gpu_parameters.mode { GpuMode::Mode2D => RutabagaComponentType::Rutabaga2D, + #[cfg(feature = "virgl_renderer")] GpuMode::ModeVirglRenderer => RutabagaComponentType::VirglRenderer, #[cfg(feature = "gfxstream")] GpuMode::ModeGfxstream => RutabagaComponentType::Gfxstream, diff --git a/devices/src/virtio/gpu/parameters.rs b/devices/src/virtio/gpu/parameters.rs index 227cfeeb49..f4bc562c4f 100644 --- a/devices/src/virtio/gpu/parameters.rs +++ b/devices/src/virtio/gpu/parameters.rs @@ -87,11 +87,7 @@ impl Default for GpuParameters { #[cfg(feature = "gfxstream")] gfxstream_use_guest_angle: None, use_vulkan: None, - mode: if cfg!(feature = "virgl_renderer") { - GpuMode::ModeVirglRenderer - } else { - GpuMode::Mode2D - }, + mode: Default::default(), #[cfg(feature = "gfxstream")] gfxstream_support_gles31: true, wsi: None, diff --git a/src/crosvm/sys/unix/config.rs b/src/crosvm/sys/unix/config.rs index 9d40a50678..9077c1338a 100644 --- a/src/crosvm/sys/unix/config.rs +++ b/src/crosvm/sys/unix/config.rs @@ -437,14 +437,17 @@ mod tests { let gpu_params: GpuParameters = from_key_values("backend=2D").unwrap(); assert_eq!(gpu_params.mode, GpuMode::Mode2D); - let gpu_params: GpuParameters = from_key_values("backend=3d").unwrap(); - assert_eq!(gpu_params.mode, GpuMode::ModeVirglRenderer); + #[cfg(feature = "virgl_renderer")] + { + let gpu_params: GpuParameters = from_key_values("backend=3d").unwrap(); + assert_eq!(gpu_params.mode, GpuMode::ModeVirglRenderer); - let gpu_params: GpuParameters = from_key_values("backend=3D").unwrap(); - assert_eq!(gpu_params.mode, GpuMode::ModeVirglRenderer); + let gpu_params: GpuParameters = from_key_values("backend=3D").unwrap(); + assert_eq!(gpu_params.mode, GpuMode::ModeVirglRenderer); - let gpu_params: GpuParameters = from_key_values("backend=virglrenderer").unwrap(); - assert_eq!(gpu_params.mode, GpuMode::ModeVirglRenderer); + let gpu_params: GpuParameters = from_key_values("backend=virglrenderer").unwrap(); + assert_eq!(gpu_params.mode, GpuMode::ModeVirglRenderer); + } #[cfg(feature = "gfxstream")] {