diff options
Diffstat (limited to 'Build/source/utils/asymptote/base/shaders/presum.glsl')
-rw-r--r-- | Build/source/utils/asymptote/base/shaders/presum.glsl | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/Build/source/utils/asymptote/base/shaders/presum.glsl b/Build/source/utils/asymptote/base/shaders/presum.glsl index 0bcb02c91d0..f2311c67565 100644 --- a/Build/source/utils/asymptote/base/shaders/presum.glsl +++ b/Build/source/utils/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) |