2 releases
0.1.1 | Apr 7, 2024 |
---|---|
0.1.0 | Apr 1, 2024 |
#87 in Data formats
16KB
244 lines
Tran(shader
)
Transpile shaders from one language to another using procedural macros.
Features
Functionality is split into different modules which allow you to transpile from/to any supported language.
The default
feature already includes all of them.
Supported Frontend Languages
from-glsl
- Transpile OpenGL Shading Language (GLSL) Shaders.from-spv
- Transpile Standard Portable Intermediate Representation for Vulkan (SPIR-V) Shaders.from-wgsl
- Transpile Web GPU Shader Language (WGSL) Shaders.
Supported Backend Languages
to-glsl
- Transpile shaders to OpenGL Shading Language (GLSL) Shaders.to-msl
- Transpile shaders to Metal Shading Language (MSL) Shaders.to-spv
- Transpile shaders to Standard Portable Intermediate Representation for Vulkan (SPIR-V) Shaders.to-wgsl
- Transpile shaders to Web GPU Shader Language (WGSL) Shaders.to-hlsl
- Transpile shaders to High Level Shader Language (HLSL) Shaders.
Why?
Some Multi-Backend Graphics APIs (like bgfx) require shaders for every backend (GLSL for OpenGL; HLSL for D3D; MSL for Metal; SPIR-V for Vulkan; WGSL for WebGPU). You can either try to transpile your shaders using naga
during Runtime (which would affect performance) or transpile each shader using a build.rs
script.
This tool simply transpiles shaders during compile-time without any hassle.
How?
Transhader uses naga and Rust's procedural macro system to generate optimal shader code. Configure shader transpiler options using the Rusty-Object-Notation.
Drawbacks
- Limited shader language support.
- Longer compile-times, since shaders are transpiled using procedural macros.
- Less customization of transpiler options (though I am working on it).
License
Transhader is dual licensed under the MIT and Apache 2.0 licenses.
Dependencies
~7–15MB
~187K SLoC