mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-06-24 18:21:33 +00:00
Implement support for WebAssembly threads
... and add a parallel raytracing demo! This commit adds enough support to `wasm-bindgen` to produce a workable wasm binary *today* with the experimental WebAssembly threads support implemented in Firefox Nightly. I've tried to comment what's going on in the commits and such, but at a high level the changes made here are: * A new transformation, living in a new `wasm-bindgen-threads-xform` crate, prepares a wasm module for parallel execution. This performs a number of mundane tasks which I hope to detail in a blog post later on. * The `--no-modules` output is enhanced with more support for when shared memory is enabled, allowing passing in the module/memory to initialize the wasm instance on multiple threads (sharing both module and memory). * The `wasm-bindgen` crate now offers the ability, in `--no-modules` mode, to get a handle on the `WebAssembly.Module` instance. * The example itself requires Xargo to recompile the standard library with atomics and an experimental feature enabled. Afterwards it experimentally also enables threading support in wasm-bindgen. I've also added hopefully enough CI support to compile this example in a builder so we can upload it and poke around live online. I hope to detail more about the technical details here in a blog post soon as well!
This commit is contained in:
@ -26,6 +26,7 @@
|
||||
- [web-sys: WebAudio](./examples/web-audio.md)
|
||||
- [web-sys: WebGL](./examples/webgl.md)
|
||||
- [web-sys: A Simple Paint Program](./examples/paint.md)
|
||||
- [Parallel Raytracing](./examples/raytrace.md)
|
||||
- [Reference](./reference/index.md)
|
||||
- [Passing Rust Closures to JS](./reference/passing-rust-closures-to-js.md)
|
||||
- [Receiving JS Closures in Rust](./reference/receiving-js-closures-in-rust.md)
|
||||
|
26
guide/src/examples/raytrace.md
Normal file
26
guide/src/examples/raytrace.md
Normal file
@ -0,0 +1,26 @@
|
||||
# Parallel Raytracing
|
||||
|
||||
[View full source code][code] or [view the compiled example online][online]
|
||||
|
||||
[online]: https://rustwasm.github.io/wasm-bindgen/exbuild/raytrace-parallel/
|
||||
[code]: https://github.com/rustwasm/wasm-bindgen/tree/master/examples/raytrace-parallel
|
||||
|
||||
**This is an unstable and experimental example** of using threads with
|
||||
WebAssembly and Rust, culminating in a parallel raytracer demo. Current
|
||||
requirements for viewing this demo are:
|
||||
|
||||
* Firefox Nightly - other browsers haven't implemented the proposed WebAssembly
|
||||
features yet.
|
||||
* `SharedArrayBuffer` is enabled in `about:config` in Firefox
|
||||
|
||||
This demo may also break over time as Firefox updates, but we'll try to keep it
|
||||
working!
|
||||
|
||||
Locally to build this demo you'll need `xargo` and the `rust-src` rustup
|
||||
component, and afterwards `./build.sh` like other examples should build the
|
||||
example.
|
||||
|
||||
Again, to reiterate, this is all experimental and we're working through various
|
||||
issues as we're working on this. If you're curious to see how this works it's
|
||||
best to explore via the source code right now! More info will be available here
|
||||
once WebAssembly threads are closer to stabilization.
|
Reference in New Issue
Block a user