Skip to content

Give the Vulkan test context the extensions Impeller requires - #193002

Merged
auto-submit[bot] merged 2 commits into
flutter:masterfrom
jwinarske:pr4/test-vulkan-extensions
Sep 30, 2026
Merged

auto-submit[bot] merged 2 commits into
flutter:masterfrom
jwinarske:pr4/test-vulkan-extensions

Conversation

@jwinarske

Copy link
Copy Markdown
Contributor

Impeller's capability check reads the extension lists the embedder declares rather than querying the driver. It wants VK_KHR_surface plus one WSI extension on the instance, and VK_KHR_swapchain on the device. TestVulkanContext enables none of them and reports none, so Impeller refuses the context:

[ERROR:impeller/renderer/backend/vulkan/capabilities_vk.cc(105)] Could not find the surface extension.
[ERROR:impeller/renderer/backend/vulkan/context_vk.cc(187)] Device has insufficient capabilities.
[ERROR:shell/platform/embedder/embedder_surface_vulkan_impeller.cc(78)] Failed to initialize Vulkan Context.

So no Impeller Vulkan embedder test can run at all today.

Request the surface extensions the ICD offers, create the logical device with VK_KHR_swapchain, and report both lists through FlutterVulkanRendererConfig. SwiftShader offers all of them. Falls back to a device without the extension if the ICD refuses it, and reports nothing when the surface extensions are absent, so a context that cannot serve Impeller still serves the Skia tests exactly as before.

None of this is used to present — the tests render into images — but Impeller will not build a context without it.

Also sets FlutterVulkanImage.struct_size in the backing store producer. The API says it must be sizeof(FlutterVulkanImage); the Skia path never checks, so leaving it zero went unnoticed.

Tests

No new ones. This is fixture plumbing whose effect is that the Impeller tests in the fifth and sixth of the series can run; the existing Skia Vulkan tests must keep passing, and do.

Fourth of six, from #187525. The fifth and sixth need it.

@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 updates the Vulkan test context to dynamically query, enable, and expose instance and device extensions (such as window-system integration extensions and VK_KHR_swapchain) required by Impeller's embedder path. Feedback suggests expanding the supported window-system integration (WSI) extensions to include Windows and macOS/iOS specific extensions to ensure cross-platform compatibility.

Comment thread engine/src/flutter/testing/test_vulkan_context.cc Outdated
@github-actions github-actions Bot added the engine flutter/engine related. See also e: labels. label Sep 18, 2026
Impeller's capability check reads the extension lists the embedder declares
rather than querying the driver: it wants VK_KHR_surface plus one WSI
extension on the instance, and VK_KHR_swapchain on the device. The test
context enables none of them and reports none, so Impeller refuses the
context with "Could not find the surface extension" and no Impeller Vulkan
embedder test can run at all.

Request the surface extensions the ICD offers, create the logical device
with VK_KHR_swapchain, and report both lists through
FlutterVulkanRendererConfig. Falls back to a device without the extension
when the ICD refuses it, and reports nothing when the surface extensions are
missing, so a context that cannot serve Impeller still serves the Skia tests
exactly as before.

None of this is used to present -- the tests render into images -- but
Impeller will not build a context without it.

Also set FlutterVulkanImage.struct_size in the backing store producer. The
API says it must be sizeof(FlutterVulkanImage); the Skia path never checks,
so leaving it zero went unnoticed.
@jwinarske
jwinarske force-pushed the pr4/test-vulkan-extensions branch from ee5b5b9 to 298bce9 Compare September 18, 2026 16:16
@flutter-dashboard

Copy link
Copy Markdown

Golden file changes have been found for this pull request. Click here to view and triage (e.g. because this is an intentional change).

If you are still iterating on this change and are not ready to resolve the images on the Flutter Gold dashboard, consider marking this PR as a draft pull request above. You will still be able to view image results on the dashboard, commenting will be silenced, and the check will not try to resolve itself until marked ready for review.

For more guidance, visit Writing a golden file test for package:flutter.

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing.

Changes reported for pull request #193002 at sha 298bce9

