Repository navigation
Description
Is there an existing issue for this?
- I searched existing issues — this GPU (PowerVR B-Series BXE-4-32) on the
Vulkan backend is not covered.
Summary
On a TCL G10 Android TV (Imagination PowerVR B-Series BXE-4-32), Impeller
defaults to the Vulkan backend and produces stale / ghosted frames — the
previous frame is not cleared, so old UI stays composited over the new UI while
navigating. Forcing Impeller onto the OpenGLES backend on the same device
renders correctly. So this is Vulkan-backend-specific on this GPU, not a
general Impeller problem.
Backend confirmation
Backend lines captured by attaching with flutter run --verbose-system-logs
(same in debug and release):
Default (Vulkan) — BUG:
I/flutter: [IMPORTANT:flutter/shell/platform/android/android_context_vk_impeller.cc(62)] Using the Impeller rendering backend (Vulkan).
Forced OpenGLES — CORRECT:
I/flutter: [IMPORTANT:flutter/shell/platform/android/android_context_gl_impeller.cc(104)] Using the Impeller rendering backend (OpenGLES).
OpenGLES was forced via manifest meta-data (mirrors engine switch
impeller-backend=opengles):
<meta-data android:name="io.flutter.embedding.android.ImpellerBackend"
android:value="opengles" />Steps to reproduce
Minimal standalone reproduction: https://github.com/Ali1Ammar/impeller_tv_repro
(pure flutter/material, no assets, no network, no third-party packages).
- Run the app with Impeller enabled (the default → Vulkan) on a TCL G10 Android TV:
flutter run --release -d <tv-device>
- Using the D-pad remote, move down through the vertical list of collections.
- Move left/right across the horizontal carousels within a row.
- Watch the screen while navigating (Live TV playback is affected too).
Expected results
Each frame fully replaces the previous one — smooth navigation, no residual
imagery. This is exactly what happens on the OpenGLES backend and with
Impeller disabled (Skia).
Actual results (Vulkan backend)
Previous frames are not cleared — old UI stays ghosted/floating above the
new UI:
- Navigating down, the upper collections repeatedly reappear/redraw, so the
list looks like it loops and it's hard to reach the target section. - A headerless orphan row is composited below the current row with its own
focus highlight — two focus borders visible at once (see screenshot). The
section header jumps e.g. "Collection 3" → "Collection 6" with 4 & 5 overdrawn. - The stale layer stays frozen, then disappears later; the UI visibly shakes /
stutters; animations are choppy.
Workarounds (both verified on-device)
- Force the OpenGLES backend (keeps Impeller) — renders correctly:
<meta-data android:name="io.flutter.embedding.android.ImpellerBackend" android:value="opengles" />
- Disable Impeller (Skia):
io.flutter.embedding.android.EnableImpeller=false
/flutter run --no-enable-impeller.
Request
either denylist the Vulkan backend for PowerVR B-Series BXE-4-32 so
the engine falls back to the working OpenGLES path automatically, or fix the
Vulkan render-pass clear / damage-region handling on this GPU.
Affected device
| Model | TCL Smart TV G10 (G10_4K_GB_NF_32BIT) |
| SoC | Realtek RTD6748 |
| GPU | Imagination PowerVR B-Series BXE-4-32, OpenGL ES 3.2, driver 23.2@6491706 |
| OS | Android 12 (API 31) |
| ABI | armeabi-v7a (32-bit) (no 64-bit abilist) |
| Backend (default) | Impeller Vulkan — ghosts (android_context_vk_impeller.cc) |
| Backend (forced) | Impeller OpenGLES — correct (android_context_gl_impeller.cc) |
| Fingerprint | TCL/G10_4K_GB_NF_32BIT/G10:12/STT2.230203.001/AS10:user/release-keys |
Flutter Doctor output
[✓] Flutter (Channel stable, 3.44.2, on macOS 26.5.2 25F84 darwin-arm64, locale en-IQ)
• Flutter version 3.44.2 on channel stable at /opt/homebrew/share/flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision c9a6c48423 (2026-06-10), Engine revision 77e2e94772
• Dart version 3.12.2
• DevTools version 2.57.0
[✓] Android toolchain - develop for Android devices (Android SDK version 37.0.0)
• Platform android-37.0, build-tools 37.0.0
• Java version OpenJDK Runtime Environment (build 21.0.10)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 26.2)
[✓] Chrome - develop for the web
[✓] Connected device (3 available)
• Smart TV (mobile) • 10.223.233.198:5555 • android-arm • Android 12 (API 31)
[✓] Network resources
• No issues found!
Activity
[Impeller] Fall back to OpenGLES on Realtek RTD6748 (PowerVR BXE-4-32)
puneetkukreja98 commentedon Jul 21, 2026
@Ali1Ammar Thanks for reporting the issue. Routing this to team-engine for further investigation
gaaclarke commentedon Jul 27, 2026
This is most likely a faulty vulkan driver for this device. Is opting out to opengles a viable option for your app your are developing? Or do you need to target a range of devices where you'd want to use vulkan sometimes?
If opting out isn't an option can you give us the
adb shell getproporadb shell dumpsys SurfaceFlinger? We could look into maybe blocklisting that SoC.Ali1Ammar commentedon Aug 2, 2026
@gaaclarke you can find them here
https://github.com/Ali1Ammar/impeller_tv_repro/blob/main/impeller-report-20260720-171452/getprop.txt
https://github.com/Ali1Ammar/impeller_tv_repro/blob/main/impeller-report-20260720-171452/surfaceflinger.txt
more details:
https://github.com/Ali1Ammar/impeller_tv_repro/tree/main/impeller-report-20260720-171452
Ali1Ammar commentedon Aug 18, 2026
Hi regarding this issue , on OpenGLES we also had some issue in image rendering , only skia work correctly
gaaclarke commentedon Aug 18, 2026
Okay, you're going to have to supply us with a minimal reproduction and we can see what we see.