Skip to content

Adds opengles to engine dart tests#180704

Closed
gaaclarke wants to merge 36 commits intoflutter:masterfrom
gaaclarke:flutter-tester-opengles
Closed

Adds opengles to engine dart tests#180704
gaaclarke wants to merge 36 commits intoflutter:masterfrom
gaaclarke:flutter-tester-opengles

Conversation

@gaaclarke
Copy link
Member

@gaaclarke gaaclarke commented Jan 8, 2026

These fail to make a display. I tried to get it working but it appears that it isn't actually required for these tests to pass so I gave up.

fixes #180601

Pre-launch Checklist

If you need help, consider asking for advice on the #hackers-new channel on Discord.

Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the gemini-code-assist bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.

@github-actions github-actions bot added the engine flutter/engine related. See also e: labels. label Jan 8, 2026
@gaaclarke gaaclarke marked this pull request as ready for review January 24, 2026 00:46
Copy link
Contributor

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

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 running engine Dart tests with an OpenGL ES backend via Impeller. This is achieved by introducing a TesterContextGLESFactory that sets up an EGL context using ANGLE on top of SwiftShader (Vulkan). The changes touch the build system to include necessary dependencies and source files, the test runner to add "opengles" as a backend option, and the main test executable to wire up the new context factory. The author notes that creating a display currently fails but is not a blocker for the tests. My review includes suggestions to improve code clarity and simplify some C++ constructs in the new factory implementation.


