Jump to content
  • entries
    943
  • comments
    5,899
  • views
    923,759

Vulkan Shader Compilation


Josh

1,703 views

 Share

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.

Shader.vert:

#version 450
#extension GL_ARB_separate_shader_objects : enable

#include "VertexLayout.glsl"

layout(push_constant) uniform pushBlock
{
    vec4 materialcolor;
}
pushConstantsBlock;

layout(location = 0) out vec3 fragColor;

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

VertexLayout.glsl:

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:
Shaders.zip

  • Like 4
  • Thanks 1
 Share

0 Comments


Recommended Comments

There are no comments to display.

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