Vulkan Shader Compiler Utility

Continuous integration

This utility compiles my custom GLSL shader format to the SPIR-V format using shader-c.

Made for our game engine.

Building

Prerequisites

Then build with cargo build.

Execute

Get an overview of the parameters with cargo run -- -h.

For example, cargo run -- ./shaders/*.glsl -o ./output compiles all shaders in the /shaders folder and outputs the artifacts to the /output folder.

Custom Format

Our custom format combines vertex, fragment, and geometry shader in one file.

Instructions

//# at the beginning of a line denotes that a custom instruction follows. While the most instructions are optional, some are mandatory. One such instruction is TYPE, which will instruct this utility to compile the following code until the next type-instruction appears, to a shader of that type.

|Instruction|Required?|Arguments|Description|Example| |--- | --- | --- | --- | --- | |NAME|no|String|pretty formatted name of the shader||//# NAME Phong Shader| |AUTHOR|no|String|author of the shader||//# AUTHOR John Doe| |DESCRIPTION|no|String|describes what the shader does|//# DESCRIPTION Applies the phong reflection model.| |VERSION|no|Version|adds #version <version> to each shader|//# VERSION 450| |TYPE|yes|VERTEX,FRAGMENT,GEOMETRY|sets the type of the shader that follows|//# TYPE VERTEX|

Example

```glsl //# NAME Vertex Color //# AUTHOR Michael Lohr //# DESCRIPTION Renders the vertex colors

//# VERSION 450

//# TYPE VERTEX layout (location = 0) in vec3 iposition; layout (location = 1) in mat4 imodelmatrix; layout (location = 5) in vec4 icolor;

layout (location = 0) out vec4 o_color;

void main() { glPointSize = 1.0; glPosition = imodelmatrix * vec4(i_position, 1.0);

o_color = i_color;

}

//# TYPE FRAGMENT layout (location = 0) in vec4 icolor; layout (location = 0) out vec4 ocolor;

void main(){ ocolor = icolor; } ```