Skip to content

Commit 8834b42

Browse files
[Impeller] Fall back to OpenGL ES on older Adreno GPUs (#177747)
These GPUs require additional flags in WorkaroundsVK that affect key features used by the Vulkan back end such as framebuffer fetch. The OpenGL ES back end will likely be more reliable on these devices. Fixes #177380
1 parent b5c3b9e commit 8834b42

2 files changed

Lines changed: 17 additions & 10 deletions

File tree

‎engine/src/flutter/impeller/renderer/backend/vulkan/driver_info_vk.cc‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,13 @@ bool DriverInfoVK::IsEmulator() const {
358358
}
359359

360360
bool DriverInfoVK::IsKnownBadDriver() const {
361+
// Fall back to OpenGL ES on older Adreno devices that require additional
362+
// workarounds in the Impeller Vulkan back end such as disabling framebuffer
363+
// fetch.
364+
if (adreno_gpu_ && *adreno_gpu_ <= AdrenoGPU::kAdreno630) {
365+
return true;
366+
}
367+
361368
// Disable Maleoon series GPUs, see:
362369
// https://github.com/flutter/flutter/issues/156623
363370
if (vendor_ == VendorVK::kHuawei) {

‎engine/src/flutter/impeller/renderer/backend/vulkan/driver_info_vk_unittests.cc‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -164,16 +164,16 @@ TEST(DriverInfoVKTest, DriverParsingAdreno) {
164164
}
165165

166166
TEST(DriverInfoVKTest, DisabledDevices) {
167-
EXPECT_FALSE(IsBadVersionTest("Adreno (TM) 620"));
168-
EXPECT_FALSE(IsBadVersionTest("Adreno (TM) 610"));
169-
EXPECT_FALSE(IsBadVersionTest("Adreno (TM) 530"));
170-
EXPECT_FALSE(IsBadVersionTest("Adreno (TM) 512"));
171-
EXPECT_FALSE(IsBadVersionTest("Adreno (TM) 509"));
172-
EXPECT_FALSE(IsBadVersionTest("Adreno (TM) 508"));
173-
EXPECT_FALSE(IsBadVersionTest("Adreno (TM) 506"));
174-
EXPECT_FALSE(IsBadVersionTest("Adreno (TM) 505"));
175-
EXPECT_FALSE(IsBadVersionTest("Adreno (TM) 504"));
176-
EXPECT_FALSE(IsBadVersionTest("Adreno (TM) 630"));
167+
EXPECT_TRUE(IsBadVersionTest("Adreno (TM) 620"));
168+
EXPECT_TRUE(IsBadVersionTest("Adreno (TM) 610"));
169+
EXPECT_TRUE(IsBadVersionTest("Adreno (TM) 530"));
170+
EXPECT_TRUE(IsBadVersionTest("Adreno (TM) 512"));
171+
EXPECT_TRUE(IsBadVersionTest("Adreno (TM) 509"));
172+
EXPECT_TRUE(IsBadVersionTest("Adreno (TM) 508"));
173+
EXPECT_TRUE(IsBadVersionTest("Adreno (TM) 506"));
174+
EXPECT_TRUE(IsBadVersionTest("Adreno (TM) 505"));
175+
EXPECT_TRUE(IsBadVersionTest("Adreno (TM) 504"));
176+
EXPECT_TRUE(IsBadVersionTest("Adreno (TM) 630"));
177177
EXPECT_FALSE(IsBadVersionTest("Adreno (TM) 640"));
178178
EXPECT_FALSE(IsBadVersionTest("Adreno (TM) 650"));
179179
}

0 commit comments

Comments
 (0)