Crate wgpu

source ·
Expand description

A cross-platform graphics and compute library based on WebGPU.

To start using the API, create an Instance.

Feature flags

Backends

⚠️ WIP: Not all backends can be manually configured today. On Windows, Linux & Android the Vulkan & GLES backends are always enabled. See #3514 for more details.

  • dx12 (enabled by default) — Enables the DX12 backend on Windows.

  • metal (enabled by default) — Enables the Metal backend on macOS & iOS.

  • webgpu (enabled by default) — Enables the WebGPU backend on Wasm. Disabled when targeting emscripten.

  • angle — Enables the GLES backend via ANGLE on macOS using.

  • vulkan-portability — Enables the Vulkan backend on macOS & iOS.

  • webgl — Enables the GLES backend on Wasm

    • ⚠️ WIP: Currently will also enable GLES dependencies on any other targets.

Note: In the documentation, if you see that an item depends on a backend, it means that the item is only available when that backend is enabled and the backend is supported on the current platform.

Shading language support

  • spirv — Enable accepting SPIR-V shaders as input.
  • glsl — Enable accepting GLSL shaders as input.
  • wgsl (enabled by default) — Enable accepting WGSL shaders as input.
  • naga-ir — Enable accepting naga IR shaders as input.

Logging & Tracing

The following features do not have any effect on the WebGPU backend.

  • strict_asserts — Apply run-time checks, even in release builds. These are in addition to the validation carried out at public APIs in all builds.
  • serde — Enables serialization via serde on common wgpu types.
  • replay — Allow deserializing of trace capture files that were written with the trace feature. To replay a trace file use the wgpu player.

Other

  • counters — Internally count resources and events for debugging purposes. If the counters feature is disabled, the counting infrastructure is removed from the build and the exposed counters always return 0.

  • fragile-send-sync-non-atomic-wasm — Implement Send and Sync on Wasm, but only if atomics are not enabled.

    WebGL/WebGPU objects can not be shared between threads. However, it can be useful to artificially mark them as Send and Sync anyways to make it easier to write cross-platform code. This is technically very unsafe in a multithreaded environment, but on a wasm binary compiled without atomics we know we are definitely not in a multithreaded environment.

External libraries

The following features facilitate integration with third-party supporting libraries.

  • static-dxc — Enables statically linking DXC. Normally, to use the modern DXC shader compiler with WGPU, the final application must be shipped alongside dxcompiler.dll and dxil.dll (which can be downloaded from Microsoft’s GitHub). This feature statically links a version of DXC so that no external binaries are required to compile DX12 shaders.

Feature Aliases

These features aren’t actually features on the crate itself, but a convenient shorthand for complicated cases.

  • wgpu_core — Enabled when there is any non-webgpu backend enabled on the platform.
  • naga –– Enabled when any non-wgsl shader input is enabled.

Re-exports

  • pub use ::wgc as core;
    wgpu_core
  • pub use ::hal;
    wgpu_core
  • pub use ::wgc::naga;
    wgpu_core or naga
  • pub use raw_window_handle as rwh;

Modules

  • Utility structures and functions that are built on top of the main wgpu API.

Macros

Structs

Enums

Constants

Traits

Type Aliases