-
Notifications
You must be signed in to change notification settings - Fork 29.7k
[Impeller] optimize drawImageRect with blend and matrix color filter. #165998
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Draft because I don't think my math is quite right yet. |
|
Thinking about this some more, I'd think our existing optimizations would cover this case - but actually they seem to be falling down. Investigating more. |
…to porder_duff_opt
|
So in theory our snapshot optimization handles this - however we don't handle a src/dst rect that are different sizes. Since this is really only an improvement for blend/matrix color filters, I think it makes more sense to add the optimization in canvas than it does to refactor the snapshot system. |
|
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. |
gaaclarke
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code looks good to me, the goldens don't look alright though. Check out impeller_Play_AiksTest_ColorFilterBlend_Metal.
| paint.image_filter == nullptr && // | ||
| !paint.mask_blur_descriptor.has_value() && // | ||
| IsPipelineBlendOrMatrixFilter(paint.color_filter)) { | ||
| if (paint.color_filter->type() == flutter::DlColorFilterType::kBlend) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: This method is huge, can you split this out into it's own function.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
| // we should swap out the shader for the porter duff blend shader and avoid a | ||
| // saveLayer. This can only be done for imageRects without a strict source | ||
| // rect, as the porter duff shader does not support this feature. This | ||
| // optimization is important for flame. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| // optimization is important for flame. | |
| // optimization is important for Flame. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
|
|
||
| ///// | ||
|
|
||
| class ColorFilterAtlasContents final : public Contents { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add brief docstring
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
| RenderPass& pass) const override; | ||
|
|
||
| private: | ||
| AtlasGeometry* geometry_ = nullptr; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add comment why raw pointer can't result in a dangling pointer.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
engine/src/flutter/impeller/entity/shaders/filters/color_matrix_color_filter.frag
Outdated
Show resolved
Hide resolved
|
Golden file changes are available for triage from new commit, Click here to view. 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. |
…x_color_filter.frag Co-authored-by: gaaclarke <[email protected]>
…to porder_duff_opt
gaaclarke
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm as long as the goldens are good.
Manual roll Flutter from 1d954f4 to 05b5e79 (225 revisions) Manual roll requested by [email protected] flutter/flutter@1d954f4...05b5e79 2025-03-29 [email protected] Roll Dart SDK from bcb7649e965a to b9c35e05feb5 (1 revision) (flutter/flutter#166202) 2025-03-29 [email protected] Roll Dart SDK from a7701559f616 to bcb7649e965a (1 revision) (flutter/flutter#166189) 2025-03-29 [email protected] Roll Dart SDK from 30ea8c4e622f to a7701559f616 (1 revision) (flutter/flutter#166185) 2025-03-29 [email protected] [fuchsia][sysmem2] switch to sysmem2 tokens (flutter/flutter#166120) 2025-03-29 [email protected] Roll Dart SDK from 65fe9906a916 to 30ea8c4e622f (2 revisions) (flutter/flutter#166181) 2025-03-29 [email protected] move around shaders in vertices uber 1/2 (flutter/flutter#166180) 2025-03-29 [email protected] [Impeller] optimize drawImageRect with blend and matrix color filter. (flutter/flutter#165998) 2025-03-28 [email protected] Add drawRSuperellipse support to mock_canvas. (flutter/flutter#165744) 2025-03-28 [email protected] Started clamping scaled antialias lines size (flutter/flutter#166149) 2025-03-28 [email protected] Roll Dart SDK from 4494ffead9af to 65fe9906a916 (7 revisions) (flutter/flutter#166162) 2025-03-28 [email protected] Remove bringup flag for customer tests (flutter/flutter#166161) 2025-03-28 [email protected] Add the ios-reviewers review team (flutter/flutter#166034) 2025-03-28 [email protected] [impeller] refactored LineContents to make it more testable, added tests (flutter/flutter#166035) 2025-03-28 [email protected] [Widget Inspector] Jump to source code of implementation widgets from Flutter Inspector (flutter/flutter#165924) 2025-03-28 [email protected] Make sure `LayoutBuilder` rebuild in an inactive route (flutter/flutter#154681) 2025-03-28 [email protected] [Impeller] allow newer powervr gpu to use Vulkan. (flutter/flutter#165520) 2025-03-28 [email protected] [web] Remove package:js in favor of dart:js_interop (flutter/flutter#165324) 2025-03-28 [email protected] [ Widget Previews ] Default to using Flutter Web for the widget preview environment (flutter/flutter#166091) 2025-03-28 [email protected] Mark Linux coverage as bringup (flutter/flutter#166144) 2025-03-28 [email protected] Roll Fuchsia Linux SDK from djUjSTaAtl0ETQSBR... to v7PGvypiiWLO8PbsZ... (flutter/flutter#166136) 2025-03-28 [email protected] [Impeller] split vertices uber into 2 shaders. (flutter/flutter#165938) 2025-03-28 [email protected] [flutter_tools] Fix VS Code package.json path on macOS with case-sensitive file system (flutter/flutter#163409) 2025-03-28 [email protected] Delete some verbose vm service logging (flutter/flutter#162709) 2025-03-28 [email protected] Get analytics welcome message under test (flutter/flutter#162627) 2025-03-28 [email protected] [ios][pv]fully revert the UIScreen.main deprecated API change (flutter/flutter#166080) 2025-03-28 [email protected] Roll Skia from b5b6f29d690f to 10f4cf9a817d (8 revisions) (flutter/flutter#166111) 2025-03-28 [email protected] [CI] remove check for exact golden files. (flutter/flutter#166031) 2025-03-28 [email protected] Move OpenGL context management to FlOpenGLManager (flutter/flutter#166025) 2025-03-27 [email protected] [android] only release background image readers on Android 14. (flutter/flutter#165942) 2025-03-27 [email protected] Refactor: Migrate Date picker from MaterialState and MaterialStateProperty (flutter/flutter#164972) 2025-03-27 [email protected] Mark Linux customer tests as flaky (flutter/flutter#166103) 2025-03-27 [email protected] Move app link settings task configuration to kotlin (flutter/flutter#165819) 2025-03-27 [email protected] Make iOS Flutter framework extension-safe (flutter/flutter#165346) 2025-03-27 [email protected] [ Widget Preview ] Display an error widget when an exception is thrown while defining the widget tree (flutter/flutter#166005) 2025-03-27 [email protected] Removed not working hyperlinks to ScriptCategory values (flutter/flutter#165395) 2025-03-27 [email protected] add PointerDeviceKind to ScaleStartDetails (flutter/flutter#165096) 2025-03-27 [email protected] Fix build_android_host_app_with_module_source device lab tests (flutter/flutter#166077) 2025-03-27 [email protected] Roll Skia from 11375a498f6b to b5b6f29d690f (4 revisions) (flutter/flutter#166060) 2025-03-27 [email protected] [Impeller] Move to the new location before rendering a stroke path contour containing only one point (flutter/flutter#165940) 2025-03-27 [email protected] Scale aa lines (flutter/flutter#165917) 2025-03-27 [email protected] Reapply "[ Device Lab ] Upgrade Device Lab projects to Java 18" (#166016) (flutter/flutter#166059) 2025-03-27 [email protected] Roll Fuchsia Linux SDK from iScQOaYHg2aJcF1LX... to djUjSTaAtl0ETQSBR... (flutter/flutter#166055) 2025-03-27 [email protected] Roll Skia from 67a236832d64 to 11375a498f6b (2 revisions) (flutter/flutter#166046) 2025-03-27 [email protected] [flutter_tool] Handle RPCErrorKind.kConnectionDisposed (flutter/flutter#164299) ...
… (#8960) Manual roll Flutter from 1d954f4e96bd to 05b5e7910544 (225 revisions) Manual roll requested by [email protected] flutter/flutter@1d954f4...05b5e79 2025-03-29 [email protected] Roll Dart SDK from bcb7649e965a to b9c35e05feb5 (1 revision) (flutter/flutter#166202) 2025-03-29 [email protected] Roll Dart SDK from a7701559f616 to bcb7649e965a (1 revision) (flutter/flutter#166189) 2025-03-29 [email protected] Roll Dart SDK from 30ea8c4e622f to a7701559f616 (1 revision) (flutter/flutter#166185) 2025-03-29 [email protected] [fuchsia][sysmem2] switch to sysmem2 tokens (flutter/flutter#166120) 2025-03-29 [email protected] Roll Dart SDK from 65fe9906a916 to 30ea8c4e622f (2 revisions) (flutter/flutter#166181) 2025-03-29 [email protected] move around shaders in vertices uber 1/2 (flutter/flutter#166180) 2025-03-29 [email protected] [Impeller] optimize drawImageRect with blend and matrix color filter. (flutter/flutter#165998) 2025-03-28 [email protected] Add drawRSuperellipse support to mock_canvas. (flutter/flutter#165744) 2025-03-28 [email protected] Started clamping scaled antialias lines size (flutter/flutter#166149) 2025-03-28 [email protected] Roll Dart SDK from 4494ffead9af to 65fe9906a916 (7 revisions) (flutter/flutter#166162) 2025-03-28 [email protected] Remove bringup flag for customer tests (flutter/flutter#166161) 2025-03-28 [email protected] Add the ios-reviewers review team (flutter/flutter#166034) 2025-03-28 [email protected] [impeller] refactored LineContents to make it more testable, added tests (flutter/flutter#166035) 2025-03-28 [email protected] [Widget Inspector] Jump to source code of implementation widgets from Flutter Inspector (flutter/flutter#165924) 2025-03-28 [email protected] Make sure `LayoutBuilder` rebuild in an inactive route (flutter/flutter#154681) 2025-03-28 [email protected] [Impeller] allow newer powervr gpu to use Vulkan. (flutter/flutter#165520) 2025-03-28 [email protected] [web] Remove package:js in favor of dart:js_interop (flutter/flutter#165324) 2025-03-28 [email protected] [ Widget Previews ] Default to using Flutter Web for the widget preview environment (flutter/flutter#166091) 2025-03-28 [email protected] Mark Linux coverage as bringup (flutter/flutter#166144) 2025-03-28 [email protected] Roll Fuchsia Linux SDK from djUjSTaAtl0ETQSBR... to v7PGvypiiWLO8PbsZ... (flutter/flutter#166136) 2025-03-28 [email protected] [Impeller] split vertices uber into 2 shaders. (flutter/flutter#165938) 2025-03-28 [email protected] [flutter_tools] Fix VS Code package.json path on macOS with case-sensitive file system (flutter/flutter#163409) 2025-03-28 [email protected] Delete some verbose vm service logging (flutter/flutter#162709) 2025-03-28 [email protected] Get analytics welcome message under test (flutter/flutter#162627) 2025-03-28 [email protected] [ios][pv]fully revert the UIScreen.main deprecated API change (flutter/flutter#166080) 2025-03-28 [email protected] Roll Skia from b5b6f29d690f to 10f4cf9a817d (8 revisions) (flutter/flutter#166111) 2025-03-28 [email protected] [CI] remove check for exact golden files. (flutter/flutter#166031) 2025-03-28 [email protected] Move OpenGL context management to FlOpenGLManager (flutter/flutter#166025) 2025-03-27 [email protected] [android] only release background image readers on Android 14. (flutter/flutter#165942) 2025-03-27 [email protected] Refactor: Migrate Date picker from MaterialState and MaterialStateProperty (flutter/flutter#164972) 2025-03-27 [email protected] Mark Linux customer tests as flaky (flutter/flutter#166103) 2025-03-27 [email protected] Move app link settings task configuration to kotlin (flutter/flutter#165819) 2025-03-27 [email protected] Make iOS Flutter framework extension-safe (flutter/flutter#165346) 2025-03-27 [email protected] [ Widget Preview ] Display an error widget when an exception is thrown while defining the widget tree (flutter/flutter#166005) 2025-03-27 [email protected] Removed not working hyperlinks to ScriptCategory values (flutter/flutter#165395) 2025-03-27 [email protected] add PointerDeviceKind to ScaleStartDetails (flutter/flutter#165096) 2025-03-27 [email protected] Fix build_android_host_app_with_module_source device lab tests (flutter/flutter#166077) 2025-03-27 [email protected] Roll Skia from 11375a498f6b to b5b6f29d690f (4 revisions) (flutter/flutter#166060) 2025-03-27 [email protected] [Impeller] Move to the new location before rendering a stroke path contour containing only one point (flutter/flutter#165940) 2025-03-27 [email protected] Scale aa lines (flutter/flutter#165917) 2025-03-27 [email protected] Reapply "[ Device Lab ] Upgrade Device Lab projects to Java 18" (#166016) (flutter/flutter#166059) 2025-03-27 [email protected] Roll Fuchsia Linux SDK from iScQOaYHg2aJcF1LX... to djUjSTaAtl0ETQSBR... (flutter/flutter#166055) 2025-03-27 [email protected] Roll Skia from 67a236832d64 to 11375a498f6b (2 revisions) (flutter/flutter#166046) 2025-03-27 [email protected] [flutter_tool] Handle RPCErrorKind.kConnectionDisposed (flutter/flutter#164299) ...
…8960) Manual roll Flutter from 1d954f4 to 05b5e79 (225 revisions) Manual roll requested by [email protected] flutter/flutter@1d954f4...05b5e79 2025-03-29 [email protected] Roll Dart SDK from bcb7649e965a to b9c35e05feb5 (1 revision) (flutter/flutter#166202) 2025-03-29 [email protected] Roll Dart SDK from a7701559f616 to bcb7649e965a (1 revision) (flutter/flutter#166189) 2025-03-29 [email protected] Roll Dart SDK from 30ea8c4e622f to a7701559f616 (1 revision) (flutter/flutter#166185) 2025-03-29 [email protected] [fuchsia][sysmem2] switch to sysmem2 tokens (flutter/flutter#166120) 2025-03-29 [email protected] Roll Dart SDK from 65fe9906a916 to 30ea8c4e622f (2 revisions) (flutter/flutter#166181) 2025-03-29 [email protected] move around shaders in vertices uber 1/2 (flutter/flutter#166180) 2025-03-29 [email protected] [Impeller] optimize drawImageRect with blend and matrix color filter. (flutter/flutter#165998) 2025-03-28 [email protected] Add drawRSuperellipse support to mock_canvas. (flutter/flutter#165744) 2025-03-28 [email protected] Started clamping scaled antialias lines size (flutter/flutter#166149) 2025-03-28 [email protected] Roll Dart SDK from 4494ffead9af to 65fe9906a916 (7 revisions) (flutter/flutter#166162) 2025-03-28 [email protected] Remove bringup flag for customer tests (flutter/flutter#166161) 2025-03-28 [email protected] Add the ios-reviewers review team (flutter/flutter#166034) 2025-03-28 [email protected] [impeller] refactored LineContents to make it more testable, added tests (flutter/flutter#166035) 2025-03-28 [email protected] [Widget Inspector] Jump to source code of implementation widgets from Flutter Inspector (flutter/flutter#165924) 2025-03-28 [email protected] Make sure `LayoutBuilder` rebuild in an inactive route (flutter/flutter#154681) 2025-03-28 [email protected] [Impeller] allow newer powervr gpu to use Vulkan. (flutter/flutter#165520) 2025-03-28 [email protected] [web] Remove package:js in favor of dart:js_interop (flutter/flutter#165324) 2025-03-28 [email protected] [ Widget Previews ] Default to using Flutter Web for the widget preview environment (flutter/flutter#166091) 2025-03-28 [email protected] Mark Linux coverage as bringup (flutter/flutter#166144) 2025-03-28 [email protected] Roll Fuchsia Linux SDK from djUjSTaAtl0ETQSBR... to v7PGvypiiWLO8PbsZ... (flutter/flutter#166136) 2025-03-28 [email protected] [Impeller] split vertices uber into 2 shaders. (flutter/flutter#165938) 2025-03-28 [email protected] [flutter_tools] Fix VS Code package.json path on macOS with case-sensitive file system (flutter/flutter#163409) 2025-03-28 [email protected] Delete some verbose vm service logging (flutter/flutter#162709) 2025-03-28 [email protected] Get analytics welcome message under test (flutter/flutter#162627) 2025-03-28 [email protected] [ios][pv]fully revert the UIScreen.main deprecated API change (flutter/flutter#166080) 2025-03-28 [email protected] Roll Skia from b5b6f29d690f to 10f4cf9a817d (8 revisions) (flutter/flutter#166111) 2025-03-28 [email protected] [CI] remove check for exact golden files. (flutter/flutter#166031) 2025-03-28 [email protected] Move OpenGL context management to FlOpenGLManager (flutter/flutter#166025) 2025-03-27 [email protected] [android] only release background image readers on Android 14. (flutter/flutter#165942) 2025-03-27 [email protected] Refactor: Migrate Date picker from MaterialState and MaterialStateProperty (flutter/flutter#164972) 2025-03-27 [email protected] Mark Linux customer tests as flaky (flutter/flutter#166103) 2025-03-27 [email protected] Move app link settings task configuration to kotlin (flutter/flutter#165819) 2025-03-27 [email protected] Make iOS Flutter framework extension-safe (flutter/flutter#165346) 2025-03-27 [email protected] [ Widget Preview ] Display an error widget when an exception is thrown while defining the widget tree (flutter/flutter#166005) 2025-03-27 [email protected] Removed not working hyperlinks to ScriptCategory values (flutter/flutter#165395) 2025-03-27 [email protected] add PointerDeviceKind to ScaleStartDetails (flutter/flutter#165096) 2025-03-27 [email protected] Fix build_android_host_app_with_module_source device lab tests (flutter/flutter#166077) 2025-03-27 [email protected] Roll Skia from 11375a498f6b to b5b6f29d690f (4 revisions) (flutter/flutter#166060) 2025-03-27 [email protected] [Impeller] Move to the new location before rendering a stroke path contour containing only one point (flutter/flutter#165940) 2025-03-27 [email protected] Scale aa lines (flutter/flutter#165917) 2025-03-27 [email protected] Reapply "[ Device Lab ] Upgrade Device Lab projects to Java 18" (#166016) (flutter/flutter#166059) 2025-03-27 [email protected] Roll Fuchsia Linux SDK from iScQOaYHg2aJcF1LX... to djUjSTaAtl0ETQSBR... (flutter/flutter#166055) 2025-03-27 [email protected] Roll Skia from 67a236832d64 to 11375a498f6b (2 revisions) (flutter/flutter#166046) 2025-03-27 [email protected] [flutter_tool] Handle RPCErrorKind.kConnectionDisposed (flutter/flutter#164299) ...
…flutter#165998) Fixes flutter#165959 Flame uses a lot of individual calls to drawImageRect w/ blend color filters to color the sprites. This is much slower with Impeller today, because we convert this into: ``` saveLayer(color filter) drawImageRect restore ``` Instead, we can detect this case and convert to a call to drawAtlas. drawAtlas will use the porter-duff shader which removes the saveLayer entirely. We could do this optimization while recording, but for now its fine to do in dispatch. We do have a snapshot optimization that catches "normal" image usage, but it doesn't apply in the flame case as the source rects are sampling from a larger texture and we don't have a way to pass those through the snapshot system. ## Before <img src="https://github.com/user-attachments/assets/faada042-843f-4f15-af20-9baf862f66fd" width="200"/> ## After <img src="https://github.com/user-attachments/assets/c83e061c-190f-4613-a725-88e16b776c04" width="200"/> --------- Co-authored-by: gaaclarke <[email protected]>
…8960) Manual roll Flutter from 1d954f4 to 05b5e79 (225 revisions) Manual roll requested by [email protected] flutter/flutter@1d954f4...05b5e79 2025-03-29 [email protected] Roll Dart SDK from bcb7649e965a to b9c35e05feb5 (1 revision) (flutter/flutter#166202) 2025-03-29 [email protected] Roll Dart SDK from a7701559f616 to bcb7649e965a (1 revision) (flutter/flutter#166189) 2025-03-29 [email protected] Roll Dart SDK from 30ea8c4e622f to a7701559f616 (1 revision) (flutter/flutter#166185) 2025-03-29 [email protected] [fuchsia][sysmem2] switch to sysmem2 tokens (flutter/flutter#166120) 2025-03-29 [email protected] Roll Dart SDK from 65fe9906a916 to 30ea8c4e622f (2 revisions) (flutter/flutter#166181) 2025-03-29 [email protected] move around shaders in vertices uber 1/2 (flutter/flutter#166180) 2025-03-29 [email protected] [Impeller] optimize drawImageRect with blend and matrix color filter. (flutter/flutter#165998) 2025-03-28 [email protected] Add drawRSuperellipse support to mock_canvas. (flutter/flutter#165744) 2025-03-28 [email protected] Started clamping scaled antialias lines size (flutter/flutter#166149) 2025-03-28 [email protected] Roll Dart SDK from 4494ffead9af to 65fe9906a916 (7 revisions) (flutter/flutter#166162) 2025-03-28 [email protected] Remove bringup flag for customer tests (flutter/flutter#166161) 2025-03-28 [email protected] Add the ios-reviewers review team (flutter/flutter#166034) 2025-03-28 [email protected] [impeller] refactored LineContents to make it more testable, added tests (flutter/flutter#166035) 2025-03-28 [email protected] [Widget Inspector] Jump to source code of implementation widgets from Flutter Inspector (flutter/flutter#165924) 2025-03-28 [email protected] Make sure `LayoutBuilder` rebuild in an inactive route (flutter/flutter#154681) 2025-03-28 [email protected] [Impeller] allow newer powervr gpu to use Vulkan. (flutter/flutter#165520) 2025-03-28 [email protected] [web] Remove package:js in favor of dart:js_interop (flutter/flutter#165324) 2025-03-28 [email protected] [ Widget Previews ] Default to using Flutter Web for the widget preview environment (flutter/flutter#166091) 2025-03-28 [email protected] Mark Linux coverage as bringup (flutter/flutter#166144) 2025-03-28 [email protected] Roll Fuchsia Linux SDK from djUjSTaAtl0ETQSBR... to v7PGvypiiWLO8PbsZ... (flutter/flutter#166136) 2025-03-28 [email protected] [Impeller] split vertices uber into 2 shaders. (flutter/flutter#165938) 2025-03-28 [email protected] [flutter_tools] Fix VS Code package.json path on macOS with case-sensitive file system (flutter/flutter#163409) 2025-03-28 [email protected] Delete some verbose vm service logging (flutter/flutter#162709) 2025-03-28 [email protected] Get analytics welcome message under test (flutter/flutter#162627) 2025-03-28 [email protected] [ios][pv]fully revert the UIScreen.main deprecated API change (flutter/flutter#166080) 2025-03-28 [email protected] Roll Skia from b5b6f29d690f to 10f4cf9a817d (8 revisions) (flutter/flutter#166111) 2025-03-28 [email protected] [CI] remove check for exact golden files. (flutter/flutter#166031) 2025-03-28 [email protected] Move OpenGL context management to FlOpenGLManager (flutter/flutter#166025) 2025-03-27 [email protected] [android] only release background image readers on Android 14. (flutter/flutter#165942) 2025-03-27 [email protected] Refactor: Migrate Date picker from MaterialState and MaterialStateProperty (flutter/flutter#164972) 2025-03-27 [email protected] Mark Linux customer tests as flaky (flutter/flutter#166103) 2025-03-27 [email protected] Move app link settings task configuration to kotlin (flutter/flutter#165819) 2025-03-27 [email protected] Make iOS Flutter framework extension-safe (flutter/flutter#165346) 2025-03-27 [email protected] [ Widget Preview ] Display an error widget when an exception is thrown while defining the widget tree (flutter/flutter#166005) 2025-03-27 [email protected] Removed not working hyperlinks to ScriptCategory values (flutter/flutter#165395) 2025-03-27 [email protected] add PointerDeviceKind to ScaleStartDetails (flutter/flutter#165096) 2025-03-27 [email protected] Fix build_android_host_app_with_module_source device lab tests (flutter/flutter#166077) 2025-03-27 [email protected] Roll Skia from 11375a498f6b to b5b6f29d690f (4 revisions) (flutter/flutter#166060) 2025-03-27 [email protected] [Impeller] Move to the new location before rendering a stroke path contour containing only one point (flutter/flutter#165940) 2025-03-27 [email protected] Scale aa lines (flutter/flutter#165917) 2025-03-27 [email protected] Reapply "[ Device Lab ] Upgrade Device Lab projects to Java 18" (#166016) (flutter/flutter#166059) 2025-03-27 [email protected] Roll Fuchsia Linux SDK from iScQOaYHg2aJcF1LX... to djUjSTaAtl0ETQSBR... (flutter/flutter#166055) 2025-03-27 [email protected] Roll Skia from 67a236832d64 to 11375a498f6b (2 revisions) (flutter/flutter#166046) 2025-03-27 [email protected] [flutter_tool] Handle RPCErrorKind.kConnectionDisposed (flutter/flutter#164299) ...
…flutter#165998) Fixes flutter#165959 Flame uses a lot of individual calls to drawImageRect w/ blend color filters to color the sprites. This is much slower with Impeller today, because we convert this into: ``` saveLayer(color filter) drawImageRect restore ``` Instead, we can detect this case and convert to a call to drawAtlas. drawAtlas will use the porter-duff shader which removes the saveLayer entirely. We could do this optimization while recording, but for now its fine to do in dispatch. We do have a snapshot optimization that catches "normal" image usage, but it doesn't apply in the flame case as the source rects are sampling from a larger texture and we don't have a way to pass those through the snapshot system. ## Before <img src="https://github.com/user-attachments/assets/faada042-843f-4f15-af20-9baf862f66fd" width="200"/> ## After <img src="https://github.com/user-attachments/assets/c83e061c-190f-4613-a725-88e16b776c04" width="200"/> --------- Co-authored-by: gaaclarke <[email protected]>
Fixes #165959
Flame uses a lot of individual calls to drawImageRect w/ blend color filters to color the sprites. This is much slower with Impeller today, because we convert this into:
Instead, we can detect this case and convert to a call to drawAtlas. drawAtlas will use the porter-duff shader which removes the saveLayer entirely. We could do this optimization while recording, but for now its fine to do in dispatch.
We do have a snapshot optimization that catches "normal" image usage, but it doesn't apply in the flame case as the source rects are sampling from a larger texture and we don't have a way to pass those through the snapshot system.
Before
After