-
Notifications
You must be signed in to change notification settings - Fork 6k
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
[Impeller] Cache location in metadata. #46640
Conversation
impeller/core/shader_types.h
Outdated
/// the OpenGLES backend. | ||
/// | ||
/// See buffer_binding_gles.cc. | ||
mutable std::optional<int> location = std::nullopt; |
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.
This seems fine to me. But when this was written, the metadata was meant to be static const. So I am not sure about the lifecycle of this. I am also worried (perhaps incorrectly) about interactive with multiple OpenGL drivers at some point in the future.
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.
From Triage: lets just store it in the "PSO" instead.
I've updated this to cache the binding data in in the buffer_binding, I couldn't put them in the pipeline itself as that doesn't actually have all of the information needed. To support this I made the buffer_binding pointer non-const. So we still use one hashmap lookup per shader, but the key we use is already generated on the shader metadata so its less work. |
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.
I couldn't tell what information was missing to put this in the pipeline state object. But this is an improvement for sure.
for (auto i = 0u; i < metadata->members.size(); i++) { | ||
const auto& member = metadata->members[i]; | ||
auto location = locations[i]; | ||
if (location == -1) { |
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.
Preserve the comment about inactive uniformed being optimized out?
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.
Oh, I see it up top. Maybe just "void type or inactive".
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
The BufferBinding is essentially part of the PSO, so its all approximately the same, right 😄 |
…137310) Roll Flutter Engine from 6e09ee14e244 to 6428ed576841 (38 revisions) flutter/engine@6e09ee1...6428ed5 2023-10-26 jason-simmons@users.noreply.github.com Revert Dart SDK to 360370ff93b053253343832432f8329a11372ffc (flutter/engine#47326) 2023-10-25 skia-flutter-autoroll@skia.org Roll Skia from fb979d0ce053 to a5da4435bb5c (1 revision) (flutter/engine#47325) 2023-10-25 jonahwilliams@google.com [Impeller] Cache location in metadata. (flutter/engine#46640) 2023-10-25 skia-flutter-autoroll@skia.org Roll Skia from 8492914821fa to fb979d0ce053 (1 revision) (flutter/engine#47324) 2023-10-25 737941+loic-sharma@users.noreply.github.com [Windows] Introduce FlutterWindowsViewController (flutter/engine#47242) 2023-10-25 skia-flutter-autoroll@skia.org Roll Skia from 773abacc1581 to 8492914821fa (2 revisions) (flutter/engine#47322) 2023-10-25 skia-flutter-autoroll@skia.org Roll Dart SDK from 73fa7b3e048a to 7745c140d1fe (1 revision) (flutter/engine#47321) 2023-10-25 zanderso@users.noreply.github.com Cleanup Dart package dependencies a bit (flutter/engine#47306) 2023-10-25 skia-flutter-autoroll@skia.org Roll Skia from d511fa1f1533 to 773abacc1581 (1 revision) (flutter/engine#47312) 2023-10-25 skia-flutter-autoroll@skia.org Roll Fuchsia Mac SDK from SOv1RJmbyDByvud8D... to kNdyn03p28H7VeMcd... (flutter/engine#47313) 2023-10-25 skia-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from vX5n99OIWgLX6bObI... to zTq0jH2Y3Fl0uUUSa... (flutter/engine#47309) 2023-10-25 skia-flutter-autoroll@skia.org Roll Skia from 0748053419cd to d511fa1f1533 (1 revision) (flutter/engine#47308) 2023-10-25 30870216+gaaclarke@users.noreply.github.com Missed linter argument comment violations (flutter/engine#47310) 2023-10-25 chinmaygarde@google.com [Impeller] Remove use of FML_DISALLOW_<FOO> macros in Impeller. (flutter/engine#47307) 2023-10-25 30870216+gaaclarke@users.noreply.github.com Adds lint for checking argument commments (flutter/engine#47305) 2023-10-25 skia-flutter-autoroll@skia.org Roll Dart SDK from 2791495ed583 to 73fa7b3e048a (1 revision) (flutter/engine#47304) 2023-10-25 skia-flutter-autoroll@skia.org Roll Skia from 4848dd9b5dab to 0748053419cd (2 revisions) (flutter/engine#47302) 2023-10-25 skia-flutter-autoroll@skia.org Roll Skia from 788eafdcf70d to 4848dd9b5dab (1 revision) (flutter/engine#47301) 2023-10-25 skia-flutter-autoroll@skia.org Roll Skia from 5c315b761a24 to 788eafdcf70d (1 revision) (flutter/engine#47300) 2023-10-25 skia-flutter-autoroll@skia.org Roll Skia from 18ad006ec7f9 to 5c315b761a24 (1 revision) (flutter/engine#47299) 2023-10-25 skia-flutter-autoroll@skia.org Roll Dart SDK from 57661d5dbc1e to 2791495ed583 (1 revision) (flutter/engine#47298) 2023-10-25 skia-flutter-autoroll@skia.org Roll Skia from 9537c25509ea to 18ad006ec7f9 (1 revision) (flutter/engine#47297) 2023-10-25 skia-flutter-autoroll@skia.org Roll Fuchsia Mac SDK from YqSO1OByhoexFJSCr... to SOv1RJmbyDByvud8D... (flutter/engine#47296) 2023-10-25 skia-flutter-autoroll@skia.org Roll Skia from d51d3bcbcacd to 9537c25509ea (1 revision) (flutter/engine#47295) 2023-10-25 skia-flutter-autoroll@skia.org Roll Skia from f98fc9536c43 to d51d3bcbcacd (1 revision) (flutter/engine#47294) 2023-10-25 skia-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from tqukMrdJ6j-845-57... to vX5n99OIWgLX6bObI... (flutter/engine#47293) 2023-10-25 skia-flutter-autoroll@skia.org Roll Skia from 0d4fcf388a6f to f98fc9536c43 (1 revision) (flutter/engine#47292) 2023-10-24 chinmaygarde@google.com [Impeller] Update shader compilation pipeline documentation to detail multi-arch archives. (flutter/engine#47289) 2023-10-24 skia-flutter-autoroll@skia.org Roll Skia from 076a9dd0094f to 0d4fcf388a6f (2 revisions) (flutter/engine#47290) 2023-10-24 matanlurey@users.noreply.github.com OpenGL <4.x does not support stencil-only formats, so delete the TODO (flutter/engine#47286) 2023-10-24 matanlurey@users.noreply.github.com [Impeller] Unconditionally dither in gradient shader fragments. (flutter/engine#46746) 2023-10-24 skia-flutter-autoroll@skia.org Roll Skia from f491209e969d to 076a9dd0094f (1 revision) (flutter/engine#47285) 2023-10-24 chinmaygarde@google.com [Impeller] Add support for multi-rendering-backend fat shader archives. (flutter/engine#47278) 2023-10-24 skia-flutter-autoroll@skia.org Roll Skia from 502277be15cf to f491209e969d (1 revision) (flutter/engine#47281) 2023-10-24 skia-flutter-autoroll@skia.org Roll Dart SDK from 360370ff93b0 to 57661d5dbc1e (1 revision) (flutter/engine#47280) 2023-10-24 30870216+gaaclarke@users.noreply.github.com Migrated away from UnmodifiableUint8ListView (flutter/engine#47276) 2023-10-24 skia-flutter-autoroll@skia.org Roll Skia from bc90585b0dd4 to 502277be15cf (1 revision) (flutter/engine#47277) 2023-10-24 1961493+harryterkelsen@users.noreply.github.com Reland "Use a single OffscreenCanvas for rendering in CanvasKit (#45744)" (flutter/engine#47241) Also rolling transitive DEPS: fuchsia/sdk/core/linux-amd64 from tqukMrdJ6j-8 to zTq0jH2Y3Fl0 fuchsia/sdk/core/mac-amd64 from YqSO1OByhoex to kNdyn03p28H7 If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-engine-flutter-autoroll ...
Hacky mutable stuff, but avoids recomputing string keys and hashing them multiple times per draw call. See also
While we cache the uniform location, looking up this value requires computing a string key for every single uniform value on every single command. We can speed this up by stashing the uniform location in the shader metadata, which shouldn't change for the app lifetime. This avoids both the string computation and the hashmap usage.