diff options
author | Norbert Preining <norbert@preining.info> | 2022-04-07 03:01:53 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2022-04-07 03:01:53 +0000 |
commit | 4ab0687cfdd546779ccb6d8589a671441bf5865f (patch) | |
tree | 77554e11f1829a925194242636c38c7306fa43a8 /graphics/asymptote/base/shaders/sum3.glsl | |
parent | 333540a9182285f9d72d7d39be3fa730c135d664 (diff) |
CTAN sync 202204070301
Diffstat (limited to 'graphics/asymptote/base/shaders/sum3.glsl')
-rw-r--r-- | graphics/asymptote/base/shaders/sum3.glsl | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/graphics/asymptote/base/shaders/sum3.glsl b/graphics/asymptote/base/shaders/sum3.glsl index 85f55ff2a6..8e6e94bf45 100644 --- a/graphics/asymptote/base/shaders/sum3.glsl +++ b/graphics/asymptote/base/shaders/sum3.glsl @@ -1,28 +1,39 @@ layout(local_size_x=LOCAL_SIZE_X) in; uniform uint offset2; +uniform uint final; layout(binding=2, std430) buffer localSumBuffer { uint localSum[]; }; -layout(binding=3, std430) buffer globalSumBuffer { +layout(binding=3, std430) buffer globalSumBuffer +{ uint globalSum[]; }; +layout(binding=7, std430) buffer opaqueDepthBuffer +{ + uint maxSize; + float opaqueDepth[]; +}; + 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; - } + for(uint i=row+1u; i < stop; ++i) + localSum[i]=Sum += localSum[i]; - globalSum[id+1u]=Sum; + uint id1=id+1u; + if(id1 < gl_WorkGroupSize.x*gl_NumWorkGroups.x) + globalSum[id1]=Sum; + else { + globalSum[0]=maxSize; + globalSum[id1]=Sum+localSum[offset2-1u]+localSum[final]; + } } |