New versions of several crates are introduced to third_party/rust, by
changing the versions requested in `gfx/wgpu_bindings/Cargo.toml` and
running `mach vendor rust`:
- `wgpu-core`, `wgpu-hal`, and `wgpu-types`, as used by `wgpu_bindings`
- `naga`, `ash`, and `metal`, as used by the above
These are all exact copies of the upstream sources, at the git
revisions listed in `.cargo/config.in`.
This brings in fixes for some upstream `wgpu` bugs that were fuzzblockers:
- Compute pipelines never freed at runtime, leaking memory #2564https://github.com/gfx-rs/wgpu/issues/2564
- Device::drop doesn't actually free the device when using backend::direct::Context #2563https://github.com/gfx-rs/wgpu/issues/2563
The Firefox sources also needed some adjustments to catch up with
upstream changes:
- The C type `mozilla::webgpu::ffi::WGPUTextureFormat` is now a struct
containing a tag enum and a union, not just an enum. This is needed
for [gfx-rs/wgpu#2477](https://github.com/gfx-rs/wgpu/pull/2477).
(Note that Firefox's `WebGPU.webidl` is behind the current spec,
so even though the newest ASTC texture formats are supported in `wgpu`,
they're not available in Firefox yet.)
- `wgpu` got a new feature, `id32`, which cbindgen needed to be told
about so that it would generate preprocessor-protected code like
this:
#if defined(WGPU_FEATURE_ID32)
typedef uint32_t WGPUNonZeroId;
#endif
#if !defined(WGPU_FEATURE_ID32)
typedef uint64_t WGPUNonZeroId;
#endif
instead of just spitting out two conflicting definitions of
`WGPUNonZeroId`.
- The `wgpu_core::hub::IdentityHandlerFactory` trait's `spawn` method
no longer takes a `min_index` argument. (Our implementations of that
trait never used that argument anyway, so this was easy to
accommodate.)
Differential Revision: https://phabricator.services.mozilla.com/D142779
New versions of several crates are introduced to third_party/rust, by
changing the versions requested in `gfx/wgpu_bindings/Cargo.toml` and
running `mach vendor rust`:
- `wgpu-core`, `wgpu-hal`, and `wgpu-types`, as used by `wgpu_bindings`
- `naga`, `ash`, and `metal`, as used by the above
These are all exact copies of the upstream sources, at the git
revisions listed in `.cargo/config.in`.
This brings in fixes for some upstream `wgpu` bugs that were fuzzblockers:
- Compute pipelines never freed at runtime, leaking memory #2564https://github.com/gfx-rs/wgpu/issues/2564
- Device::drop doesn't actually free the device when using backend::direct::Context #2563https://github.com/gfx-rs/wgpu/issues/2563
The Firefox sources also needed some adjustments to catch up with
upstream changes:
- The C type `mozilla::webgpu::ffi::WGPUTextureFormat` is now a struct
containing a tag enum and a union, not just an enum. This is needed
for [gfx-rs/wgpu#2477](https://github.com/gfx-rs/wgpu/pull/2477).
(Note that Firefox's `WebGPU.webidl` is behind the current spec,
so even though the newest ASTC texture formats are supported in `wgpu`,
they're not available in Firefox yet.)
- `wgpu` got a new feature, `id32`, which cbindgen needed to be told
about so that it would generate preprocessor-protected code like
this:
#if defined(WGPU_FEATURE_ID32)
typedef uint32_t WGPUNonZeroId;
#endif
#if !defined(WGPU_FEATURE_ID32)
typedef uint64_t WGPUNonZeroId;
#endif
instead of just spitting out two conflicting definitions of
`WGPUNonZeroId`.
- The `wgpu_core::hub::IdentityHandlerFactory` trait's `spawn` method
no longer takes a `min_index` argument. (Our implementations of that
trait never used that argument anyway, so this was easy to
accommodate.)
Differential Revision: https://phabricator.services.mozilla.com/D142779
Record the trace of each instance into "$WGPU_TRACE/$IDX/" where $IDX is a monotonically increasing integer per instance.
Differential Revision: https://phabricator.services.mozilla.com/D138814
Record the trace of each instance into "$WGPU_TRACE/$IDX/" where $IDX is a monotonically increasing integer per instance.
Differential Revision: https://phabricator.services.mozilla.com/D138814
Brings a few important fixes:
- better WGSL support
- Solaris build (1729751)
- crash in "_MTLCommandEncoder dealloc" (1729648)
Differential Revision: https://phabricator.services.mozilla.com/D125103
we were doing UTF16 -> ASCII null term -> UTF8, and we were losing information on the way.
Now we go UTF16 -> UTF8 -> UTF8 null term
Also, we no longer accept SPIR-V
Differential Revision: https://phabricator.services.mozilla.com/D125123
This update makes wgpu a vendored dependency instead of having it in gfx/wgpu.
## Notes
It relies on https://phabricator.services.mozilla.com/D123157
It has a quirk related to OpenGL ES backend. Previousy, we manually had to disable GL backend
in order to avoid vendoring WASM dependencies in. This time, manual editing is more complicated,
so instead this change adds a few cargo patch lines to point WASM dependencies to dummy projects.
The update also totally removes SPIRV-Cross, since the latest `wgpu` doesn't depend on it any more.
The compiled binary size for Gecko should improve with this.
Differential Revision: https://phabricator.services.mozilla.com/D123153
This *mostly* gets us the latest WebIDL API of WebGPU. There is a few limits we are missing, and maybe some things I didn't notice.
But it gets us the new `GPUCanvasContext`, `GPUSupportedLimits`, and `GPUVertexStepMode`.
Differential Revision: https://phabricator.services.mozilla.com/D120764
This *mostly* gets us the latest WebIDL API of WebGPU. There is a few limits we are missing, and maybe some things I didn't notice.
But it gets us the new `GPUCanvasContext`, `GPUSupportedLimits`, and `GPUVertexStepMode`.
Differential Revision: https://phabricator.services.mozilla.com/D120764
This *mostly* gets us the latest WebIDL API of WebGPU. There is a few limits we are missing, and maybe some things I didn't notice.
But it gets us the new `GPUCanvasContext`, `GPUSupportedLimits`, and `GPUVertexStepMode`.
Differential Revision: https://phabricator.services.mozilla.com/D120764
When the pipeline layout is implicit at pipeline creation,
we collect the IDs of BGLs, to be able to produce GPUBindGroupLayout
object upon user request. However, the produced object didn't know if
it owns the ID or borrows it, so it would issue a "drop" when going out of scope.
This change establishes this distinction. In addition, it gets the Pipeline Layout ID,
and together with the BGL ids, they are sent to GPU process upon pipeline destruction.
When the GPU process is done with these IDs used, it will kick back a message to the
Content process, allowing the IDs to be reclaimed.
Differential Revision: https://phabricator.services.mozilla.com/D114649
Updates wgpu, WebGPU IDL, in particular the ImageCopyXxx types and render pass attachments.
Adds explicit mapping of the GPUTextureFormat enum. Our old casting was incorrect, because the enums diverged a bit.
Differential Revision: https://phabricator.services.mozilla.com/D110997
Updates wgpu, WebGPU IDL, in particular the ImageCopyXxx types and render pass attachments.
Adds explicit mapping of the GPUTextureFormat enum. Our old casting was incorrect, because the enums diverged a bit.
Differential Revision: https://phabricator.services.mozilla.com/D110997
This is another WebGPU API update, it picks up a lot of changes that were made recently:
- new bind group layout
- new render pipeline descriptor
- new vertex formats
- limits
- compressed texture formats
- index format
- query sets
- and more small ones!
It also brings in the updated `gfx/wgpu` to support these API changes.
Differential Revision: https://phabricator.services.mozilla.com/D107013
This is another WebGPU API update, it picks up a lot of changes that were made recently:
- new bind group layout
- new render pipeline descriptor
- new vertex formats
- limits
- compressed texture formats
- index format
- query sets
- and more small ones!
It also brings in the updated `gfx/wgpu` to support these API changes.
Differential Revision: https://phabricator.services.mozilla.com/D107013
Instead of having a separate IPC message type for every kind of object ID freeing,
we are encoding this into Rust enums and passing under the same DropAction.
This saves a bunch of lines of code, and allows us to free IDs in bulk where we need it.
Differential Revision: https://phabricator.services.mozilla.com/D105492
the goal of this PR is to provide the necessary
infrastructure to handle errors on the GPU process side and send them
back to the client side, triggering the uncaptured error events.
Differential Revision: https://phabricator.services.mozilla.com/D98542
This change updates and enables Naga to get the
SPIRV shaders parsed, validated, and reflected back into
implicit bind group layouts.
WebGPU examples heavily rely on the implicit layouts now,
and the PR also updates the WebIDL to make that possible.
With the change, we are able to run most of the examples again!
Differential Revision: https://phabricator.services.mozilla.com/D96850
This PR updates wgpu to the latest and changes the way we pass object descriptors to the GPU process.
Instead of trying to convert them between DOM-CPP-IPDL-FFI-Rust, we now do DOM-FFI-Rust
and serialize them by serde into ipc::ByteBuf objects.
Differential Revision: https://phabricator.services.mozilla.com/D94908