Jump to content

Vulkan Shader Compilation



One of the best points of Vulkan is how shaders are loaded from precompiled Spir-V files. This means GLSL shaders either work or they don't. Unlike OpenGL, there is no different outcome on Intel, AMD, or nVidia hardware. SPIR-V files can be compiled using a couple of different utilities. I favor LunarG's compiler because it supports #include directives.


#version 450
#extension GL_ARB_separate_shader_objects : enable

#include "VertexLayout.glsl"

layout(push_constant) uniform pushBlock
    vec4 materialcolor;

layout(location = 0) out vec3 fragColor;

void main()
    gl_Position = vec4(inPosition.xy, 0.0, 1.0);
    fragColor = inColor.rgb * materialcolor.rgb;


layout(location = 0) in vec3 inPosition;
layout(location = 1) in vec3 inNormal;
layout(location = 2) in vec2 inTexCoords0;
layout(location = 3) in vec2 inTexCoords1;
layout(location = 4) in vec3 inTangent;
layout(location = 5) in vec4 inColor;
layout(location = 6) in vec4 inBoneWeights;
layout(location = 7) in uvec4 inBoneIndices;

If the shader compiles successfully, then you don't have to worry about whether it works on different manufacturers' hardware. It just works. So if someone writes a new post-processing effect they don't need to test on other hardware or worry about people asking for help when it doesn't work. Because it always works the same.

You can try it yourself with these files:

  • Like 4
  • Thanks 1


Recommended Comments

There are no comments to display.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...