35 lines
833 B
Plaintext
35 lines
833 B
Plaintext
|
#[compute]
|
||
|
#version 450
|
||
|
|
||
|
// Invocations in the (x, y, z) dimension
|
||
|
layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
||
|
|
||
|
layout(rgba16f, set = 0, binding = 0) uniform image2D color_image;
|
||
|
|
||
|
// Our push constant
|
||
|
layout(push_constant, std430) uniform Params {
|
||
|
vec2 raster_size;
|
||
|
vec2 reserved;
|
||
|
} params;
|
||
|
|
||
|
// The code we want to execute in each invocation
|
||
|
void main() {
|
||
|
ivec2 uv = ivec2(gl_GlobalInvocationID.xy);
|
||
|
ivec2 size = ivec2(params.raster_size);
|
||
|
|
||
|
// Prevent reading/writing out of bounds.
|
||
|
if (uv.x >= size.x || uv.y >= size.y) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Read from our color buffer.
|
||
|
vec4 color = imageLoad(color_image, uv);
|
||
|
|
||
|
// Apply our changes.
|
||
|
float gray = color.r * 0.2125 + color.g * 0.7154 + color.b * 0.0721;
|
||
|
color.rgb = vec3(gray);
|
||
|
|
||
|
// Write back to our color buffer.
|
||
|
imageStore(color_image, uv, color);
|
||
|
}
|