summaryrefslogtreecommitdiff
path: root/graphics/asymptote/base
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-01-23 03:01:14 +0000
committerNorbert Preining <norbert@preining.info>2022-01-23 03:01:14 +0000
commit47551fbf494bf778f45c78692a0ff17d771b96d7 (patch)
tree1f44a26e32c56c992ec9a362455a7cc1dff71091 /graphics/asymptote/base
parent26bfc07f2b7829213356de43cf5b81c3ba99e338 (diff)
CTAN sync 202201230301
Diffstat (limited to 'graphics/asymptote/base')
-rw-r--r--graphics/asymptote/base/shaders/partialsum.glsl24
-rw-r--r--graphics/asymptote/base/shaders/postsum.glsl28
-rw-r--r--graphics/asymptote/base/shaders/presum.glsl19
-rw-r--r--graphics/asymptote/base/v3dheadertypes.asy2
-rw-r--r--graphics/asymptote/base/v3dtypes.asy2
5 files changed, 35 insertions, 40 deletions
diff --git a/graphics/asymptote/base/shaders/partialsum.glsl b/graphics/asymptote/base/shaders/partialsum.glsl
index 0506965c23..4b04a01dae 100644
--- a/graphics/asymptote/base/shaders/partialsum.glsl
+++ b/graphics/asymptote/base/shaders/partialsum.glsl
@@ -1,7 +1,6 @@
layout(local_size_x=PROCESSORS) in;
uniform uint elements;
-uniform uint steps;
layout(binding=0, std430) buffer sumBuffer
{
@@ -15,11 +14,6 @@ layout(binding=1, std430) buffer offsetBuffer
shared uint sharedData[PROCESSORS];
-uint ceilquotient(uint a, uint b)
-{
- return (a+b-1u)/b;
-}
-
void main(void)
{
uint id=gl_LocalInvocationID.x;
@@ -30,25 +24,25 @@ void main(void)
uint index=id << 1u;
sharedData[index+1u] += sharedData[index];
barrier();
- uint step;
- for(step=1u; step < steps-1u; step++) {
+ for(uint step=1u; step < STEPSM1; step++) {
uint mask=(1u << step)-1u;
uint index=((id >> step) << (step+1u))+mask;
uint windex=index+(id&mask)+1u;
sharedData[windex] += sharedData[index];
barrier();
}
- uint mask=(1u << step)-1u;
- index=((id >> step) << steps)+mask;
+ uint mask=(1u << STEPSM1)-1u;
+ index=((id >> STEPSM1) << (STEPSM1+1u))+mask;
uint windex=index+(id&mask)+1u;
if(windex < PROCESSORS)
sharedData[windex] += sharedData[index];
barrier();
- uint m=ceilquotient(elements,PROCESSORS);
-
- if(id+1u < PROCESSORS)
- offset[m*(id+1u)] += sharedData[id];
- else
+ uint id1=id+1u;
+ if(id1 < PROCESSORS) {
+ uint m=elements/PROCESSORS;
+ uint row=m*id1+min(id1,elements-m*PROCESSORS);
+ offset[row] += sharedData[id];
+ } else
sum[0]=sharedData[id]; // Store fragment size in sum[0]
}
diff --git a/graphics/asymptote/base/shaders/postsum.glsl b/graphics/asymptote/base/shaders/postsum.glsl
index 9a2afaf845..999fe5fdf3 100644
--- a/graphics/asymptote/base/shaders/postsum.glsl
+++ b/graphics/asymptote/base/shaders/postsum.glsl
@@ -7,24 +7,24 @@ 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-1u;
+ 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 curr=offset[row];
- for(uint i=row; i < stop; ++i) {
- uint next=offset[i+1u];
- curr += next;
- offset[i+1u]=curr;
+ uint Sum=offset[row];
+ for(uint i=row+1u; i < stop; ++i) {
+ Sum += offset[i];
+ offset[i]=Sum;
}
}
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)
diff --git a/graphics/asymptote/base/v3dheadertypes.asy b/graphics/asymptote/base/v3dheadertypes.asy
index 3243fb3f4d..1932d23d8b 100644
--- a/graphics/asymptote/base/v3dheadertypes.asy
+++ b/graphics/asymptote/base/v3dheadertypes.asy
@@ -1,6 +1,6 @@
// Enum class for v3dheadertypes
// AUTO-GENERATED from v3dheadertypes.csv
-// Generated at 2022-01-19 22:30:10.732250
+// Generated at 2022-01-21 20:50:28.286711
struct v3dheadertypes
{
diff --git a/graphics/asymptote/base/v3dtypes.asy b/graphics/asymptote/base/v3dtypes.asy
index 12e2d58c28..f885de3c75 100644
--- a/graphics/asymptote/base/v3dtypes.asy
+++ b/graphics/asymptote/base/v3dtypes.asy
@@ -1,6 +1,6 @@
// Enum class for v3dtypes
// AUTO-GENERATED from v3dtypes.csv
-// Generated at 2022-01-19 22:30:10.647049
+// Generated at 2022-01-21 20:50:28.223119
struct v3dtypes
{