7 releases

Uses new Rust 2024

new 0.1.5-dev Mar 9, 2026
0.1.4-dev Mar 3, 2026
0.1.3-dev Feb 28, 2026

#148 in Procedural macros

BSD-3-Clause

140KB
4K SLoC

dawn-rs

Rust bindings for Dawn WebGPU, plus dawn-wgpu compatibility wrappers for wgpu.

Project Layout

  • dawn-rs (src/): generated + thin handwritten bindings over Dawn C API.
  • dawn-wgpu (dawn-wgpu/): wgpu custom backend compatibility layer.
  • codegen/: generator for Rust bindings from dawn.json + webgpu.h.

Requirements

  • Rust stable toolchain.
  • DAWN_ROOT pointing to a Dawn build/prebuilt root that contains dawn binaries and headers.

Example:

DAWN_ROOT=/path/to/dawn cargo check
  • Default: static Dawn linkage.
  • Optional dynamic linkage: enable dawn-dynamic feature where needed.

Quick Start

dawn-rs adapter info:

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

dawn-rs triangle:

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

dawn-wgpu triangle:

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

Wire examples:

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

Code Generation

Inputs:

  • --dawn-json: Dawn schema file (src/dawn/dawn.json from Dawn source).
  • --api-header: include/webgpu/webgpu.h from Dawn build/prebuilt.
  • --out-dir: usually src/generated.
  • --target-os / --target-arch (optional): override target file naming.

Host-target generation:

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

Explicit single-target generation:

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

Notes:

  • One invocation updates one OS/arch generated file.
  • Dispatch modules live in src/generated/mod.rs and src/ffi/mod.rs.
  • Codegen is explicit and not run automatically by cargo build.

Update Dawn Snapshot

Regenerate against latest Dawn release:

python3 scripts/update_dawn_release.py

Optional:

  • --force: regenerate even if DAWN_VERSION is already current.
  • DAWN_TAGS: override generator tags (default dawn,native).
  • DAWN_CODEGEN_TARGET_OS / DAWN_CODEGEN_TARGET_ARCH: pin single target output.

Upstream References

License

BSD 3-Clause. See LICENSE.

Dependencies

~5.5–8MB
~153K SLoC