dawn-rs 0.1.5-dev

Rust wrapper for the Dawn API
Documentation

dawn-rs

Rust bindings and thin wrappers for Dawn WebGPU.

Status

Active development. Not approved for production use.

Prerequisites

  1. Rust toolchain (cargo + stable toolchain).
  2. A built Dawn tree.
  3. DAWN_ROOT pointing to either:
    • the Dawn source root with build output directory that contains static libs (for example dawn/out/Release).

Build Dawn first by following the official guide:

Windows note:

  • Rust defaults to static CRT in many setups. If needed, build Dawn with /MT:
    • cmake -GNinja -B out/Release -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DABSL_MSVC_STATIC_RUNTIME=ON
  • If you build Dawn with GN instead of CMake, use a static non-component build as well:
    • gn gen out/Release --args="is_debug=false is_component_build=false is_clang=true target_cpu=\"x64\""
    • ninja -C out/Release

Quick Start

Run the native adapter example:

DAWN_ROOT=/path/to/dawn cargo run --example adapter-info

Run the native triangle example:

DAWN_ROOT=/path/to/dawn cargo run --example triangle

Run wire triangle example (dawn-rs):

DAWN_ROOT=/path/to/dawn cargo run --example triangle-wire --features wire

Run wire nya-cat example (dawn-wgpu):

DAWN_ROOT=/path/to/dawn cargo run -p dawn-wgpu --example nya-cat-wire --features wire

Code Generation

Inputs:

  • --dawn-json: path to src/dawn/dawn.json from Dawn source.
  • --api-header: path to include/webgpu/webgpu.h from Dawn build/prebuilt artifacts.

Windows:

cargo run -p dawn-codegen --bin dawn_codegen -- \
  --dawn-json <path_to_dawn_json> \
  --api-header <path_to_webgpu_h> \
  --out-dir src/generated

macOS:

cargo run -p dawn-codegen --bin dawn_codegen -- \
  --dawn-json <path_to_dawn_json> \
  --api-header <path_to_webgpu_h> \
  --out-dir src/generated \
  --clang-arg --sysroot="$(xcrun --show-sdk-path --sdk macosx)"

Notes:

  • Generated bindings are selected per OS/arch in src/generated/mod.rs.
  • build.rs handles link directives and builds the C++ wire shim.
  • Codegen is explicit; it does not run automatically during normal cargo build.

Update Dawn API Snapshot

Use the helper script to fetch the latest Dawn release and regenerate bindings:

python3 scripts/update_dawn_release.py

Optional:

  • --force to regenerate even if DAWN_VERSION is already latest.
  • DAWN_TAGS env var to override generator tags (default: dawn,native).

Upstream References

License

BSD 3-Clause "New" or "Revised" License. See LICENSE.