-
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] Add utility for type safe masks. #51361
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
We use and recommend type safe enums. But when it comes to masks of those enums (`TextureUsageMask`, `ColorWriteMask`, etc.), these are all untyped and you can create one either from a scalar of the enums underlying type, or using ugly and error prone static casts. At the callee, there is no type checking and another error prone static cast. This patch adds a typed safe mask type. This should allow for the migration of something like: ```c++ using TextureUsageMask = uint64_t; ``` with ```c++ using TextureUsageMask = Mask<TextureUsage>; ``` Subsequently, all static casts can be removed with full type checking throughout. This doesn't migrate existing uses yet. That will come in a separate patch.
chinmaygarde
requested review from
bdero,
dnfield,
jonahwilliams and
jason-simmons
March 12, 2024 19:27
Really find working with masks icky in our codebase. But didn't want to add this since a lot of this code can be removed post C++20. But not sure when this is going to happen. |
bdero
approved these changes
Mar 12, 2024
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
jason-simmons
approved these changes
Mar 12, 2024
chinmaygarde
added
the
autosubmit
Merge PR when tree becomes green via auto submit App
label
Mar 12, 2024
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/flutter
that referenced
this pull request
Mar 12, 2024
chinmaygarde
added a commit
to chinmaygarde/flutter_engine
that referenced
this pull request
Mar 12, 2024
Uses the utility added in flutter#51361
auto-submit bot
pushed a commit
to flutter/flutter
that referenced
this pull request
Mar 12, 2024
…145035) flutter/engine@f1db33f...e25e977 2024-03-12 skia-flutter-autoroll@skia.org Roll Skia from 47baa55b4669 to 187488b64570 (1 revision) (flutter/engine#51362) 2024-03-12 chinmaygarde@google.com [Impeller] Add utility for type safe masks. (flutter/engine#51361) 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 Please CC bdero@google.com,rmistry@google.com,zra@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: 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: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
zijiehe-google-com
pushed a commit
to zijiehe-google-com/engine
that referenced
this pull request
Mar 13, 2024
Uses the utility added in flutter#51361 I counted the removal of 58 static casts. There was one addition made to the original utility however. Vulkan HPP was promoting all enums to its own mask type. This in itself is problematic but we got away with it because there was no one else doing this kind of promotion. Till we added our own utility. To avoid polluting the namespace with methods that may cause ambiguity, enums that are masks must explicitly be marked as maskable with `IMPELLER_ENUM_IS_MASK` in the `impeller` namespace. No change in functionality.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
We use and recommend type safe enums. But when it comes to masks of those enums (
TextureUsageMask
,ColorWriteMask
, etc.), these are all untyped and you can create one either from a scalar of the enums underlying type, or using ugly and error prone static casts. At the callee, there is no type checking and another error prone static cast.This patch adds a type-safe mask type. This should allow for the migration of something like:
with
using TextureUsageMask = Mask<TextureUsage>;
Subsequently, all static casts can be removed with full type checking throughout.
This doesn't migrate existing uses yet. That will come in a separate patch.