39 lines
935 B
Plaintext
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;
|
|
}
|