summaryrefslogtreecommitdiff
path: root/graphics/asymptote/base/shaders/sum3.glsl
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/asymptote/base/shaders/sum3.glsl')
-rw-r--r--graphics/asymptote/base/shaders/sum3.glsl28
1 files changed, 28 insertions, 0 deletions
diff --git a/graphics/asymptote/base/shaders/sum3.glsl b/graphics/asymptote/base/shaders/sum3.glsl
new file mode 100644
index 0000000000..85f55ff2a6
--- /dev/null
+++ b/graphics/asymptote/base/shaders/sum3.glsl
@@ -0,0 +1,28 @@
+layout(local_size_x=LOCAL_SIZE_X) in;
+
+uniform uint offset2;
+
+layout(binding=2, std430) buffer localSumBuffer
+{
+ uint localSum[];
+};
+
+layout(binding=3, std430) buffer globalSumBuffer {
+ uint globalSum[];
+};
+
+void main(void)
+{
+ uint id=gl_GlobalInvocationID.x;
+
+ uint row=offset2+LOCAL_SIZE_X*id;
+ uint stop=row+LOCAL_SIZE_X;
+
+ uint Sum=localSum[row];
+ for(uint i=row+1u; i < stop; ++i) {
+ Sum += localSum[i];
+ localSum[i]=Sum;
+ }
+
+ globalSum[id+1u]=Sum;
+}