fix gaussian blur getting clipped with negative scale#184037
fix gaussian blur getting clipped with negative scale#184037auto-submit[bot] merged 3 commits intoflutter:masterfrom
Conversation
There was a problem hiding this comment.
Code Review
This pull request fixes a bug in Gaussian blur coverage calculation with negative scaling. The change in GaussianBlurFilterContents::GetFilterSourceCoverage now uses effect_transform.TransformDirection(blur_radius).Abs() to ensure the coverage rectangle is always expanded. The PR adds a new unit test, FilterSourceCoverageNegativeScale, to verify this logic and a new golden test, GaussianBlurFlipped, for visual regression testing. My review includes one suggestion to improve the new unit test.
engine/src/flutter/impeller/entity/contents/filters/gaussian_blur_filter_contents_unittests.cc
Outdated
Show resolved
Hide resolved
| effect_transform.Basis() * Vector3{blur_radius.x, blur_radius.y, 0.0}; | ||
| return output_limit.Expand(Point(blur_radii.x, blur_radii.y)); | ||
| Vector2 transformed_blur_radius = | ||
| effect_transform.TransformDirection(blur_radius).Abs(); |
There was a problem hiding this comment.
no action required: TransformDirection? That's a new one to me.
There was a problem hiding this comment.
Basis() just creates a new matrix where the translation is zeroed out
.Instead of creating a new matrix, TransformDirection just uses the existing matrix and ignores the translation.
There was a problem hiding this comment.
Yea, I see they are reducing operations. I'm a bit skeptical that the optimization is worth introducing the new concept though. The new matrix is on the stack and with vectorization the extra ops might have been free.
There was a problem hiding this comment.
Aye aye, I changed back to the manual matrix creation + multiplication.
There was a problem hiding this comment.
Oh you didn't have to do that, I put "no action required". I was just musing on wether that method should even exist. It does exist so feel free to use it.
|
@walley892 don't forget to fill in the checklist in the description |
|
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 Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. |
…11345) Manual roll Flutter from dd64978dfae1 to 82d96ef98a33 (89 revisions) Manual roll requested by tarrinneal@google.com flutter/flutter@dd64978...82d96ef 2026-03-24 116356835+AbdeMohlbi@users.noreply.github.com Fix RenderStack's documentation (flutter/flutter#183822) 2026-03-24 engine-flutter-autoroll@skia.org Roll Skia from a465876e3156 to f4e59f82dc69 (4 revisions) (flutter/flutter#184082) 2026-03-24 30870216+gaaclarke@users.noreply.github.com Refactor: Removes Geometry field from ColorSourceContents (flutter/flutter#183952) 2026-03-24 katelovett@google.com Refactor layout dimensions (flutter/flutter#184066) 2026-03-24 abadasamuelosp@gmail.com feat: Add --base-href support to flutter run for web (flutter/flutter#182709) 2026-03-24 43498643+mkucharski17@users.noreply.github.com Add LeanCode and contributors to AUTHORS (flutter/flutter#182997) 2026-03-24 dacoharkes@google.com [tools] Make sure `assemble` has a pubspec as cwd (flutter/flutter#184067) 2026-03-24 engine-flutter-autoroll@skia.org Roll Skia from bf4f2763b6e6 to a465876e3156 (5 revisions) (flutter/flutter#184068) 2026-03-24 evanwall@buffalo.edu fix gaussian blur getting clipped with negative scale (flutter/flutter#184037) 2026-03-24 34871572+gmackall@users.noreply.github.com Keep glyphs for variable fonts (flutter/flutter#183857) 2026-03-24 dacoharkes@google.com Mark `IconData` `final` and `@mustBeConst` (flutter/flutter#181345) 2026-03-24 engine-flutter-autoroll@skia.org Roll Skia from 62841a512deb to bf4f2763b6e6 (1 revision) (flutter/flutter#184062) 2026-03-24 ahmedsameha1@gmail.com Use Color.a instead of Color.alpha to assert the opacity of the color… (flutter/flutter#184003) 2026-03-24 engine-flutter-autoroll@skia.org Roll Dart SDK from f504293598f2 to b08bd0a3ee39 (1 revision) (flutter/flutter#184054) 2026-03-24 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from x9x76ERXhrt0Q3zKf... to M3sjWggTQmP2AD4bS... (flutter/flutter#184053) 2026-03-24 engine-flutter-autoroll@skia.org Roll Dart SDK from 788e347194a6 to f504293598f2 (1 revision) (flutter/flutter#184048) 2026-03-24 engine-flutter-autoroll@skia.org Roll Skia from fb6acef456ea to 62841a512deb (2 revisions) (flutter/flutter#184046) 2026-03-24 dkwingsmt@users.noreply.github.com [Slider] Remove value indicator painter when animation is dismissed (flutter/flutter#182991) 2026-03-24 engine-flutter-autoroll@skia.org Manual roll ICU from 7971660ba630 to ee5f27adc28b (1 revision) (flutter/flutter#184041) 2026-03-23 ishaquehassan@gmail.com Add scrollPadding property to DropdownMenu (flutter/flutter#183109) 2026-03-23 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#183895) 2026-03-23 engine-flutter-autoroll@skia.org Roll Skia from c2b58922e37d to fb6acef456ea (1 revision) (flutter/flutter#184033) 2026-03-23 engine-flutter-autoroll@skia.org Roll Dart SDK from b172bea4f008 to 788e347194a6 (2 revisions) (flutter/flutter#184035) 2026-03-23 codefu@google.com chore: deflake Linux_android_emu android_display_cutout (flutter/flutter#183522) 2026-03-23 vs.ashoknarayan@gmail.com Add note about gclient sync network failures and workaround (flutter/flutter#183794) 2026-03-23 engine-flutter-autoroll@skia.org Roll Skia from a81bf411a5cb to c2b58922e37d (3 revisions) (flutter/flutter#184016) 2026-03-23 1961493+harryterkelsen@users.noreply.github.com refactor(web): use positive logic and platform defaults for accessibility features (flutter/flutter#183907) 2026-03-23 jhy03261997@gmail.com [android][a11y] set "android.widget.ProgressBar" according to semantics role (flutter/flutter#183897) 2026-03-23 mr-peipei@web.de Add progress bar to artifact downloads (flutter/flutter#182836) 2026-03-23 116356835+AbdeMohlbi@users.noreply.github.com Add windows instruction to `Forcing Flutter Tools Snapshot Regeneration` (flutter/flutter#183977) 2026-03-23 engine-flutter-autoroll@skia.org Roll Skia from 42a6eb1dc5c9 to a81bf411a5cb (3 revisions) (flutter/flutter#184007) 2026-03-23 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from q1xqlQPxq8a3JTA4P... to x9x76ERXhrt0Q3zKf... (flutter/flutter#184006) 2026-03-23 engine-flutter-autoroll@skia.org Roll Dart SDK from ef45f179526f to b172bea4f008 (1 revision) (flutter/flutter#184004) 2026-03-23 engine-flutter-autoroll@skia.org Roll Skia from 964c3b33fd73 to 42a6eb1dc5c9 (1 revision) (flutter/flutter#184001) 2026-03-23 matt.kosarek@canonical.com Update the windowing docs per the latest wording found while doing Satellites (flutter/flutter#183748) 2026-03-22 48625061+muradhossin@users.noreply.github.com Add assert for mutually exclusive errorBuilder and errorText (flutter/flutter#183901) 2026-03-22 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from Yc7Ijp2ySjG841xha... to q1xqlQPxq8a3JTA4P... (flutter/flutter#183991) 2026-03-21 engine-flutter-autoroll@skia.org Roll Skia from 812822ad5caa to 964c3b33fd73 (1 revision) (flutter/flutter#183982) 2026-03-21 engine-flutter-autoroll@skia.org Roll Dart SDK from c831a55e2fcc to ef45f179526f (1 revision) (flutter/flutter#183973) 2026-03-21 engine-flutter-autoroll@skia.org Roll Skia from 569cc0475162 to 812822ad5caa (2 revisions) (flutter/flutter#183970) 2026-03-20 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from ilAIAVzu4xmeb078x... to Yc7Ijp2ySjG841xha... (flutter/flutter#183956) 2026-03-20 engine-flutter-autoroll@skia.org Roll Skia from 79a14289c60d to 569cc0475162 (3 revisions) (flutter/flutter#183954) 2026-03-20 engine-flutter-autoroll@skia.org Roll Dart SDK from c88a8008e93b to c831a55e2fcc (3 revisions) (flutter/flutter#183953) 2026-03-20 engine-flutter-autoroll@skia.org Roll Skia from 8d4c76b92050 to 79a14289c60d (4 revisions) (flutter/flutter#183949) ...
…lutter#11345) Manual roll Flutter from dd64978dfae1 to 82d96ef98a33 (89 revisions) Manual roll requested by tarrinneal@google.com flutter/flutter@dd64978...82d96ef 2026-03-24 116356835+AbdeMohlbi@users.noreply.github.com Fix RenderStack's documentation (flutter/flutter#183822) 2026-03-24 engine-flutter-autoroll@skia.org Roll Skia from a465876e3156 to f4e59f82dc69 (4 revisions) (flutter/flutter#184082) 2026-03-24 30870216+gaaclarke@users.noreply.github.com Refactor: Removes Geometry field from ColorSourceContents (flutter/flutter#183952) 2026-03-24 katelovett@google.com Refactor layout dimensions (flutter/flutter#184066) 2026-03-24 abadasamuelosp@gmail.com feat: Add --base-href support to flutter run for web (flutter/flutter#182709) 2026-03-24 43498643+mkucharski17@users.noreply.github.com Add LeanCode and contributors to AUTHORS (flutter/flutter#182997) 2026-03-24 dacoharkes@google.com [tools] Make sure `assemble` has a pubspec as cwd (flutter/flutter#184067) 2026-03-24 engine-flutter-autoroll@skia.org Roll Skia from bf4f2763b6e6 to a465876e3156 (5 revisions) (flutter/flutter#184068) 2026-03-24 evanwall@buffalo.edu fix gaussian blur getting clipped with negative scale (flutter/flutter#184037) 2026-03-24 34871572+gmackall@users.noreply.github.com Keep glyphs for variable fonts (flutter/flutter#183857) 2026-03-24 dacoharkes@google.com Mark `IconData` `final` and `@mustBeConst` (flutter/flutter#181345) 2026-03-24 engine-flutter-autoroll@skia.org Roll Skia from 62841a512deb to bf4f2763b6e6 (1 revision) (flutter/flutter#184062) 2026-03-24 ahmedsameha1@gmail.com Use Color.a instead of Color.alpha to assert the opacity of the color… (flutter/flutter#184003) 2026-03-24 engine-flutter-autoroll@skia.org Roll Dart SDK from f504293598f2 to b08bd0a3ee39 (1 revision) (flutter/flutter#184054) 2026-03-24 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from x9x76ERXhrt0Q3zKf... to M3sjWggTQmP2AD4bS... (flutter/flutter#184053) 2026-03-24 engine-flutter-autoroll@skia.org Roll Dart SDK from 788e347194a6 to f504293598f2 (1 revision) (flutter/flutter#184048) 2026-03-24 engine-flutter-autoroll@skia.org Roll Skia from fb6acef456ea to 62841a512deb (2 revisions) (flutter/flutter#184046) 2026-03-24 dkwingsmt@users.noreply.github.com [Slider] Remove value indicator painter when animation is dismissed (flutter/flutter#182991) 2026-03-24 engine-flutter-autoroll@skia.org Manual roll ICU from 7971660ba630 to ee5f27adc28b (1 revision) (flutter/flutter#184041) 2026-03-23 ishaquehassan@gmail.com Add scrollPadding property to DropdownMenu (flutter/flutter#183109) 2026-03-23 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#183895) 2026-03-23 engine-flutter-autoroll@skia.org Roll Skia from c2b58922e37d to fb6acef456ea (1 revision) (flutter/flutter#184033) 2026-03-23 engine-flutter-autoroll@skia.org Roll Dart SDK from b172bea4f008 to 788e347194a6 (2 revisions) (flutter/flutter#184035) 2026-03-23 codefu@google.com chore: deflake Linux_android_emu android_display_cutout (flutter/flutter#183522) 2026-03-23 vs.ashoknarayan@gmail.com Add note about gclient sync network failures and workaround (flutter/flutter#183794) 2026-03-23 engine-flutter-autoroll@skia.org Roll Skia from a81bf411a5cb to c2b58922e37d (3 revisions) (flutter/flutter#184016) 2026-03-23 1961493+harryterkelsen@users.noreply.github.com refactor(web): use positive logic and platform defaults for accessibility features (flutter/flutter#183907) 2026-03-23 jhy03261997@gmail.com [android][a11y] set "android.widget.ProgressBar" according to semantics role (flutter/flutter#183897) 2026-03-23 mr-peipei@web.de Add progress bar to artifact downloads (flutter/flutter#182836) 2026-03-23 116356835+AbdeMohlbi@users.noreply.github.com Add windows instruction to `Forcing Flutter Tools Snapshot Regeneration` (flutter/flutter#183977) 2026-03-23 engine-flutter-autoroll@skia.org Roll Skia from 42a6eb1dc5c9 to a81bf411a5cb (3 revisions) (flutter/flutter#184007) 2026-03-23 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from q1xqlQPxq8a3JTA4P... to x9x76ERXhrt0Q3zKf... (flutter/flutter#184006) 2026-03-23 engine-flutter-autoroll@skia.org Roll Dart SDK from ef45f179526f to b172bea4f008 (1 revision) (flutter/flutter#184004) 2026-03-23 engine-flutter-autoroll@skia.org Roll Skia from 964c3b33fd73 to 42a6eb1dc5c9 (1 revision) (flutter/flutter#184001) 2026-03-23 matt.kosarek@canonical.com Update the windowing docs per the latest wording found while doing Satellites (flutter/flutter#183748) 2026-03-22 48625061+muradhossin@users.noreply.github.com Add assert for mutually exclusive errorBuilder and errorText (flutter/flutter#183901) 2026-03-22 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from Yc7Ijp2ySjG841xha... to q1xqlQPxq8a3JTA4P... (flutter/flutter#183991) 2026-03-21 engine-flutter-autoroll@skia.org Roll Skia from 812822ad5caa to 964c3b33fd73 (1 revision) (flutter/flutter#183982) 2026-03-21 engine-flutter-autoroll@skia.org Roll Dart SDK from c831a55e2fcc to ef45f179526f (1 revision) (flutter/flutter#183973) 2026-03-21 engine-flutter-autoroll@skia.org Roll Skia from 569cc0475162 to 812822ad5caa (2 revisions) (flutter/flutter#183970) 2026-03-20 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from ilAIAVzu4xmeb078x... to Yc7Ijp2ySjG841xha... (flutter/flutter#183956) 2026-03-20 engine-flutter-autoroll@skia.org Roll Skia from 79a14289c60d to 569cc0475162 (3 revisions) (flutter/flutter#183954) 2026-03-20 engine-flutter-autoroll@skia.org Roll Dart SDK from c88a8008e93b to c831a55e2fcc (3 revisions) (flutter/flutter#183953) 2026-03-20 engine-flutter-autoroll@skia.org Roll Skia from 8d4c76b92050 to 79a14289c60d (4 revisions) (flutter/flutter#183949) ...
Fixes flutter#183884 GaussianBlurFilterContents::GetFilterSourceCoverage decides how much to expand the bounding rect to account for the applied blur. If given a matrix with a negative scale, `GetFilterSourceCoverage` would shrink the bounding rect instead of expanding it - giving the appearance of the "offset" described in flutter#183884 Added a unittest and golden test to verify the change. Repro app on MacOS with --enable-impeller at HEAD: <img width="799" height="626" alt="Screenshot 2026-03-23 at 2 28 06 PM" src="https://github.com/user-attachments/assets/ed26b264-a1b2-481e-aa54-9be6858b35f5" /> Repro app with this change with --enable-impeller: <img width="799" height="626" alt="Screenshot 2026-03-23 at 2 27 10 PM" src="https://github.com/user-attachments/assets/2f8edf40-e4da-4833-88ca-1ff6180c25ac" /> ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [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.
Fixes #183884
GaussianBlurFilterContents::GetFilterSourceCoverage decides how much to expand the bounding rect to account for the applied blur. If given a matrix with a negative scale,
GetFilterSourceCoveragewould shrink the bounding rect instead of expanding it - giving the appearance of the "offset" described in #183884Added a unittest and golden test to verify the change.
Repro app on MacOS with --enable-impeller at HEAD:
Repro app with this change with --enable-impeller:
Pre-launch Checklist
///).