diff options
Diffstat (limited to 'graphics/asymptote/base/shaders/presum.glsl')
-rw-r--r-- | graphics/asymptote/base/shaders/presum.glsl | 19 |
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) |