#wgsl #shader #compiler #conditional-compilation #wesl #generics #module

app wesl-cli

Various tools to parse, verify, evaluate and modify wgsl shader source

2 releases

0.1.1 Feb 26, 2025
0.1.0 Feb 20, 2025

#130 in Graphics APIs

Download history 128/week @ 2025-02-17 138/week @ 2025-02-24 20/week @ 2025-03-03

286 downloads per month

MIT/Apache

1MB
23K SLoC

Rust 17K SLoC // 0.0% comments WebGPU Shader Language 4K SLoC // 0.0% comments LALRPOP 1.5K SLoC // 0.1% comments

WESL-Rust

A work in progress!

This project implements the necessary tools to build complex shaders, like what naga_oil does for bevy, but in a framework-agnostic way. At wgsl-tooling-wg we aim at standardizing a few language extensions to facilitate the work of engine developers and shader wizards.

Current and planned extensions: imports, conditional compilation, generics, modules.

Usage

This project can be used as a rust library or as a standalone CLI.

Using the CLI

  • Install cargo install --git https://github.com/wgsl-tooling-wg/wesl-rs
  • Compile a WESL shader wesl compile <entrypoint.wgsl>
  • Run eval() wesl eval <entrypoint.wgsl> <expression to eval>

Using the Crate

Refer to the crate documentation on docs.rs.

Status

update: 2025-01

We are working towards an MVP release planned for 2025 Q1. It includes imports, conditional compilation and packaging.

The crate wgsl-parse contains a WGSL-compliant syntax tree and parser, with optional syntax extensions from the WESL specification.

The crate wesl contains an implementation of the WESL specification, i.e. a compiler that takes WESL files and generates valid WGSL.

This crate contains a CLI to run the compiler and the parser.

See also:

Contributing

Contributions are welcome. Please join the discord server and introduce yourself first, or contact via email.

License

Except where noted (below and/or in individual files), all code in this repository is dual-licensed under either:

at your option.

Your contributions

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~13–21MB
~269K SLoC