pl-template/shaders/shader.comp

30 lines
1.1 KiB
Plaintext

#version 450
layout(set = 0, binding = 0) buffer Pos {
float values[ ];
};
layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main()
{
// PRACTICE (how to get 6144 to the shader without hard coding?)
const uint row_stride = 6144 * 4;
uint pixel_x = gl_GlobalInvocationID.x;
uint pixel_y = gl_GlobalInvocationID.y;
// const int iXCoord = int(gl_WorkGroupID.x * 8 + gl_LocalInvocationID.x);
// original colors
float fOriginalRed = values[ pixel_x * 4 + pixel_y * row_stride];
float fOriginalGreen = values[ pixel_x * 4 + pixel_y * row_stride + 1];
float fOriginalBlue = values[ pixel_x * 4 + pixel_y * row_stride + 2];
float fOriginalAlpha = values[ pixel_x * 4 + pixel_y * row_stride + 3];
// swap red & green channels (and unnormalize)
values[pixel_x * 4 + pixel_y * row_stride] = clamp(fOriginalRed * 255, 0, 255);
values[pixel_x * 4 + pixel_y * row_stride + 1] = clamp(fOriginalGreen * 255, 0, 255);
values[pixel_x * 4 + pixel_y * row_stride + 2] = clamp(fOriginalBlue * 255, 0, 255);
values[pixel_x * 4 + pixel_y * row_stride + 3] = clamp(255, 0, 255);
}