#spir-v #glsl-shader #glsl #shader #vulkan #macro #compile-time

macro glsl-to-spirv-macros-impl

This is an implementation detail of the crate glsl-to-spirv-macros. Please see that crate for more information

1 unstable release

Uses old Rust 2015

0.1.0 Jun 18, 2017

#33 in #glsl-shader

Used in ash-tray


66 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.


~233K SLoC