From f5a13cacb0529d49dae798872d7ca30c8a58fe41 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Tue, 21 Jan 2025 12:37:35 -0800 Subject: [PATCH] [impeller] prevent PowerVR from using Vulkan backend. (#161841) Almost all remaining blackscreen or rendering bugs/crashes are PowerVR hardware. Based on common knowledge that several large engines prevent PowerVR completely, we'll also block PowerVR until we have time to accumulate the necessary workarounds. --------- Co-authored-by: Navaron Bracke --- .../renderer/backend/vulkan/driver_info_vk.cc | 8 ++++++++ .../backend/vulkan/driver_info_vk_unittests.cc | 13 +++++++++++++ 2 files changed, 21 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 0215ba056f4..8b451bce72b 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 @@ -334,6 +334,14 @@ bool DriverInfoVK::IsKnownBadDriver() const { if (vendor_ == VendorVK::kHuawei) { return true; } + // https://github.com/flutter/flutter/issues/161122 + // https://github.com/flutter/flutter/issues/160960 + // https://github.com/flutter/flutter/issues/160866 + // https://github.com/flutter/flutter/issues/160804 + // https://github.com/flutter/flutter/issues/160406 + if (vendor_ == VendorVK::kImgTec) { + 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 ccba49a266d..5e37a873e76 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 @@ -222,4 +222,17 @@ TEST(DriverInfoVKTest, CanUseFramebufferFetch) { EXPECT_TRUE(CanUseFramebufferFetch("Mali-G51", false)); } +TEST(DriverInfoVKTest, AllPowerVRDisabled) { + auto const context = + MockVulkanContextBuilder() + .SetPhysicalPropertiesCallback( + [](VkPhysicalDevice device, VkPhysicalDeviceProperties* prop) { + prop->vendorID = 0x1010; + prop->deviceType = VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU; + }) + .Build(); + + EXPECT_TRUE(context->GetDriverInfo()->IsKnownBadDriver()); +} + } // namespace impeller::testing