// |GPUSurfaceGLDelegate|
bool GLContextPresent(const GLPresentInfo& present_info) override {
return true; // PBuffer doesn't present? Or maybe eglSwapBuffers?
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The comment here and the commented-out code below suggest some uncertainty about the correct behavior for presenting a PBuffer. For an offscreen p-buffer, eglSwapBuffers is often a no-op. If returning true is the intended behavior for this testing context, it would be clearer to state that explicitly rather than posing it as a question. For example: // PBuffers are not presented to a screen, so this is a no-op.

@b-luk
Copy link
Contributor

b-luk commented Jan 27, 2026

Initial results of investigating the tests failures:

Running the tests on Mac

These currently pass, but this is misleading. There's an issue that makes the --impeller-backend=opengles tests actually run using vulkan, not opengles.

tester_context = TesterContextGLESFactory::Create() fails, returning nullptr. Specifically, it's failing when querying for the extensions EGL_ANGLE_platform_angle_vulkan and EGL_ANGLE_platform_angle_device_type_swiftshader here. This failure is silent, and tester_context just gets set to nullptr.

Then immediately after this, the Vulkan tester_context code runs and creates a Vulkan tester_context. The vulkan code runs because it doesn't have an explicit settings.requested_rendering_backend == "vulkan" check. It runs as long as tester_context is not set, which is the case when TesterContextGLESFactory fails.

So tests with --impeller-backend=opengles misleadingly end up using the vulkan backend. The tests were never actually running with an opengles backend.

I think we should use an explicit settings.requested_rendering_backend == "vulkan" check before creating a Vulkan tester_context.

If I add this check so that it doesn't unexpectly use Vulkan, tester_context remains null (because of the issue with extensions missing above), and the tester exits here without running any tests.

Running the tests on Linux

With --impeller-backend=vulkan

When running with a vulkan backend, for some reason the tester segfaults when the angle deps are included in the build rule. Running with lldb gives this stack trace.

trace
(lldb) bt
* thread #1, name = 'flutter_tester', stop reason = signal SIGSEGV: invalid permissions for mapped object (fault address=0x55555b43b3a0)
  * frame #0: 0x000055555b43b3a0 flutter_tester`vkGetInstanceProcAddr
    frame #1: 0x000055555a11b7b8 flutter_tester`impeller::vk::detail::DispatchLoaderDynamic::init(this=0x000055555b3a3f08, getInstanceProcAddr=(flutter_tester`vkGetInstanceProcAddr)) at vulkan.hpp:20845:50
    frame #2: 0x000055555a11559a flutter_tester`impeller::ContextVK::Setup(this=0x000055555b450f70, settings=Settings @ 0x00007fffffff9a70) at context_vk.cc:156:14
    frame #3: 0x000055555a1153f5 flutter_tester`impeller::ContextVK::Create(settings=Settings @ 0x00007fffffffa7f0) at context_vk.cc:107:12
    frame #4: 0x0000555557fd5efe flutter_tester`flutter::(anonymous namespace)::TesterContextVK::Initialize(this=0x000055555b4501a0, enable_validation=false) at tester_context_vk_factory.cc:60:16
    frame #5: 0x0000555557fd5ad7 flutter_tester`flutter::TesterContextVKFactory::Create(enable_validation=false) at tester_context_vk_factory.cc:122:17
    frame #6: 0x0000555557fbc23e flutter_tester`flutter::(anonymous namespace)::CreateTesterContext(settings=0x00007fffffffcd10) at tester_main.cc:75:9
    frame #7: 0x0000555557fbb471 flutter_tester`flutter::RunTester(settings=0x00007fffffffcd10, run_forever=false, multithreaded=true) at tester_main.cc:333:51
    frame #8: 0x0000555557fbceb2 flutter_tester`main(argc=11, argv=0x00007fffffffd488) at tester_main.cc:638:10
    frame #9: 0x00007ffff7cdcca8 libc.so.6`__libc_start_call_main(main=(flutter_tester`main at tester_main.cc:572), argc=11, argv=0x00007fffffffd488) at libc_start_call_main.h:58:16
    frame #10: 0x00007ffff7cdcd65 libc.so.6`__libc_start_main_impl(main=(flutter_tester`main at tester_main.cc:572), argc=11, argv=0x00007fffffffd488, init=<unavailable>, fini=<unavailable>, rtld_fini=<unavailable>, stack_end=0x00007fffffffd478) at libc-start.c:360:3
    frame #11: 0x0000555557fbb0ea flutter_tester`_start + 42

I don't know why having these deps in the build rule causes this. The tests run on vulkan successfully if they are removed.

With --impeller-backend=opengles

FindSwiftShaderICDAtKnownPaths() fails on linux with the "Was asked to use SwiftShader but could not find the installable client driver (ICD) for the locally built SwiftShader" error from here.

This function is failing because the test executable on linux is out/ci/host_debug_unopt/exe.unstripped/flutter_tester, but vk_swiftshader_icd.json is located at out/ci/host_debug_unopt. On linux (different from mac), the flutter_tester executable that runs is located in an exe.unstripped subdirectory, which is a different directory than vk_swiftshader_icd.json. FindSwiftShaderICDAtKnownPaths() looks for vk_swiftshader_icd.json in the same directory as the executable, so it fails.

I added a check so that if the executable directory ends with exe.unstripped, it looks in the parent directory for vk_swiftshader_icd.json. This makes FindSwiftShaderICDAtKnownPaths() succeed.

With this fix, the linux opengles tester successfully creates a display. Unlike on mac, all the queried extensions are found. However, the call to eglInitialize() fails. The following errors get output:

errors
ERR: vk_renderer.cpp:193 (VerifyExtensionsPresent): Extension not supported: VK_EXT_headless_surface
ERR: vk_renderer.cpp:193 (VerifyExtensionsPresent): Extension not supported: VK_EXT_headless_surface
ERR: vk_renderer.cpp:193 (VerifyExtensionsPresent): Extension not supported: VK_KHR_surface
ERR: vk_renderer.cpp:193 (VerifyExtensionsPresent): Extension not supported: VK_KHR_surface
ERR: Display.cpp:1093 (initialize): ANGLE Display::initialize error 0: Internal Vulkan error (-7): A requested extension is not supported, in ../../../flutter/third_party/angle/src/libANGLE/renderer/vulkan/vk_renderer.cpp, enableInstanceExtensions:2258.
ERR: Display.cpp:1093 (initialize): ANGLE Display::initialize error 0: Internal Vulkan error (-7): A requested extension is not supported, in ../../../flutter/third_party/angle/src/libANGLE/renderer/vulkan/vk_renderer.cpp, enableInstanceExtensions:2258.
INFO: EGL CRITICAL: eglInitialize: Internal Vulkan error (-7): A requested extension is not supported, in ../../../flutter/third_party/angle/src/libANGLE/renderer/vulkan/vk_renderer.cpp, enableInstanceExtensions:2258.

After the failed eglInitialize(), eglGetError() returns EGL_NOT_INITIALIZED. This failure causes tester_main's tester_context to be null, and the tester will exit without running any tests.

@b-luk
Copy link
Contributor

b-luk commented Jan 28, 2026

I figured out the issue causing --impeller-backend=vulkan to segfault when running on Linux. Here's the explanation from Gemini:


✦ The issue is caused by a symbol conflict between ANGLE's volk dependency and SwiftShader's Vulkan implementation.

Here is the detailed breakdown:

  1. ANGLE's volk Library: When you include //flutter/third_party/angle:libEGL_static, it brings in ANGLE's Vulkan backend dependencies, which includes volk (a meta-loader for
    Vulkan). volk defines vkGetInstanceProcAddr as a global variable (of type PFN_vkGetInstanceProcAddr, a function pointer) intended to be populated at runtime.

    • File: engine/src/flutter/third_party/angle/src/third_party/volk/volk.c defines PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;.
  2. SwiftShader: //flutter/third_party/swiftshader/src/Vulkan:swiftshader_libvulkan_static defines vkGetInstanceProcAddr as a global function (the actual Vulkan entry point).

    • File: engine/src/flutter/third_party/swiftshader/src/Vulkan/libVulkan.cpp exports vkGetInstanceProcAddr(...).
  3. The Conflict: flutter/shell/testing/tester_context_vk_factory.cc includes <vulkan/vulkan.h>, which declares vkGetInstanceProcAddr as a function prototype. However, during
    linking, if both ANGLE (with volk) and SwiftShader are present, the linker is resolving the vkGetInstanceProcAddr symbol to the global variable in volk instead of the function
    in SwiftShader (likely due to link order or symbol visibility).

  4. The Result:

    • The code context_settings.proc_address_callback = &vkGetInstanceProcAddr; in tester_context_vk_factory.cc ends up taking the address of the variable in volk (which is
      initialized to NULL/0) instead of the address of the function code in SwiftShader.
    • When you inspect vkGetInstanceProcAddr (e.g., in a debugger), you see NULL because the debugger is showing the value of the volk variable.
    • When the application attempts to call this "function" via the pointer, it tries to execute the data at the variable's address (which is 0), leading to a crash or failure.

vkGetInstanceProcAddr is invalid when both swiftshader and angle are linked. So instead of using vkGetInstanceProcAddr, I use the swiftshader vulkan icd (as specified by VULKAN_SO_PATH in swiftshader_path.h) to get the vulkan proc address.

This fixes the broken tests when using the Vulkan impeller backend.

I also modified run_tests.py so that it does not try to run metal backend tests when not on mac. This fixes the linux tests failing when attempting to use a metal backend.

The opengles backend issues described in my above comment remain. I will continue to investigate.

…s VULKAN_SO_PATH for proc_address_callback rather than using vkGetInstanceProcAddr
@gaaclarke
Copy link
Member Author

I also modified run_tests.py so that it does not try to run metal backend tests when not on mac. This fixes the linux tests failing when attempting to use a metal backend.

fyi that fix is also in #181503 which is merging soon, it also adds a dimension for metal. one will have to be added for opengles too.

b-luk added 6 commits January 28, 2026 15:10
…ls/gn

`angle_enable_metal` is True, which is the default
The other two angle_enable values need to be True (default) to enable opengles testing on mac
- Fill in shader_mappings
- Add a reactor worker to ContextGLES. The worker sets the current egl context when requested, and properly handles releasing the current context by using TesterGLContext
@b-luk
Copy link
Contributor

b-luk commented Jan 29, 2026

Did some more work to make most of the opengl tests pass:

  • Removed angle_enable special casing for mac host builds in flutter/tools/gn. This fixes the issue with missing EGL_ANGLE extensions when running on mac. After this, the opengles tests fail in the same way on mac and linux.
  • Fill in missing shader_mappings in tester_context_gles_factory.cc
  • Add a reactor worker to ContextGLES. The worker sets the current egl context when requested, and properly handles releasing the current context by using TesterGLContext

With these changes, the majority of tests run and pass on opengles. However, there are still a significant number of tests that crash on opengles. I disabled all these tests for now in run_tests.py. We can dig into these as a follow-up.

I also merged with HEAD, and changed impeller_enabled.dart to not use a fallback impellerBackend string if there's none specified in the arguments. This better matches what tester_main.cc does, which only uses a backend when the arguments specify one.

@b-luk
Copy link
Contributor

b-luk commented Jan 29, 2026

Still seeing a bunch of test failures. I will look into it.

@gaaclarke
Copy link
Member Author

Still seeing a bunch of test failures. I will look into it.

One of them is just a pylint: https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8691383561670995345/+/u/test:_pylint/stdout

b-luk added 8 commits January 29, 2026 11:38
…d AddTaskObserver() if the context is already current.

Otherwise, the added observer replaces the existing one, and the current context gets inadvertently cleared.
…is set but requested_rendering_backend is empty.

I think this case happens when running "flutter test --impeller-enabled", so I couldn't get rid of it like before.
This uses an empty() check, so unlike the original "!tester_context" check, this won't silently fall back to vulkan when trying and failing with a different backend
…testing, this takes longer than the default 30 min.
@b-luk
Copy link
Contributor

b-luk commented Feb 2, 2026

Updates since my last comment:

Disabled opengles tests

In an earlier commit, I disable a bunch of the opengles tests that weren't passing: cd5f614. From testing locally, after the most recent commits I think many (maybe all?) of these are now passing. So we should try re-enabling them. However, before trying this out, there's one blocking issue that I need to figure out how to fix first:

What's still broken:

A bunch of mac tests are failing. All fail with a similar error:

Shell: dyld[70143]: Library not loaded: ./libvulkan.dylib
Shell:   Referenced from: <4C4C4464-5555-3144-A11B-E98BA19D1512> /Volumes/Work/s/w/ir/x/w/flutter/bin/cache/artifacts/engine/darwin-x64/flutter_tester
Shell:   Reason: tried: './libvulkan.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS./libvulkan.dylib' (no such file), './libvulkan.dylib' (no such file), '/Volumes/Work/s/w/ir/x/w/flutter/packages/flutter/libvulkan.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Volumes/Work/s/w/ir/x/w/flutter/packages/flutter/libvulkan.dylib' (no such file), '/Volumes/Work/s/w/ir/x/w/flutter/packages/flutter/libvulkan.dylib' (no such file)

e.g. https://github.com/flutter/flutter/pull/180704/checks?check_run_id=62063259937

I tried adding libvulkan.dylib to the engine artifacts: 75d6aef. The generated engine artifacts after this can be seen here: https://storage.googleapis.com/flutter_archives_v2/flutter_infra_release/flutter/6fd5a1f13f0b36317b8b23162d92de11b3dc267a/darwin-x64/artifacts.zip. This is what's downloaded to the flutter/bin/cache/artifacts/engine/darwin-x64 directory and contains the flutter_tester executable which is run for these tests. With my commit, libvulkan.dylib is copied to this directory. But the flutter_tester runs don't seem to be able to find it.

Even if libvulkan.dylib can be found, would these tests pass? tester_context_vk_factory.cc loads vulkan by looking for libvk_swiftshader.dylib in the executable directory. And tester_context_gles_factory.cc looks for vk_swiftshader_icd.json in the executable directory (and that icd json file points to "./libvk_swiftshader.dylib"). So would we also have to copy libvk_swiftshader.dylib and vk_swiftshader_icd.json to the artifacts output (or to whatever location flutter_tester can find them)?

Looking more into how swiftshader is linked into flutter_tester, I found this PR: flutter/engine#48708. That PR seems to be doing the reverse of what this current PR does. It changes swiftshader loading from a dynamic library to a static library. But this current PR makes the vk and gles tester context factories try to dynamically load the swiftshader library. Would that previous PR be a signal that what we're doing here isn't the right way to do things, and we should instead be trying to statically link these vk/swiftshader libraries? Is trying to statically link those libraries compatible with using ANGLE?

@gaaclarke
Copy link
Member Author

A bunch of mac tests are failing. All fail with a similar error:

Shell: dyld[70143]: Library not loaded: ./libvulkan.dylib
Shell:   Referenced from: <4C4C4464-5555-3144-A11B-E98BA19D1512> /Volumes/Work/s/w/ir/x/w/flutter/bin/cache/artifacts/engine/darwin-x64/flutter_tester
Shell:   Reason: tried: './libvulkan.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS./libvulkan.dylib' (no such file), './libvulkan.dylib' (no such file), '/Volumes/Work/s/w/ir/x/w/flutter/packages/flutter/libvulkan.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Volumes/Work/s/w/ir/x/w/flutter/packages/flutter/libvulkan.dylib' (no such file), '/Volumes/Work/s/w/ir/x/w/flutter/packages/flutter/libvulkan.dylib' (no such file)

On macos you can check where an executable is getting its linked dynamic libraries with the tool: otool -L <path_to_executable>

If one of the dependencies is something like "./libvulkan.dylib" it's going to expect to find that library relative to the CWD when the executable is executed. The options are to change the install names in the macho headers for that executable to look somewhere else or to change the CWD when the tests are executed.

b-luk added 2 commits February 2, 2026 16:22
…s executable specifically for the opengles tests.

Revert the changes to tester_context_vk_factory.cc. These changes are no longer needed because the main flutter_tester executable no longer has ANGLE dependencies.
Change run_tests.py to use the flutter_tester_opengles executable for the opengles dart tests.
@b-luk
Copy link
Contributor

b-luk commented Feb 3, 2026

After discussing with gaaclarke, decided to go with a different approach. Instead of trying to make the existing flutter_tester executable support both vulkan and opengles, split the opengles testing into a different executable. This way, we avoid all the problems with one executable having both a static swiftshader library (used by the vulkan test context) and a dynamic swiftshader library (used by opengles through angle).

The existing flutter_tester executable is mostly unchanged, and will not support --impeller-backend=opengles. A new flutter_tester_opengles executable is used for the opengles tests.

This also means we don't have to copy various vulkan/swiftshader dylib files to the artifacts directory. These libraries are built and output to the engine output directory along with the flutter_tester and flutter_tester_opengles executables. So flutter_tester_opengles is able to find and use them. The engine artifacts are used for "flutter test" shell commands. These commands will continue to use flutter_tester and will not support testing with an opengles impeller backend.

@b-luk
Copy link
Contributor

b-luk commented Feb 3, 2026

/gemini review

Copy link
Contributor

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

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 running engine Dart tests with an OpenGL ES backend, leveraging ANGLE and SwiftShader. The changes include refactoring the flutter_tester build configuration into a template to support a new flutter_tester_opengles executable, adding a TesterContextGLESFactory for creating an Impeller GLES context, and updating the test runner script to include the 'opengles' backend. My feedback focuses on improving the clarity and maintainability of comments in the new tester_context_gles_factory.cc file to remove ambiguity and better document known issues.


// |GPUSurfaceGLDelegate|
bool GLContextPresent(const GLPresentInfo& present_info) override {
return true; // PBuffer doesn't present? Or maybe eglSwapBuffers?
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

This comment indicates some uncertainty. For offscreen rendering to a PBuffer, eglSwapBuffers is often a no-op. Since these are offscreen tests where the result is not displayed, simply returning true is likely correct. It would be good to update the comment to reflect this reasoning for better maintainability.

Suggested change
return true; // PBuffer doesn't present? Or maybe eglSwapBuffers?
return true; // For offscreen rendering to a PBuffer, presentation is a no-op.
References
  1. Documentation should be useful and explain the why and the how. A more confident and explanatory comment improves readability and maintainability. (link)

Comment on lines +394 to +396
// Render to surface is true?
// For offscreen testing, we might still want to say "true" to create
// ON-SCREEN surface abstraction but backed by the delegate's FBO/Surface.
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The question in the comment at line 394 suggests uncertainty. The following lines explain the reasoning well. It would be clearer to have a single, more direct comment explaining the intent.

Suggested change
// Render to surface is true?
// For offscreen testing, we might still want to say "true" to create
// ON-SCREEN surface abstraction but backed by the delegate's FBO/Surface.
// For offscreen testing, we create a surface that behaves like an on-screen
// one but is backed by the delegate's FBO/Surface. This is controlled by
// the `render_to_surface` parameter being set to `true`.
References
  1. Optimize for readability. A clear, assertive comment is more readable than a question followed by an explanation. (link)

@b-luk
Copy link
Contributor

b-luk commented Feb 3, 2026

This is passing all the tests now (except for the opengles_skipped_tests specified in run_tests.py). So I think it's ready for you to take a look at @gaaclarke

Copy link
Member Author

@gaaclarke gaaclarke left a comment

Choose a reason for hiding this comment

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

Looking good. I have some questions about some additions and requests to remove duplication. Do you want to fork this and make it your own PR? Then I can approve it. I won't be able to approve it while it's still under my branch.


namespace {

static void FindSwiftShaderICDAtKnownPaths() {
Copy link
Member Author

Choose a reason for hiding this comment

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

This function exists already in impeller/playground/backend/vulkan/swiftshader_utilities.cc, can we share it?

}
}

void SetupSwiftshaderOnce(bool use_swiftshader) {
Copy link
Member Author

Choose a reason for hiding this comment

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

Same for this other stuff it looks like.

// Impeller should only be enabled if the Metal backend is enabled.
#define TESTER_ENABLE_METAL \
(IMPELLER_SUPPORTS_RENDERING && IMPELLER_ENABLE_METAL)
(IMPELLER_SUPPORTS_RENDERING && IMPELLER_ENABLE_METAL && SHELL_ENABLE_METAL)
Copy link
Member Author

Choose a reason for hiding this comment

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

Aren't IMPELLER_ENABLE_METAL and SHELL_ENABLE_METAL synonymous? I'm not sure when you'd have one and not the other.

dart_tests = glob.glob(f'{dart_tests_dir}/*_test.dart')

impeller_backends = ['', 'vulkan']
opengles_skipped_tests = [
Copy link
Member Author

Choose a reason for hiding this comment

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

Are these every test that actually uses opengles though? I'm seeing other tests that pass are things like platform channels tests, which never touch graphics. What are some of the failures we have here?

@b-luk b-luk mentioned this pull request Feb 5, 2026
9 tasks
@b-luk
Copy link
Contributor

b-luk commented Feb 6, 2026

Looking good. I have some questions about some additions and requests to remove duplication. Do you want to fork this and make it your own PR? Then I can approve it. I won't be able to approve it while it's still under my branch.

As discussed, forked this to #181933

@b-luk b-luk closed this Feb 6, 2026
github-merge-queue bot pushed a commit that referenced this pull request Feb 9, 2026
Forked from #180704. See comments
there for more context.

Enables most of the dart tests for opengles. There are some which aren't
passing, which are filtered out in run_tests.py.

Fixes an issue in snapshot_controller_impeller.cc where a returned
GLContextResult is ignored. The returned GLContextResult is potentially
an RAII object, so it must stay in scope for subsequent GL calls.

Fixes #180601

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

---------

Co-authored-by: Aaron Clarke <[email protected]>
Co-authored-by: gaaclarke <[email protected]>
flutter-zl pushed a commit to flutter-zl/flutter that referenced this pull request Feb 10, 2026
Forked from flutter#180704. See comments
there for more context.

Enables most of the dart tests for opengles. There are some which aren't
passing, which are filtered out in run_tests.py.

Fixes an issue in snapshot_controller_impeller.cc where a returned
GLContextResult is ignored. The returned GLContextResult is potentially
an RAII object, so it must stay in scope for subsequent GL calls.

Fixes flutter#180601

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

---------

Co-authored-by: Aaron Clarke <[email protected]>
Co-authored-by: gaaclarke <[email protected]>
rickhohler pushed a commit to rickhohler/flutter that referenced this pull request Feb 19, 2026
Forked from flutter#180704. See comments
there for more context.

Enables most of the dart tests for opengles. There are some which aren't
passing, which are filtered out in run_tests.py.

Fixes an issue in snapshot_controller_impeller.cc where a returned
GLContextResult is ignored. The returned GLContextResult is potentially
an RAII object, so it must stay in scope for subsequent GL calls.

Fixes flutter#180601

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

---------

Co-authored-by: Aaron Clarke <[email protected]>
Co-authored-by: gaaclarke <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

engine flutter/engine related. See also e: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Run flutter_test tests against Metal and OpenGLES backends

2 participants