Make compileShader() retry without sksl if it fails with sksl.#183146
Make compileShader() retry without sksl if it fails with sksl.#183146auto-submit[bot] merged 2 commits intoflutter:masterfrom
Conversation
There was a problem hiding this comment.
Code Review
This pull request updates compileShader to retry compilation without SkSL if the initial attempt fails, which is a useful improvement for handling shaders that are not SkSL-compatible. The changes in shader_compiler.dart introduce this retry logic, and the tests in shader_compiler_test.dart are updated to cover these new scenarios. The implementation is mostly correct, but I have a couple of suggestions to improve logging and error reporting for better debuggability.
packages/flutter_tools/lib/src/build_system/tools/shader_compiler.dart
Outdated
Show resolved
Hide resolved
| if (failure) { | ||
| if (fatal) { | ||
| throw ShaderCompilerException._( | ||
| 'Shader compilation of "${input.path}" to "$outputPath" ' | ||
| 'failed with exit code $code.', | ||
| 'failed with exit code ${result.exitCode}.', | ||
| ); | ||
| } |
There was a problem hiding this comment.
When a retry fails, the exception message reports the exit code from the initial attempt (result.exitCode), not the retry attempt. This is because retryResult is out of scope in this final error handling block, which could be confusing when debugging.
Consider refactoring to store the exit code of the last failed command in a variable that can be accessed here to provide a more accurate error message.
There was a problem hiding this comment.
I don't think this matters because impellerc only has a single possible failing exit code: 1. If impellerc changes in the future to have multiple exit codes, the logic here will be updated to log and handle different exit codes differently.
Roll Flutter from d3dd7744e81f to d18214307703 (33 revisions) flutter/flutter@d3dd774...d182143 2026-03-06 [email protected] Roll Packages from 8d5c5cd to fe3de64 (2 revisions) (flutter/flutter#183308) 2026-03-06 [email protected] Roll Dart SDK from 1b51451cdb99 to 7c7c1e3d024d (2 revisions) (flutter/flutter#183294) 2026-03-06 [email protected] Roll Dart SDK from 9ac06cdd1801 to 1b51451cdb99 (9 revisions) (flutter/flutter#183289) 2026-03-06 [email protected] Add GitHub workflows to assist with release tasks (flutter/flutter#181978) 2026-03-06 [email protected] [Impeller] Fix new convex path shadow generation in perspective (flutter/flutter#183187) 2026-03-06 [email protected] Roll pub packages (flutter/flutter#183178) 2026-03-05 [email protected] fix: use double quotes in settings.gradle.kts template (flutter/flutter#183081) 2026-03-05 [email protected] Add fallbackColor for PredictiveBackPageTransitionBuilder and PredictiveBackFullscreenPageTransitionBuilder (flutter/flutter#182690) 2026-03-05 [email protected] Simplify TesterContextGLES (multithreading logic not needed), and enable some tests that now pass (flutter/flutter#183250) 2026-03-05 [email protected] Roll Skia from a94df1cdabb0 to a69ef43650ee (14 revisions) (flutter/flutter#183280) 2026-03-05 [email protected] Windowing implementation of `showDialog` that uses a native desktop window to display the content (flutter/flutter#181861) 2026-03-05 [email protected] Build CocoaPod plugin frameworks for Add to App FlutterPluginRegistrant (flutter/flutter#183239) 2026-03-05 [email protected] Extend the Linux web_skwasm_tests_1 timeout to 45 minutes (flutter/flutter#183247) 2026-03-05 [email protected] Update Dart to 3.12 beta 2 (flutter/flutter#183251) 2026-03-05 [email protected] Replace the rest of the references to `flutter/engine` with `flutter/flutter` (flutter/flutter#182938) 2026-03-05 [email protected] chore: convert android_verified_input to pub-workspace (flutter/flutter#183175) 2026-03-05 [email protected] Add await to flutter_test callsites (flutter/flutter#182983) 2026-03-05 [email protected] [iOS] Skip gesture recognizer reset workaround on iOS 26+ (flutter/flutter#183186) 2026-03-05 [email protected] Add warning for plugins not migrated to UIScene (flutter/flutter#182826) 2026-03-05 [email protected] Roll Fuchsia Linux SDK from JJw5EJ87vLGqFVl4h... to 8ay15_eQOEgPHCypm... (flutter/flutter#183255) 2026-03-05 [email protected] Roll Skia from ada0b7628c79 to a94df1cdabb0 (2 revisions) (flutter/flutter#183249) 2026-03-05 [email protected] Roll Packages from 82baf93 to 8d5c5cd (2 revisions) (flutter/flutter#183269) 2026-03-05 [email protected] Add `UnlabaledLeafNodeEvaluation` (flutter/flutter#182872) 2026-03-04 [email protected] Re-specify the ndk version in various test apps, to prevent ndk download (flutter/flutter#183134) 2026-03-04 [email protected] Eliminate rebuilds for Scaffold FAB animation (flutter/flutter#182331) 2026-03-04 [email protected] Add Michal Kucharski to AUTHORS (flutter/flutter#182366) 2026-03-04 [email protected] Merge changelog from 3.41.4 stable. (flutter/flutter#183243) 2026-03-04 [email protected] Allow stylus support on windows (flutter/flutter#165323) 2026-03-04 [email protected] Fix docs on SingletonFlutterWindow.supportsShowingSystemContextMenu (flutter/flutter#183142) 2026-03-04 [email protected] Roll Packages from 9083bc9 to 82baf93 (5 revisions) (flutter/flutter#183240) 2026-03-04 [email protected] Fixes FocusHighlightMode on Android when typing in software keyboard (flutter/flutter#180753) 2026-03-04 [email protected] Make compileShader() retry without sksl if it fails with sksl. (flutter/flutter#183146) 2026-03-04 [email protected] [web] Use pointer-events: auto for non-interactive leaf semantics nodes (flutter/flutter#183077) If this roll has caused a breakage, revert this CL and stop the roller 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: ...
…er#183146) Updates `compileShader()` in `shader_compiler.dart` to retry `impellerc` without sksl if calling it with sksl fails. Fixes flutter#182400 <details><summary>Running an app with a non-sksl-compatible shader:</summary> ``` ❯ flutter run -d mac Launching lib/main.dart on macOS in debug mode... warning: Shader `/Users/bensonluk/projects/hello_flutter/shaders/simple.frag` is incompatible with SkSL. This shader will not load when running with the Skia backend. impellerc failure: There was a compiler error: SkSL does not support array initializers: /Users/bensonluk/projects/hello_flutter/shaders/simple.frag:12 Project /Users/bensonluk/projects/hello_flutter built and packaged successfully. Building macOS application... ✓ Built build/macos/Build/Products/Debug/hello_flutter.app 2026-03-03 11:38:35.093 hello_flutter[76976:83279294] Running with merged UI and platform thread. Experimental. Failed to foreground app; open returned 1 Syncing files to device macOS... 39ms Flutter run key commands. r Hot reload. 🔥🔥🔥 R Hot restart. h List all available interactive commands. d Detach (terminate "flutter run" but leave application running). c Clear the screen q Quit (terminate the application on the device). A Dart VM Service on macOS is available at: http://127.0.0.1:57483/Nr_RN4azQw8=/ The Flutter DevTools debugger and profiler on macOS is available at: http://127.0.0.1:57483/Nr_RN4azQw8=/devtools/?uri=ws://127.0.0.1:57483/Nr_RN4azQw8=/ws ``` </details> <details><summary>Running an app with multiple non-sksl-compatible shaders with longer error messages:</summary> ``` ❯ flutter run -d mac Launching lib/main.dart on macOS in debug mode... warning: Shader `/Users/bensonluk/projects/flutter_liquid_glass/packages/liquid_glass_renderer/lib/assets/shaders/liquid_glass_arbitrary.frag` is incompatible with SkSL. This shader will not load when running with the Skia backend. impellerc failure: Compilation failed for target: SkSL "/Users/bensonluk/projects/flutter_liquid_glass/packages/liquid_glass_renderer/lib/assets/shaders/liquid_glass_arbitrary.frag": Compiled to invalid SkSL: // This SkSL shader is autogenerated by spirv-cross. float4 flutter_FragCoord; uniform vec2 uSize; uniform vec2 uForegroundSize; ... (truncated 426 lines) SkSL Error: error: 58: loop index initializer must be a constant expression for (int x = _703; x <= sampleRadius; x++) ^^^^^^^^^^^^ error: 55: loop index initializer must be a constant expression for (int y = _692; y <= sampleRadius; y++) ^^^^^^^^^^^^ ... (truncated 350 lines) Full "liquid_glass_arbitrary" error output written to "/tmp/flutter_4Te755VI/impellerc_verbose_error.txt" warning: Shader `/Users/bensonluk/projects/flutter_liquid_glass/packages/liquid_glass_renderer/lib/assets/shaders/liquid_glass_geometry_blended.frag` is incompatible with SkSL. This shader will not load when running with the Skia backend. impellerc failure: Compilation failed for target: SkSL "/Users/bensonluk/projects/flutter_liquid_glass/packages/liquid_glass_renderer/lib/assets/shaders/liquid_glass_geometry_blended.frag": Compiled to invalid SkSL: // This SkSL shader is autogenerated by spirv-cross. float4 flutter_FragCoord; uniform vec2 uSize; uniform vec4 uOpticalProps; ... (truncated 229 lines) SkSL Error: error: 111: initializers are not permitted on arrays (or structs containing arrays) float param_2[96] = shapeData; ^^^^^^^^^ error: 112: unknown identifier 'param_2' float result = FLT_flutter_local_getShapeSDFFromArray(param, param_1, param_2); ^^^^^^^ ... (truncated 185 lines) Full "liquid_glass_geometry_blended" error output written to "/tmp/flutter_3qE1Q4aI/impellerc_verbose_error.txt" warning: Shader `/Users/bensonluk/projects/flutter_liquid_glass/packages/liquid_glass_renderer/lib/assets/shaders/liquid_glass_filter.frag` is incompatible with SkSL. This shader will not load when running with the Skia backend. impellerc failure: Compilation failed for target: SkSL "/Users/bensonluk/projects/flutter_liquid_glass/packages/liquid_glass_renderer/lib/assets/shaders/liquid_glass_filter.frag": Compiled to invalid SkSL: // This SkSL shader is autogenerated by spirv-cross. float4 flutter_FragCoord; uniform vec2 uSize; uniform vec4 uGlassColor; ... (truncated 426 lines) SkSL Error: error: 121: initializers are not permitted on arrays (or structs containing arrays) float param_2[96] = shapeData; ^^^^^^^^^ error: 122: unknown identifier 'param_2' float result = FLT_flutter_local_getShapeSDFFromArray(param, param_1, param_2); ^^^^^^^ ... (truncated 488 lines) Full "liquid_glass_filter" error output written to "/tmp/flutter_OQtgOkth/impellerc_verbose_error.txt" Project /Users/bensonluk/projects/flutter_liquid_glass/packages/liquid_glass_renderer/example built and packaged successfully.Command PhaseScriptExecution emitted errors but did not return a nonzero exit code to indicate failure Building macOS application... ✓ Built build/macos/Build/Products/Debug/liquid_glass_renderer_example.app 2026-03-03 11:39:31.435 liquid_glass_renderer_example[77352:83282562] Running with merged UI and platform thread. Experimental. Failed to foreground app; open returned 1 flutter: Initializing logger: lgr flutter: lgr.render.layer > WARNING: LiquidGlassLayer is only supported when using Impeller at the moment. Falling back to FakeGlass for LiquidGlassLayer. To prevent this warning, enable Impeller, or set LiquidGlassLayer.fake to true before you use liquid glass widgets on Skia. flutter: lgr.render.layer > WARNING: LiquidGlassLayer is only supported when using Impeller at the moment. Falling back to FakeGlass for LiquidGlassLayer. To prevent this warning, enable Impeller, or set LiquidGlassLayer.fake to true before you use liquid glass widgets on Skia. Syncing files to device macOS... 47ms Flutter run key commands. r Hot reload. 🔥🔥🔥 R Hot restart. h List all available interactive commands. d Detach (terminate "flutter run" but leave application running). c Clear the screen q Quit (terminate the application on the device). A Dart VM Service on macOS is available at: http://127.0.0.1:57532/tQZkdNat5B0=/ The Flutter DevTools debugger and profiler on macOS is available at: http://127.0.0.1:57532/tQZkdNat5B0=/devtools/?uri=ws://127.0.0.1:57532/tQZkdNat5B0=/ws ``` </details> ## 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
Updates
compileShader()inshader_compiler.dartto retryimpellercwithout sksl if calling it with sksl fails.Fixes #182400
Running an app with a non-sksl-compatible shader:
Running an app with multiple non-sksl-compatible shaders with longer error messages:
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-assistbot 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.