Raw data computations
The following sample code is another very simple compute shader example, but it completes the basic sets of operations. First, we handled image data, now, we will handle raw data. In this example, the shader will receive two arrays of the same size, and we will use the shader to sum them together into a third array.
As always, let's go first with the shader's code:
#version 430 layout (local_size_x = 16, local_size_y = 1, local_size_z = 1) in; uniform int BufferSize; layout(std430, binding = 0) buffer InputBufferA{float inA[];}; layout(std430, binding = 1) buffer InputBufferB{float inB[];}; layout(std430, binding=2) buffer OutputBuffer{float outBuffer[];}; void main() { uint index = gl_GlobalInvocationID.x; if(index >= BufferSize) { return; } outBuffer[index] = inA[index] + inB[index]; }
As you can see, we are using each work item to process only one array's element. The two important things here are the declaration of the buffers and the return that controls...