summaryrefslogtreecommitdiff
path: root/graphics/asymptote/base/shaders/presum.glsl
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/asymptote/base/shaders/presum.glsl')
-rw-r--r--graphics/asymptote/base/shaders/presum.glsl19
1 files changed, 10 insertions, 9 deletions
diff --git a/graphics/asymptote/base/shaders/presum.glsl b/graphics/asymptote/base/shaders/presum.glsl
index 0bcb02c91d..f2311c6756 100644
--- a/graphics/asymptote/base/shaders/presum.glsl
+++ b/graphics/asymptote/base/shaders/presum.glsl
@@ -12,19 +12,20 @@ layout(binding=1, std430) buffer offsetBuffer
uint offset[];
};
-uint ceilquotient(uint a, uint b)
-{
- return (a+b-1u)/b;
-}
-
void main(void)
{
uint id=gl_GlobalInvocationID.x;
- uint m=ceilquotient(elements,gl_NumWorkGroups.x);
- uint row=m*id;
- uint col=min(m,elements-row);
- uint stop=row+col;
+ uint m=elements/gl_NumWorkGroups.x;
+ uint r=elements-m*gl_NumWorkGroups.x;
+ uint row,stop;
+ if(id < r) {
+ row=m*id+id;
+ stop=row+m+1;
+ } else {
+ row=m*id+r;
+ stop=row+m;
+ }
uint Sum=offset[row];
for(uint i=row+1u; i < stop; ++i)