Crate wgsl_bindgen

Source
Expand description

§wgsl_bindgen

wgsl_bindgen is an experimental library for generating typesafe Rust bindings from WGSL shaders to wgpu.

§Features

The WgslBindgenOptionBuilder is used to configure the generation of Rust bindings from WGSL shaders. This facilitates a shader focused workflow where edits to WGSL code are automatically reflected in the corresponding Rust file. For example, changing the type of a uniform in WGSL will raise a compile error in Rust code using the generated struct to initialize the buffer.

Writing Rust code to interact with WGSL shaders can be tedious and error prone, especially when the types and functions in the shader code change during development. wgsl_bindgen is not a rendering library and does not offer high level abstractions like a scene graph or material system. However, using generated code still has a number of advantages compared to writing the code by hand.

The code generated by wgsl_bindgen can help with valid API usage like:

  • setting all bind groups and bind group bindings
  • setting correct struct fields and field types for vertex input buffers
  • setting correct struct struct fields and field types for storage and uniform buffers
  • configuring shader initialization
  • getting vertex attribute offsets for vertex buffers
  • const validation of struct memory layouts when using bytemuck

Here’s an example of how to use WgslBindgenOptionBuilder to generate Rust bindings from WGSL shaders:

use miette::{IntoDiagnostic, Result};
use wgsl_bindgen::{WgslTypeSerializeStrategy, WgslBindgenOptionBuilder, GlamWgslTypeMap};

fn main() -> Result<()> {
    WgslBindgenOptionBuilder::default()
        .workspace_root("src/shader")
        .add_entry_point("src/shader/testbed.wgsl")
        .add_entry_point("src/shader/triangle.wgsl")
        .skip_hash_check(true)
        .serialization_strategy(WgslTypeSerializeStrategy::Bytemuck)
        .type_map(GlamWgslTypeMap)
        .derive_serde(false)
        .output("src/shader.rs".to_string())
        .build()?
        .generate()
        .into_diagnostic()
}

Modules§

bevy_util
qs

Structs§

AdditionalScanDirectory
A struct representing a directory to scan for additional source files.
BindGroupLayoutGenerator
Represents a generator for creating WGSL bind group layout structures.
BindingGenerator
GlamWgslTypeMap
glam types like glam::Vec4 or glam::Mat4. Types not representable by glam like mat2x3<f32> will use the output from RustWgslTypeMap.
ImportPathPart
Import part path used in the import statement
NalgebraWgslTypeMap
nalgebra types like nalgebra::SVector<f64, 4> or nalgebra::SMatrix<f32, 2, 3>.
OverrideBindGroupEntryModulePath
Struct for overriding binding module path of bindgroup entry
OverrideStruct
This struct is used to create a custom mapping from the wgsl side to rust side, skipping generation of the struct and using the custom one instead. This also means skipping checks for alignment and size when using bytemuck for the struct. This is useful for core primitive types you would want to model in Rust side
OverrideStructAlignment
Struct for overriding alignment of specific structs.
OverrideStructFieldType
Struct for overriding the field type of specific structs.
PipelineLayoutGenerator
Regex
A compiled regular expression for searching Unicode haystacks.
RustWgslTypeMap
Rust types like [f32; 4] or [[f32; 4]; 4].
SourceFileDir
SourceFilePath
SourceLocation
SourceModuleName
WGSLBindgen
WgpuGetBindingsGeneratorConfig
WgslBindgenOption
WgslBindgenOptionBuilder
Builder for WgslBindgenOption.
WgslMatTypeIter
An iterator over the variants of WgslMatType
WgslShaderIrCapabilities
Allowed IR capabilities.
WgslVecTypeIter
An iterator over the variants of WgslVecType

Enums§

BindResourceType
CreateModuleError
Errors while generating Rust source for a WGSl shader module.
WgslBindgenError
Enum representing the possible errors that can occur in the wgsl_bindgen process.
WgslBindgenOptionBuilderError
Error type for WgslBindgenOptionBuilder
WgslMatType
The WgslType enum represents various Wgsl matrices. See spec
WgslShaderSourceType
An enum representing the source type that will be generated for the output.
WgslType
The WgslType enum represents various WGSL types, such as vectors and matrices. See spec
WgslTypeSerializeStrategy
Enum representing the possible serialization strategies for WGSL types.
WgslTypeVisibility
An enum representing the visibility of the type generated in the output
WgslVecType
The WgslType enum represents various WGSL vectors. See spec

Traits§

GetBindingsGeneratorConfig
WgslTypeMapBuild
A trait for building WgslType to TokenStream map.

Type Aliases§

FastIndexMap
Insertion-order-preserving hash map (IndexMap<K, V>), but with the same hasher as FastHashMap<K, V> (faster but not resilient to DoS attacks).
FxIndexMap
FxIndexSet
WgslTypeMap