b-luk 3dda832e05
Add build-time checks for ImpellerC's SkSL compiler (#180861)
Adds build-time checks for ImpellerC's SkSL compiler in two places:
- The `CompilerSkSL` class in `spirv_sksl.cc` generates the compiled
SkSL from the user's input shader code. It has an existing
`detect_unsupported_resources` method which analyzes the generated
`ParsedIR` to detect various features that SkSL does not support (e.g.
UBOs and SSBOs, push constant blocks, and user specified inputs). This
PR adds additional checks to `detect_unsupported_resources` to detect
array initialization using array initializers (e.g. `float[](1.0,
2.0)`), which is not supported by SkSL. This specifically addresses
#125630.
- In the main `Compiler` class in `compiler.cc`, when compiling to SkSL,
validate the compiled SkSL by using it to create a `SkRuntimeEffect`.
Some invalid SkSL cases, like array assignment (`float[2] float_array =
another_float_array;`) are hard to detect from the `ParsedIR`, so
`CompilerSkSL` does not attempt to detect these invalid cases. The
validation added in `Compiler` will catch all of these cases after SkSL
compilation. The error messages produced from this validation are less
informative than error messages from `CompilerSkSL`'s checks. It
surfaces the error produced by Skia's SkSL parser and outputs the entire
generated SkSL file (which can be substantially different from the
user's input shader code).

Fixes #125630.

## 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
2026-01-13 16:05:45 +00:00
..
2025-10-09 19:44:25 +00:00

Flutter Engine

Setting up the Engine development environment

See here