11 releases
0.2.10 | Jun 8, 2024 |
---|---|
0.2.9 | Sep 20, 2023 |
0.2.8 | Mar 28, 2022 |
0.2.7 | May 5, 2021 |
0.1.0 | Feb 26, 2019 |
#175 in Rendering
620 downloads per month
Used in 5 crates
17KB
292 lines
vk-shader-macros
A procedural macro for compiling GLSL into SPIR-V constants.
Unlike the standard include_bytes
macro, paths are currently
resolved relative to crate root. This is due to a temporary limitation
in the procedural macro API.
Examples
const VERT: &[u32] = include_glsl!("shaders/example.vert");
const FRAG: &[u32] = include_glsl!("shaders/example.glsl", kind: frag);
const RGEN: &[u32] = include_glsl!("shaders/example.rgen", target: vulkan1_2); // vulkan1_2 is required to build with GL_EXT_ray_tracing
Debug info is generated by default; pass strip
to the macro to omit
it, or build the crate with the strip
feature enabled.
Why [u32]
?
SPIR-V is a stream of 32-bit words, not bytes, and this is reflected
in APIs that consume it. In particular, passing a [u8]
of SPIR-V
that is not 4-byte-aligned to Vulkan is undefined behavior. Storing
SPIR-V in its native format guarantees that this will never occur,
without requiring copying or unsafe code.
Dependencies
This crate currently depends on the foreign
shaderc library. By default, it
will attempt to use an installed shaderc library. However if it does
not exist, it will fall back to building from source, requiring git,
cmake, python 3, and a supported C++ compiler to be available in the
build environment. When using a pre-compiled shaderc, care must be
taken to use a version that is binary-compatible with the one checked
out by the shaderc crate.
You can force shaderc to be built from source by enabling the
build-from-source
feature on vk-shader-macros.
Dependencies
~29MB
~645K SLoC