Files
2026-07-13 13:33:03 +08:00

39 lines
935 B
Plaintext

#version 440 core
layout(std430) buffer;
layout(set=0, binding=0) writeonly buffer pointoffsetSum{
highp uvec4 data[];
} uPointoffsetSum;
layout(set=0, binding=1) readonly buffer pointoffset{
highp uvec4 data[];
} uPointoffset;
layout(set=0, binding=2) uniform constBuffer {
ivec4 point; // point size
} uConstant;
layout (constant_id = 3) const int UNIT = 128;
layout (constant_id = 4) const int LOCAL_SIZE = 1;
layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main()
{
int tId = int(gl_LocalInvocationID.x);
int size = (uConstant.point.x + 3) / 4;
int curOffset = 0;
uvec4 threadBuffer[UNIT];
uint sum = 0;
for (int i=0; i<size; ++i) {
uvec4 p0 = uPointoffset.data[i];
p0.y = p0.y + p0.x;
p0.z = p0.z + p0.y;
p0.w = p0.w + p0.z;
p0 = p0 + uvec4(sum);
uPointoffsetSum.data[i] = p0;
sum = p0.w;
}
return;
}