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.
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
[Merged by Bors] - improve compile time by type-erasing wgpu structs #5950
[Merged by Bors] - improve compile time by type-erasing wgpu structs #5950
Changes from 9 commits
af3a947
52273b4
93547dc
f688540
7b55c76
c571c07
d660e02
7434580
ac45409
c4b7b4e
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
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 think its worth adding some documentation for the rationale behind this wrapper (and the criteria for removing it 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.
I'm confused by the Option here. Why is this needed?
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.
it is so that we can
take
it in try_unwrap without having to do anything special for theDrop
impl to work.If we don't use an option, we have to
std::mem::forget
and/orManuallyDrop<>
(onself
orself.0
or both..?), orstd::mem::replace(self.0)
(which creates a newArc<Box<()>>
just to drop it again inDrop
).I can do one of those if you prefer, I will need to dig around to get comfortable with it, but since this is
#[cfg(debug_assertions)]
code perhaps it's not necessary?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.
Ok that makes sense to me. We could solve the
try_unwrap
problem with another layer of wrapper types (so we can implement drop on the internal type, making it possible to move out on try_unwrap()). But implementing drop for that internal type is still problematic.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.
If
$wgpu_type
is!Send
or!Sync
, won't this (and otherfn
's that domem::transmute
) produce potentially unsound results, since()
isSend
andSync
?Not sure if it would work, but perhaps something like:
Could avoid that someone inadvertently uses this for something that isn't
Send + Sync
down the line?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.
good catch, thanks!
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 is potentially UB.
std::sync::Arc
isrepr(Rust)
, so we can't be sure that this transmute is sound.Same thing holds true for the other transmutes in this file.