8 releases
0.2.1 | Mar 27, 2024 |
---|---|
0.2.0 | Feb 13, 2024 |
0.1.6 | Mar 15, 2023 |
0.1.5 | Oct 21, 2022 |
0.1.1 | Aug 19, 2020 |
#1098 in Graphics APIs
107 downloads per month
Used in 2 crates
31KB
521 lines
Inline SPIR-V
inline-spirv
ease the way you write shaders. Although as game developers, we usually compile a permutation of shader stages for different objects and materials at runtime for the best flexibility; sometimes we do want to try out some new ideas and start up dirty. This crate helps you compile GLSL/HLSL shader in your Rust code, or in external files, into SPIR-V; and embed them right inside the binary, so you are freed from all the compilation hassle.
How to Use
To inline shader source:
use inline_spirv::include_spirv;
let spv: &'static [u32] = inline_spirv!(r#"
#version 450 core
void main() { gl_Position = vec4(0, 0, 0, 1); }
"#, vert);
To include a external shader source file:
use inline_spirv::include_spirv;
let spv: &'static [u32] = include_spirv!("assets/vert.hlsl", vert, hlsl, entry="Main");
To include a precompiled SPIR-V binary:
use inline_spirv::include_spirv;
let spv: &'static [u32] = include_spirv!("assets/vert.spv");
For the full list of options please refer to the documentation.
Tips
The macro can be verbose especially you have a bunch of #include
s, so please be aware of that you can alias and define a more customized macro for yourself:
use inline_spirv::include_spirv as include_spirv_raw;
macro_rules! include_spirv {
($path:expr, $stage:ident) => {
include_spirv_raw!(
$path,
$stage, hlsl,
entry="my_entry_pt",
D VERBOSE_DEFINITION,
D ANOTHER_VERBOSE_DEFINITION="verbose definition substitution",
I "long/path/to/include/directory",
)
}
}
// ...
let vert: &[u32] = include_spirv!("examples/demo/assets/demo.hlsl", vert);
License
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Dependencies
~2–15MB
~216K SLoC