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
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/):wgpucustom backend compatibility layer.codegen/: generator for Rust bindings fromdawn.json+webgpu.h.
Requirements
- Rust stable toolchain.
DAWN_ROOTpointing to a Dawn build/prebuilt root that contains dawn binaries and headers.
Example:
DAWN_ROOT=/path/to/dawn cargo check
Link Modes
- Default: static Dawn linkage.
- Optional dynamic linkage: enable
dawn-dynamicfeature 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.jsonfrom Dawn source).--api-header:include/webgpu/webgpu.hfrom Dawn build/prebuilt.--out-dir: usuallysrc/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.rsandsrc/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 ifDAWN_VERSIONis already current.DAWN_TAGS: override generator tags (defaultdawn,native).DAWN_CODEGEN_TARGET_OS/DAWN_CODEGEN_TARGET_ARCH: pin single target output.
Upstream References
- Dawn schema: dawn.json
- Dawn codegen docs: docs/dawn/codegen.md
- Dawn C++ API template: generator/templates/api_cpp.h
License
BSD 3-Clause. See LICENSE.
Dependencies
~5.5–8MB
~153K SLoC