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 <dverkamp@chromium.org>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Reviewed-by: Kaiyi Li <kaiyili@google.com>
Commit-Queue: Pujun Lun <lunpujun@google.com>
This commit is contained in:
Pujun Lun 2022-10-21 11:14:13 -07:00 committed by crosvm LUCI
parent b896b869e4
commit 3434b3283e
3 changed files with 28 additions and 11 deletions

View file

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

View file

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

View file

@ -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")]
{