From f1300a6ce685bf435a3093200d2a47b2127489d4 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Tue, 29 Oct 2024 10:09:14 -0700 Subject: [PATCH] [Impeller] disable Maleoon GPU from using Vulkan. (flutter/engine#56203) Fixes https://github.com/flutter/flutter/issues/156623 using info from https://vulkan.gpuinfo.org/displayreport.php?id=23730 . I dont believe these vulkan drivers are working correctly. --- .../renderer/backend/vulkan/driver_info_vk.cc | 5 +++++ .../backend/vulkan/driver_info_vk_unittests.cc | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/engine/src/flutter/impeller/renderer/backend/vulkan/driver_info_vk.cc b/engine/src/flutter/impeller/renderer/backend/vulkan/driver_info_vk.cc index 007aa47392d..e438b561096 100644 --- a/engine/src/flutter/impeller/renderer/backend/vulkan/driver_info_vk.cc +++ b/engine/src/flutter/impeller/renderer/backend/vulkan/driver_info_vk.cc @@ -350,6 +350,11 @@ bool DriverInfoVK::IsKnownBadDriver() const { return false; } } + // Disable Maleoon series GPUs, see: + // https://github.com/flutter/flutter/issues/156623 + if (vendor_ == VendorVK::kHuawei) { + return true; + } return false; } diff --git a/engine/src/flutter/impeller/renderer/backend/vulkan/driver_info_vk_unittests.cc b/engine/src/flutter/impeller/renderer/backend/vulkan/driver_info_vk_unittests.cc index 44f014acbcd..b0ca1033102 100644 --- a/engine/src/flutter/impeller/renderer/backend/vulkan/driver_info_vk_unittests.cc +++ b/engine/src/flutter/impeller/renderer/backend/vulkan/driver_info_vk_unittests.cc @@ -36,6 +36,19 @@ TEST_P(DriverInfoVKTest, CanDumpToLog) { EXPECT_TRUE(log.str().find("Driver Information") != std::string::npos); } +TEST(DriverInfoVKTest, CanIdentifyBadMaleoonDriver) { + auto const context = + MockVulkanContextBuilder() + .SetPhysicalPropertiesCallback( + [](VkPhysicalDevice device, VkPhysicalDeviceProperties* prop) { + prop->vendorID = 0x19E5; // Huawei + prop->deviceType = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU; + }) + .Build(); + + EXPECT_TRUE(context->GetDriverInfo()->IsKnownBadDriver()); +} + bool IsBadVersionTest(std::string_view driver_name, bool qc = true) { auto const context = MockVulkanContextBuilder()