-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Support extern context impl #6658
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
TBH, I have no idea what's wrong with WASM. |
wgpu/src/api/instance.rs
Outdated
#[doc(hidden)] | ||
/// Creates Instance from custom context implementation | ||
pub fn from_custom_instance(instance: std::sync::Arc<dyn InstanceInterface>) -> Self { | ||
Self { | ||
inner: dispatch::DispatchInstance::Custom(backend::custom::DynContext::new(instance)), | ||
} | ||
} |
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 triggering visibility problems for WASM, but I do not know why.
9090201
to
088532e
Compare
Ping me if this needs looking at or you need help before it is out of draft, going to un-assign myself for bookeeeping |
In 79ecded I removed InterfaceTypes trait as it's not really needed anymore (this makes writing Custom/Dyn wrappers easier as they do not need to impl traits directly, avoiding a lot of boilerplate), all bounds are actually enforced in |
Hmm... I don't love it as it makes things less structured, but can't see a strong argument against removing the trait. Will fully consider it when I review this. You can leave it as part of this PR for now. |
I have alternative approach in sagudev@ce58280 which keeps the trait but instead of using interfaces in bounds it uses |
I'm going to leave this up to your own judgement which is cleaner and more parsable, my initial impression is that the mod { type } approach is less infrastructure and less confusing than adding the Dispatch one |
cf170b3
to
d693c1b
Compare
@cwfitzgerald I think this is ready for concept review, it still needs more docs and maybe some polish 💅🏾. |
Nice! I'm going to take this out of draft for bookkeeping |
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.
Don't love the whole new type
alias thing, but don't really hate it enough to say no
I think we could actually inline all types uses into macro invocation (all 3 of them). Would that be better? |
Hmm, yeah I think that's fine - the whole appeal to me is to make sure things have uniform naming conventions and are all filled out, so having them all in one place seems to do that trick fine. |
I am not sure I understand, should I inline all types uses into macro or keep the |
Oh sorry was unclear, inline into the macro. |
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.
Some small things, but I think this is good to go after that!
Signed-off-by: sagudev <[email protected]>
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 have some futzing I want to do to the examples, but I'll do that post land.
Thanks!
Has this been released? I'm trying to check the changelog for when this got released |
Yes it was, but there are still some rough edges: #7533 |
Connections
Based on #6619, fixes #6330
Description
This PR enables users of wgpu to provide custom Instance impl (and other wgpu types as all other types are derived from Instance->Adapter->Device), by adding
Custom
variant and custom backend that has dyn wrapper for all types:struct DynDevice(Arc<dyn DeviceInterface>)
. I'm intermixing Custom with Dyn because I cannot really decide on name (CustomDevice
is weird, but we already have Dyn* in wgpu-hal).There are few rough sports:
RenderBundleEncoderInterface::finish
(other backends hacks around by not using dyn dispatch, but we can't:wgpu/wgpu/src/api/render_bundle_encoder.rs
Lines 54 to 60 in b876b8c
Testing
There is wgpu-custom crate that showcases how one can create Custom wgpu types.
Checklist
cargo fmt
.taplo format
.cargo clippy
. If applicable, add:--target wasm32-unknown-unknown
--target wasm32-unknown-emscripten
cargo xtask test
to run tests.CHANGELOG.md
. See simple instructions inside file.