@flutter-dashboard flutter-dashboard Bot added the will affect goldens Changes to golden files label Sep 18, 2026
@gaaclarke
gaaclarke requested a review from andywolff September 21, 2026 18:12
@andywolff andywolff added the autosubmit Merge PR when tree becomes green via auto submit App label Sep 29, 2026
@auto-submit
auto-submit Bot added this pull request to the merge queue Sep 29, 2026
Merged via the queue into flutter:master with commit 29367a5 Sep 30, 2026
22 of 23 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Sep 30, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Sep 30, 2026
flutter/flutter@55b8f88...d649d2b

2026-09-30 [email protected] [Android] Update the CLI to reject passing engine configuration flags with a prebuilt binary in release mode (flutter/flutter#190870)
2026-09-30 [email protected] Roll Skia from af1e8b356dd1 to c7b323126bf0 (1 revision) (flutter/flutter#193569)
2026-09-30 [email protected] [web] Respect text affinity in getLineBoundary at a soft wrap (flutter/flutter#192664)
2026-09-30 [email protected] [tool] Migrate TestCommand and platform runner to modular dependency injection (flutter/flutter#190789)
2026-09-30 [email protected] Roll Skia from 3a20a0464d25 to af1e8b356dd1 (1 revision) (flutter/flutter#193564)
2026-09-30 [email protected] Roll Skia from 554ef62d11a9 to 3a20a0464d25 (6 revisions) (flutter/flutter#193556)
2026-09-30 [email protected] Use null aware elements in `platform_views.dart` (flutter/flutter#193214)
2026-09-30 [email protected] Replace deprecated `withOpacity` in `flutter_logo.dart` (flutter/flutter#192583)
2026-09-30 [email protected] Roll Skia from f441ca223b2b to 554ef62d11a9 (72 revisions) (flutter/flutter#193548)
2026-09-30 [email protected] Fix StrcmpFixed matching prefixes in the Vulkan embedder tests (flutter/flutter#192999)
2026-09-30 [email protected] Update Engine to test Android 17 AVD (flutter/flutter#193239)
2026-09-29 [email protected] Give the Vulkan test context the extensions Impeller requires (flutter/flutter#193002)
2026-09-29 [email protected] Rename "subtext" to "supportingTextPadding" in `FormField`'s documentation (flutter/flutter#183582)
2026-09-29 [email protected] Set --no-js-strongly-connected-components for DDC compiles by default (flutter/flutter#193485)
2026-09-29 [email protected] Split pre-AGP 8.3 module AAR test into a Java 17 pinned target (flutter/flutter#193467)
2026-09-29 [email protected] Remove no-shuffle from gen_defaults_test (flutter/flutter#192280)
2026-09-29 [email protected] Update guidance on bumping Dart (flutter/flutter#193131)
2026-09-29 [email protected] Remove vestigial `download_jdk` gclient var (flutter/flutter#188571)
2026-09-29 [email protected] Roll pub packages (flutter/flutter#193522)
2026-09-29 [email protected] [flutter_tools] Lazily initialize AndroidSdk platform and build-tools discovery (flutter/flutter#191972)
2026-09-29 [email protected] [tool] Migrate Web build subcommands and toolchain to modular dependency injection (flutter/flutter#190783)
2026-09-29 [email protected] Pin androidx.test dependencies in integration_test (flutter/flutter#193316)
2026-09-29 [email protected] [flutter_tools] Include flutter.js.map in web builds (flutter/flutter#192257)
2026-09-29 [email protected] [WebParagraph] Fixing edge cases for wrapping text (with newlines) (flutter/flutter#189858)
2026-09-29 [email protected] Bump customer testing version for flutter/devtools update (flutter/flutter#193511)
2026-09-29 [email protected] Roll Packages from ba0364a to 3c6ce59 (14 revisions) (flutter/flutter#193507)
2026-09-29 [email protected] [flutter_tools] Guard socket streams and done futures against socket reset errors (flutter/flutter#192941)

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

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
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. will affect goldens Changes to golden files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants