Shader


Description

Shaders are small programs running on the GPU. Most commonly are vertex- and fragment shaders. Both of these together take buffer data as input and output an image.

As this section does not contain any new information, we will only provide a small walkthrough of the sample shader. This should be copied to src/shader/main.glsl.

Final code

// Includes the daxa shader API
#include <daxa/daxa.inl>

// Enabled the extension GL_EXT_debug_printf
#extension GL_EXT_debug_printf : enable

// Includes our shared types we created earlier
#include <shared.inl>

// Enabled the push constant MyPushConstant we specified in shared.inl
DAXA_DECL_PUSH_CONSTANT(MyPushConstant, push)

// We can define the vertex & fragment shader in one single file
#if DAXA_SHADER_STAGE == DAXA_SHADER_STAGE_VERTEX

layout(location = 0) out daxa_f32vec3 v_col;
void main()
{
MyVertex vert = deref(push.my_vertex_ptr[gl_VertexIndex]);
gl_Position = daxa_f32vec4(vert.position, 1);
v_col = vert.color;
}

#elif DAXA_SHADER_STAGE == DAXA_SHADER_STAGE_FRAGMENT

layout(location = 0) in daxa_f32vec3 v_col;
layout(location = 0) out daxa_f32vec4 color;
void main()
{
color = daxa_f32vec4(v_col, 1);
debugPrintfEXT("test\n");
}

#endif