diff options
Diffstat (limited to 'host/commands/assemble_cvd/graphics_flags.cc')
-rw-r--r-- | host/commands/assemble_cvd/graphics_flags.cc | 28 |
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( |