aboutsummaryrefslogtreecommitdiff
path: root/src/shader/code/stream.glsl
diff options
context:
space:
mode:
authorAdrian Kummerlaender2019-02-25 19:57:11 +0100
committerAdrian Kummerlaender2019-02-25 19:57:11 +0100
commit26c1cf58f483e64d80703fe37c4bd3923d1ff5b7 (patch)
tree7cfd9a7a6a919d0879a096ff1f9b27200800ec56 /src/shader/code/stream.glsl
parentdbac2c0b8722e17ea211fc47a6fd92f8db48402e (diff)
downloadcompustream-26c1cf58f483e64d80703fe37c4bd3923d1ff5b7.tar
compustream-26c1cf58f483e64d80703fe37c4bd3923d1ff5b7.tar.gz
compustream-26c1cf58f483e64d80703fe37c4bd3923d1ff5b7.tar.bz2
compustream-26c1cf58f483e64d80703fe37c4bd3923d1ff5b7.tar.lz
compustream-26c1cf58f483e64d80703fe37c4bd3923d1ff5b7.tar.xz
compustream-26c1cf58f483e64d80703fe37c4bd3923d1ff5b7.tar.zst
compustream-26c1cf58f483e64d80703fe37c4bd3923d1ff5b7.zip
Merge streaming into collide shaderpattern/ab
i.e. implement the A-B pattern. Dispatching only one compute shader per interaction-less simulation step already yields very noticeable performance gains. All cell types are now fully handled by the collide shader which further simplifies the code.
Diffstat (limited to 'src/shader/code/stream.glsl')
-rw-r--r--src/shader/code/stream.glsl82
1 files changed, 0 insertions, 82 deletions
diff --git a/src/shader/code/stream.glsl b/src/shader/code/stream.glsl
deleted file mode 100644
index 59aed98..0000000
--- a/src/shader/code/stream.glsl
+++ /dev/null
@@ -1,82 +0,0 @@
-static const std::string STREAM_SHADER_CODE = R"(
-#version 430
-
-layout (local_size_x = 1, local_size_y = 1) in;
-
-layout (std430, binding=1) buffer bufferCollide { float collideCells[]; };
-layout (std430, binding=2) buffer bufferStream { float streamCells[]; };
-layout (std430, binding=3) buffer bufferFluid { float fluidCells[]; };
-
-/// LBM constants
-
-uniform uint nX;
-uniform uint nY;
-
-const uint q = 9;
-
-// Array indexing
-
-uint indexOfDirection(int i, int j) {
- return 3*(i+1) + (j+1);
-}
-
-uint indexOfLatticeCell(uint x, uint y) {
- return q*nX*y + q*x;
-}
-
-uint indexOfFluidVertex(uint x, uint y) {
- return 3*nX*y + 3*x;
-}
-
-/// Data access
-
-float get(uint x, uint y, int i, int j) {
- return collideCells[indexOfLatticeCell(x,y) + indexOfDirection(i,j)];
-}
-
-void set(uint x, uint y, int i, int j, float v) {
- streamCells[indexOfLatticeCell(x,y) + indexOfDirection(i,j)] = v;
-}
-
-int getMaterial(uint x, uint y) {
- const uint idx = indexOfFluidVertex(x, y);
- return int(fluidCells[idx + 2]);
-}
-
-/// Boundary conditions
-
-void bounceBack(uint x, uint y) {
- for ( int i = -1; i <= 1; ++i ) {
- for ( int j = -1; j <= 1; ++j ) {
- set(x,y,i,j, get(x,y,(-1)*i,(-1)*j));
- }
- }
-}
-
-/// Actual stream kernel
-
-void main() {
- const uint x = gl_GlobalInvocationID.x;
- const uint y = gl_GlobalInvocationID.y;
-
- if ( !(x < nX && y < nY) ) {
- return;
- }
-
- const int material = getMaterial(x,y);
-
- if ( material == 0 ) {
- return;
- }
-
- if ( material == 2 || material == 3 ) {
- bounceBack(x,y);
- }
-
- for ( int i = -1; i <= 1; ++i ) {
- for ( int j = -1; j <= 1; ++j ) {
- set(x+i,y+j,i,j, get(x,y,i,j));
- }
- }
-}
-)";