Skip to content

Stale / ghosted frames not cleared on TCL Android TV (PowerVR B-Series BXE-4-32) — OpenGLES backend renders correctly #189767

Open

Description

@Ali1Ammar

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).

  1. Run the app with Impeller enabled (the default → Vulkan) on a TCL G10 Android TV:
    flutter run --release -d <tv-device>
  2. Using the D-pad remote, move down through the vertical list of collections.
  3. Move left/right across the horizontal carousels within a row.
  4. 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)

  1. Force the OpenGLES backend (keeps Impeller) — renders correctly:
    <meta-data android:name="io.flutter.embedding.android.ImpellerBackend"
               android:value="opengles" />
  2. 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!
Image
2026-07-21.11.37.59.mp4

Activity

  1. added
    in triagePresently being triaged by the triage team
    workaround availableThere is a workaround available to overcome the issue
    engineflutter/engine related. See also e: labels.
    e: impellerImpeller rendering backend issues and features requests
    a: tvIssues on TV platforms
    platform-androidAndroid applications specifically
    fyi-androidFor the attention of Android platform team
    c: renderingUI glitches reported at the engine/skia or impeller rendering level
    and removed
    in triagePresently being triaged by the triage team
    on Jul 21, 2026
  2. puneetkukreja98 commented on Jul 21, 2026

    @puneetkukreja98
    Contributor

    @Ali1Ammar Thanks for reporting the issue. Routing this to team-engine for further investigation

  3. gaaclarke commented on Jul 27, 2026

    @gaaclarke
    Member

    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 getprop or adb shell dumpsys SurfaceFlinger? We could look into maybe blocklisting that SoC.

  4. added
    P2Important issues not at the top of the work list
    on Jul 27, 2026
  5. Ali1Ammar commented on Aug 18, 2026

    @Ali1Ammar
    Author

    Hi regarding this issue , on OpenGLES we also had some issue in image rendering , only skia work correctly

    Image
  6. gaaclarke commented on Aug 18, 2026

    @gaaclarke
    Member

    Okay, you're going to have to supply us with a minimal reproduction and we can see what we see.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work lista: tvIssues on TV platformsc: renderingUI glitches reported at the engine/skia or impeller rendering levele: impellerImpeller rendering backend issues and features requestsengineflutter/engine related. See also e: labels.needs repro infoAutomated crash report whose cause isn't yet knownplatform-androidAndroid applications specificallyteam-engineOwned by Engine teamtriaged-engineTriaged by Engine teamworkaround availableThere is a workaround available to overcome the issue

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions