Skip to content

Support GL_TEXTURE_EXTERNAL_OES embedder textures in Impeller - #195857

Merged
auto-submit[bot] merged 6 commits into
flutter:masterfrom
robert-ancell:impeller-external-oes-texture
Nov 12, 2026
Merged

auto-submit[bot] merged 6 commits into
flutter:masterfrom
robert-ancell:impeller-external-oes-texture

Conversation

@robert-ancell

Copy link
Copy Markdown
Contributor

Impeller wrapped all OpenGL external textures as GL_TEXTURE_2D, so textures with a GL_TEXTURE_EXTERNAL_OES target (e.g. from a GTK FlTextureGL) failed to draw. Skia handles these, so this is a regression on Linux now Impeller is the default.

GL_TEXTURE_RECTANGLE textures are also unsupported by Impeller and are not fixed here; they are now rejected with an error instead of failing to draw.

Fixes #195543

Impeller wrapped all OpenGL external textures as GL_TEXTURE_2D, so textures
with a GL_TEXTURE_EXTERNAL_OES target (e.g. from a GTK FlTextureGL) failed to
draw. Skia handles these, so this is a regression on Linux now Impeller is the
default.

GL_TEXTURE_RECTANGLE textures are also unsupported by Impeller and are not
fixed here; they are now rejected with an error instead of failing to draw.

Fixes flutter#195543
@flutter-dashboard flutter-dashboard Bot added the CICD Run CI/CD label Nov 3, 2026
@github-actions github-actions Bot added the engine flutter/engine related. See also e: labels. label Nov 3, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds support for resolving external OES textures (GL_TEXTURE_EXTERNAL_OES) in the Impeller OpenGL backend for the embedder, and introduces a corresponding unit test. Feedback on the unit test points out that calling EGL functions on platforms without EGL support (such as macOS) will result in a segmentation fault, and that the static texture ID is not reset between test runs, which can cause test pollution. It is recommended to gracefully skip the test when EGL extensions are unsupported and to reset the static texture variable.

@walley892 walley892 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few comments.

The headers are not visible to the embedder_unittests target, so gn check
rejected the quoted includes.
Create the texture for each frame and delete it in the destruction
callback, so no GL state is left over between test runs.
Check that a texture with an unsupported target is rejected with an error.

@walley892 walley892 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks!

@walley892 walley892 added the autosubmit Merge PR when tree becomes green via auto submit App label Nov 11, 2026
@auto-submit auto-submit Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Nov 11, 2026
@auto-submit

auto-submit Bot commented Nov 11, 2026

Copy link
Copy Markdown
Contributor

autosubmit label was removed for flutter/flutter/195857, because - The status or check suite Google testing has failed. Please fix the issues identified (or deflake) before re-applying this label.

@robert-ancell

Copy link
Copy Markdown
Contributor Author

@loic-sharma I need some insight into the Google testing failure.

@loic-sharma

loic-sharma commented Nov 12, 2026 •

Copy link
Copy Markdown
Member

@robert-ancell One of Google's internal apps had Linux golden tests with text. It seems this change has caused subtle differences in the pixels produced for text, but nothing looked unexpected. I suppressed the test failure.

@loic-sharma loic-sharma added the autosubmit Merge PR when tree becomes green via auto submit App label Nov 12, 2026
@auto-submit
auto-submit Bot added this pull request to the merge queue Nov 12, 2026
Merged via the queue into flutter:master with commit 42cd7ee Nov 12, 2026
25 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Nov 12, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Nov 13, 2026
…13653)

Manual roll Flutter from 9c427b5d7b1c to 1b9585481095 (32 revisions)

Manual roll requested by [email protected]

flutter/flutter@9c427b5...1b95854

2026-11-13 [email protected] Roll pub packages (flutter/flutter#196541)
2026-11-13 [email protected] Do not route PRs for review without cla, convert to draft (flutter/flutter#196341)
2026-11-13 [email protected] Roll Skia from d87a6c04da74 to 11f46cfe8838 (13 revisions) (flutter/flutter#196533)
2026-11-13 [email protected] [flutter_tools, flutter_test] Deprecate --experimental-faster-testing (flutter/flutter#196123)
2026-11-13 [email protected] [flutter_tools] Handle RPCError in ScreenshotCommand.runSkia (flutter/flutter#196132)
2026-11-13 [email protected] Roll Dart SDK from a8b961fd48bb to c91e8b6674e2 (2 revisions) (flutter/flutter#196502)
2026-11-13 [email protected] Roll Skia from 0c5ce4960cef to d87a6c04da74 (12 revisions) (flutter/flutter#196497)
2026-11-13 [email protected] Don't call `skia_image()`  for raster-owned images in `DlImage::Equals` (flutter/flutter#196473)
2026-11-13 [email protected] [flutter_tools] Require FlutterCommandRunner DI fields and extract findCommandName (flutter/flutter#196331)
2026-11-13 [email protected] [web] Unify ui.Canvas behind a shared EngineCanvas frontend (flutter/flutter#196348)
2026-11-13 [email protected] Link to MediaQuery.displayFeaturesOf from DisplayFeatures (flutter/flutter#193728)
2026-11-13 [email protected] Removes reference to unnecessary ensureSemantics call in doc (flutter/flutter#195831)
2026-11-13 [email protected] [flutter_tools] Register trackWidgetCreation in AppleBuildOptionsBundle (flutter/flutter#196078)
2026-11-12 [email protected] [Android] Skip the HardwareBuffer defect fallback for platform views (flutter/flutter#193441)
2026-11-12 [email protected] Fix supports_decal check in framebuffer_blend.frag (flutter/flutter#196227)
2026-11-12 [email protected] [ios] Update the screen in didUpdateEffectiveGeometry (flutter/flutter#195508)
2026-11-12 [email protected] [flutter_tools] Add `Cache-Control` headers for web test assets (flutter/flutter#196414)
2026-11-12 [email protected] Roll Skia from 3b71ec08218f to 0c5ce4960cef (16 revisions) (flutter/flutter#196472)
2026-11-12 [email protected] [web] Render bounded ImageFilter.blur on wimp (flutter/flutter#196081)
2026-11-12 [email protected] Roll Dart SDK from 69567bd3c427 to a8b961fd48bb (2 revisions) (flutter/flutter#196464)
2026-11-12 [email protected] [engine] Release the Skia OpenGL resource context on shutdown (flutter/flutter#193592)
2026-11-12 [email protected] [web] Fix decoding of still AVIF images on Chrome (flutter/flutter#195958)
2026-11-12 [email protected] Gate SurfaceControl context setting on API 34+ (flutter/flutter#196394)
2026-11-12 [email protected] [flutter_tools] Only pass on a valid root tool in DASH__TOOL (flutter/flutter#196228)
2026-11-12 [email protected] Support GL_TEXTURE_EXTERNAL_OES embedder textures in Impeller (flutter/flutter#195857)
2026-11-12 [email protected] Stop building linux/wasm_release in local_engine_builds (flutter/flutter#196345)
2026-11-12 [email protected] Split flame out of Linux customer_testing (flutter/flutter#196347)
2026-11-12 Jiwon Lee [Windows] Fix Space input after Alt+Space with previous Microsoft IME (flutter/flutter#192105)
2026-11-12 [email protected] [flutter_tools] Add ToolExtensionException, exit() guard, graceful shutdown, and base modifiers (flutter/flutter#195908)
2026-11-12 [email protected] Roll Packages from 653628e to 14f9933 (9 revisions) (flutter/flutter#196450)
2026-11-12 [email protected] Roll Dart SDK from e5add7a25b32 to 69567bd3c427 (2 revisions) (flutter/flutter#196437)
2026-11-12 [email protected] Roll Skia from 9aa2513a4ac9 to 3b71ec08218f (1 revision) (flutter/flutter#196436)

If this roll has caused a breakage, revert this CL and set the roller
to dry run mode using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC [email protected],[email protected] on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

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

Labels

CICD Run CI/CD engine flutter/engine related. See also e: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Impeller] Honour FlutterOpenGLTexture.target for GL_TEXTURE_EXTERNAL_OES in embedder external textures

3 participants