add gfx_stream gpu mode
bug: 146066070
To be used with compatible crosvm + gfxstream libraries on host
Test:
With current tree's crosvm (no 2d or gfxstream backend):
launch_cvd...boot complete using swiftshader (expected)
launch_cvd --gpu_mode=drm_virgl...boot complete using virgl (expected)
launch_cvd --gpu_mode=gfxstream...fails (expected)
With 2d + gfxstream crosvm + gfxstream host libs in LD_LIBRARY_PATH:
launch_cvd...boot complete using swiftshader (expected)
launch_cvd --gpu_mode=drm_virgl...boot complete using virgl (expected)
launch_cvd --gpu_mode=gfxstream...boot complete using gfxstream (expected)
Change-Id: Ia571202f380eca8fbf5e87a308c78bce7248ec77
diff --git a/host/commands/run_cvd/launch.cc b/host/commands/run_cvd/launch.cc
index 3c92959..dc2e108 100644
--- a/host/commands/run_cvd/launch.cc
+++ b/host/commands/run_cvd/launch.cc
@@ -110,7 +110,8 @@
cmd->AddParameter("-keyboard_fd=", keyboard_server);
cvd::SharedFD frames_server;
- if (config.gpu_mode() == vsoc::kGpuModeDrmVirgl) {
+ if (config.gpu_mode() == vsoc::kGpuModeDrmVirgl ||
+ config.gpu_mode() == vsoc::kGpuModeGfxStream) {
frames_server = CreateUnixInputServer(instance.frames_socket_path());
} else {
frames_server = cvd::SharedFD::VsockServer(SOCK_STREAM);
diff --git a/host/libs/config/cuttlefish_config.cpp b/host/libs/config/cuttlefish_config.cpp
index 818cb6d..50bbe30 100644
--- a/host/libs/config/cuttlefish_config.cpp
+++ b/host/libs/config/cuttlefish_config.cpp
@@ -163,6 +163,7 @@
const char* const kGpuModeGuestSwiftshader = "guest_swiftshader";
const char* const kGpuModeDrmVirgl = "drm_virgl";
+const char* const kGpuModeGfxStream = "gfxstream";
std::string DefaultEnvironmentPath(const char* environment_key,
const char* default_value,
diff --git a/host/libs/config/cuttlefish_config.h b/host/libs/config/cuttlefish_config.h
index 2ee6135..04adc29 100644
--- a/host/libs/config/cuttlefish_config.h
+++ b/host/libs/config/cuttlefish_config.h
@@ -390,4 +390,5 @@
// GPU modes
extern const char* const kGpuModeGuestSwiftshader;
extern const char* const kGpuModeDrmVirgl;
+extern const char* const kGpuModeGfxStream;
} // namespace vsoc
diff --git a/host/libs/screen_connector/screen_connector.cpp b/host/libs/screen_connector/screen_connector.cpp
index 906435a..39c0fa3 100644
--- a/host/libs/screen_connector/screen_connector.cpp
+++ b/host/libs/screen_connector/screen_connector.cpp
@@ -26,7 +26,8 @@
ScreenConnector* ScreenConnector::Get(int frames_fd) {
auto config = vsoc::CuttlefishConfig::Get();
- if (config->gpu_mode() == vsoc::kGpuModeDrmVirgl) {
+ if (config->gpu_mode() == vsoc::kGpuModeDrmVirgl ||
+ config->gpu_mode() == vsoc::kGpuModeGfxStream) {
return new WaylandScreenConnector(frames_fd);
} else if (config->gpu_mode() == vsoc::kGpuModeGuestSwiftshader) {
return new SocketBasedScreenConnector(frames_fd);
diff --git a/host/libs/vm_manager/crosvm_manager.cpp b/host/libs/vm_manager/crosvm_manager.cpp
index 5674a21..7cc1f14 100644
--- a/host/libs/vm_manager/crosvm_manager.cpp
+++ b/host/libs/vm_manager/crosvm_manager.cpp
@@ -84,6 +84,15 @@
"androidboot.hardware.vulkan=pastel",
};
}
+ if (gpu_mode == vsoc::kGpuModeGfxStream) {
+ return {
+ "androidboot.hardware.gralloc=minigbm",
+ "androidboot.hardware.hwcomposer=ranchu",
+ "androidboot.hardware.egl=emulation",
+ "androidboot.hardware.vulkan=ranchu",
+ "androidboot.hardware.gltransport=virtio-gpu-pipe",
+ };
+ }
return {};
}
@@ -108,8 +117,12 @@
});
crosvm_cmd.AddParameter("run");
- if (config_->gpu_mode() == vsoc::kGpuModeDrmVirgl) {
- crosvm_cmd.AddParameter("--gpu=",
+ auto gpu_mode = config_->gpu_mode();
+
+ if (gpu_mode == vsoc::kGpuModeDrmVirgl ||
+ gpu_mode == vsoc::kGpuModeGfxStream) {
+ crosvm_cmd.AddParameter(gpu_mode == vsoc::kGpuModeGfxStream ?
+ "--gpu=gfxstream," : "--gpu=",
"width=", config_->x_res(), ",",
"height=", config_->y_res(), ",",
"egl=true,surfaceless=true,glx=false,gles=false");