aboutsummaryrefslogtreecommitdiff
path: root/host/commands/assemble_cvd/graphics_flags.cc
diff options
context:
space:
mode:
Diffstat (limited to 'host/commands/assemble_cvd/graphics_flags.cc')
-rw-r--r--host/commands/assemble_cvd/graphics_flags.cc28
1 files changed, 22 insertions, 6 deletions
diff --git a/host/commands/assemble_cvd/graphics_flags.cc b/host/commands/assemble_cvd/graphics_flags.cc
index 72a4c8eb4..e5e7e4424 100644
--- a/host/commands/assemble_cvd/graphics_flags.cc
+++ b/host/commands/assemble_cvd/graphics_flags.cc
@@ -39,6 +39,7 @@ namespace {
enum class RenderingMode {
kNone,
+ kCustom,
kGuestSwiftShader,
kGfxstream,
kGfxstreamGuestAngle,
@@ -63,6 +64,9 @@ Result<RenderingMode> GetRenderingMode(const std::string& mode) {
if (mode == std::string(kGpuModeGuestSwiftshader)) {
return RenderingMode::kGuestSwiftShader;
}
+ if (mode == std::string(kGpuModeCustom)) {
+ return RenderingMode::kCustom;
+ }
if (mode == std::string(kGpuModeNone)) {
return RenderingMode::kNone;
}
@@ -232,7 +236,7 @@ Result<std::string> SelectGpuMode(
const GuestConfig& guest_config,
const gfxstream::proto::GraphicsAvailability& graphics_availability) {
if (gpu_mode_arg != kGpuModeAuto && gpu_mode_arg != kGpuModeDrmVirgl &&
- gpu_mode_arg != kGpuModeGfxstream &&
+ gpu_mode_arg != kGpuModeCustom && gpu_mode_arg != kGpuModeGfxstream &&
gpu_mode_arg != kGpuModeGfxstreamGuestAngle &&
gpu_mode_arg != kGpuModeGfxstreamGuestAngleHostSwiftShader &&
gpu_mode_arg != kGpuModeGuestSwiftshader &&
@@ -256,8 +260,8 @@ Result<std::string> SelectGpuMode(
LOG(INFO) << "GPU auto mode: detected prerequisites for accelerated "
<< "rendering support.";
- if (vm_manager == vm_manager::QemuManager::name() && !UseQemu8()) {
- LOG(INFO) << "Not using QEMU8: selecting guest swiftshader";
+ if (vm_manager == vm_manager::QemuManager::name() && !UseQemuPrebuilt()) {
+ LOG(INFO) << "Not using QEMU prebuilt (QEMU 8+): selecting guest swiftshader";
return kGpuModeGuestSwiftshader;
} else if (!guest_config.gfxstream_supported) {
LOG(INFO) << "GPU auto mode: guest does not support gfxstream, "
@@ -286,8 +290,8 @@ Result<std::string> SelectGpuMode(
"--gpu_mode=auto or --gpu_mode=guest_swiftshader.";
}
- if (vm_manager == vm_manager::QemuManager::name() && !UseQemu8()) {
- LOG(INFO) << "Not using QEMU8: selecting guest swiftshader";
+ if (vm_manager == vm_manager::QemuManager::name() && !UseQemuPrebuilt()) {
+ LOG(INFO) << "Not using QEMU prebuilt (QEMU 8+): selecting guest swiftshader";
return kGpuModeGuestSwiftshader;
}
}
@@ -480,9 +484,13 @@ Result<void> SetGfxstreamFlags(
} // namespace
+static std::unordered_set<std::string> kSupportedGpuContexts{
+ "gfxstream-vulkan", "gfxstream-composer", "cross-domain", "magma"};
+
Result<std::string> ConfigureGpuSettings(
const std::string& gpu_mode_arg, const std::string& gpu_vhost_user_mode_arg,
- const std::string& gpu_renderer_features_arg, const std::string& vm_manager,
+ const std::string& gpu_renderer_features_arg,
+ std::string& gpu_context_types_arg, const std::string& vm_manager,
const GuestConfig& guest_config,
CuttlefishConfig::MutableInstanceSpecific& instance) {
#ifdef __APPLE__
@@ -525,6 +533,14 @@ Result<std::string> ConfigureGpuSettings(
guest_config, graphics_availability, instance));
}
+ if (gpu_mode == kGpuModeCustom) {
+ auto requested_types = android::base::Split(gpu_context_types_arg, ":");
+ for (const std::string& requested : requested_types) {
+ CF_EXPECT(kSupportedGpuContexts.count(requested) == 1,
+ "unsupported context type: " + requested);
+ }
+ }
+
const auto angle_features = CF_EXPECT(GetNeededAngleFeatures(
CF_EXPECT(GetRenderingMode(gpu_mode)), graphics_availability));
instance.set_gpu_angle_feature_overrides_enabled(