[][src]Crate vulkano_shaders

The procedural macro for vulkano's shader system. Manages the compile-time compilation of GLSL into SPIR-V and generation of assosciated rust code.

Basic usage

mod vs {
    vulkano_shaders::shader!{
        ty: "vertex",
        src: "
#version 450

layout(location = 0) in vec3 position;

void main() {
    gl_Position = vec4(position, 1.0);
}"
    }
}

Details

If you want to take a look at what the macro generates, your best options are to either read through the code that handles the generation (the reflect function in the vulkano-shaders crate) or use a tool such as cargo-expand to view the expansion of the macro in your own code. It is unfortunately not possible to provide a generated_example module like some normal macro crates do since derive macros cannot be used from the crate they are declared in. On the other hand, if you are looking for a high-level overview, you can see the below section.

Generated code overview

The macro generates the following items of interest:

All of these generated items will be accessed through the module specified by mod_name: foo If you wanted to store the Shader in a struct of your own, you could do something like this:

// various use statements
// `vertex_shader` module with shader derive

pub struct Shaders {
    pub vs: vs::Shader
}

impl Shaders {
    pub fn load(device: Arc<Device>) -> Result<Self, OomError> {
        Ok(Self {
            vs: vs::Shader::load(device)?,
        })
    }
}

Options

The options available are in the form of the following attributes:

ty: "..."

This defines what shader type the given GLSL source will be compiled into. The type can be any of the following:

For details on what these shader types mean, see Vulkano's documentation.

src: "..."

Provides the raw GLSL source to be compiled in the form of a string. Cannot be used in conjunction with the path field.

path: "..."

Provides the path to the GLSL source to be compiled, relative to Cargo.toml. Cannot be used in conjunction with the src field.

include: ["...", "...", ..., "..."]

Specifies the standard include directories to be searched through when using the #include <...> directive within a shader source. If path was specified, relative paths can also be used (#include "..."), without the need to specify one or more standard include directories. Relative paths are relative to the directory, which contains the source file the #include "..." directive is declared in.

dump: true

The crate fails to compile but prints the generated rust code to stdout.

Macros

shader