quick commit

This commit is contained in:
2026-01-03 22:55:08 +01:00
parent 488b5a7b03
commit 9131bf063e
12 changed files with 435 additions and 150 deletions

View File

@@ -9,14 +9,18 @@ in uint gl_LocalInvocationIndex;
*/
layout(local_size_x_id = 0, local_size_y = 1, local_size_z = 1) in;
layout(push_constant) uniform PushStruct {
uint size;
} p;
layout(push_constant) uniform PushStruct
{
uint offset;
}
p;
layout(binding = 0) buffer inBuffer {
layout(binding = 0) buffer inBuffer
{
uint v[];
};
layout(binding = 1) buffer outBuffer {
layout(binding = 1) buffer outBuffer
{
uint g_v[];
};
@@ -25,22 +29,37 @@ layout(binding = 1) buffer outBuffer {
const uint bufferSize = 256;
shared uint[bufferSize] localBuffer;
void main() {
// TODO: Kernel implementation
void main()
{
uint tid = gl_LocalInvocationID.x;
uint gid = gl_WorkGroupID.x;
uint offset = gid * bufferSize;
for (uint i = p.size / 2; i < 0; i -= 2) {
localBuffer[i] = v[i] + v[i + 1];
}
uint idx1 = offset + tid;
uint idx2 = offset + tid + gl_WorkGroupSize.x;
for (uint j = bufferSize ; j != 0; j / 2) {
for (uint i = bufferSize / 2; i < 0; i -= 2) {
localBuffer[i] = localBuffer[i] + localBuffer[i + 1];
uint val1 = 0;
uint val2 = 0;
if (idx1 < p.offset)
val1 = v[idx1];
if (idx2 < p.offset)
val2 = v[idx2];
localBuffer[tid] = val1 + val2;
// Reduction in shared memory
for (uint s = gl_WorkGroupSize.x / 2; s > 0; s /= 2)
{
if (tid < s)
{
barrier();
localBuffer[tid] += localBuffer[tid + s];
}
}
localBuffer[0] = localBuffer[0] + localBuffer[1];
for (uint i = 0; i < bufferSize; i ++) {
g_v[i] = localBuffer[i];
if (tid == 0)
{
g_v[gid] = localBuffer[tid];
}
}
}