#vulkan #spirv #glsl #shader #macro


Macros for generating SPIR-V shader binaries from GLSL at compile time for use with Vulkan. To use this crate, you must also use the glsl-to-spirv-macros-impl crate

3 releases

Uses old Rust 2015

0.1.1 Jul 9, 2017
0.1.0 Jun 18, 2017

#500 in Graphics APIs

Download history 6/week @ 2022-11-28 13/week @ 2022-12-05 19/week @ 2022-12-12 19/week @ 2022-12-19 8/week @ 2022-12-26 6/week @ 2023-01-02 10/week @ 2023-01-09 6/week @ 2023-01-16 21/week @ 2023-01-23 23/week @ 2023-01-30 5/week @ 2023-02-06 20/week @ 2023-02-13 37/week @ 2023-02-20 5/week @ 2023-02-27 17/week @ 2023-03-06 16/week @ 2023-03-13

81 downloads per month
Used in ash-tray


132 lines



glsl-to-spirv-macros = "0.1.1"
glsl-to-spirv-macros-impl = "0.1.0"

Rust macros for generating SPIR-V binaries at compile time for use with Vulkan.

To use this crate, you must also use the glsl-to-spirv-macros-impl crate.


Use this crate to compile your GLSL shaders at compile time into binaries embedded in your program.

This crate requires you to also use the glsl-to-spirv-macros-impl crate. Without it these macros will not work. Unfortunately it is not yet possible to combine the two crates into one.

Example usage:

#[macro_use] extern crate glsl_to_spirv_macros;
#[macro_use] extern crate glsl_to_spirv_macros_impl;

static some_shader: &'static [u8] = glsl_vs!{r#"
    // Shader code here

fn main() {
    let another_shader = include_glsl_fs!("path/to/shader");

All macros in this crate return &'static [u8], and can be used in the definition of static as well as local variables. Every macro takes a string literal, e.g. "...", r#"..."# etc.

These macros generate Vulkan-compatible SPIR-V binaries using the official glslang compiler - they are not designed for use with other APIs, like OpenCL.


This library is licensed under either of

at your option.


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.

No runtime deps