From fb3e188d3d083a713134dade431f2f406697b0be Mon Sep 17 00:00:00 2001 From: Josh Morgenstern <josh@morgenstern.dev> Date: Wed, 2 Feb 2022 18:45:09 +0100 Subject: [PATCH] ADD ALL THE BARRIERS!!! --- .../wobble_bobble/shaders/init_particle_volumes.comp | 9 +++++++++ .../shaders/transform_particles_to_grid.comp | 3 +++ projects/wobble_bobble/shaders/update_grid_forces.comp | 7 +++++++ .../shaders/update_particle_deformation.comp | 6 ++++++ .../wobble_bobble/shaders/update_particle_positions.comp | 4 ++++ .../shaders/update_particle_velocities.comp | 7 +++++++ 6 files changed, 36 insertions(+) diff --git a/projects/wobble_bobble/shaders/init_particle_volumes.comp b/projects/wobble_bobble/shaders/init_particle_volumes.comp index be0e0d06..c7c64be3 100644 --- a/projects/wobble_bobble/shaders/init_particle_volumes.comp +++ b/projects/wobble_bobble/shaders/init_particle_volumes.comp @@ -24,6 +24,9 @@ void main() { float mass = 0.0f; int i, j, k; + barrier(); + memoryBarrierImage(); + for (i = -gridWindow.x; i <= gridWindow.x; i++) { for (j = -gridWindow.y; j <= gridWindow.y; j++) { for (k = -gridWindow.z; k <= gridWindow.z; k++) { @@ -37,6 +40,9 @@ void main() { } } + barrier(); + memoryBarrierBuffer(); + if (volume > 0.0f) { float density = minimal.mass / volume; @@ -44,6 +50,9 @@ void main() { //mass = density * volume; } + barrier(); + memoryBarrierBuffer(); + particles[gl_GlobalInvocationID.x].minimal.size = sphere_radius(volume); particles[gl_GlobalInvocationID.x].minimal.mass = mass; } diff --git a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp index 0ccc6eb2..9bae58ef 100644 --- a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp +++ b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp @@ -55,6 +55,9 @@ void main() { gridValue.xyz /= gridValue.w; } + barrier(); + memoryBarrierShared(); + imageStore( gridImage, ivec3(gl_GlobalInvocationID), diff --git a/projects/wobble_bobble/shaders/update_grid_forces.comp b/projects/wobble_bobble/shaders/update_grid_forces.comp index 32779864..0cc83a26 100644 --- a/projects/wobble_bobble/shaders/update_grid_forces.comp +++ b/projects/wobble_bobble/shaders/update_grid_forces.comp @@ -41,6 +41,8 @@ void main() { } barrier(); + memoryBarrierBuffer(); + memoryBarrierShared(); memoryBarrierImage(); const vec3 gridResolution = vec3(imageSize(gridImage)); @@ -128,6 +130,11 @@ void main() { velocity = mix(velocity, -velocity, invert); + barrier(); + memoryBarrierBuffer(); + memoryBarrierShared(); + memoryBarrierImage(); + imageStore( gridForceImage, ivec3(gl_GlobalInvocationID), diff --git a/projects/wobble_bobble/shaders/update_particle_deformation.comp b/projects/wobble_bobble/shaders/update_particle_deformation.comp index 73d8961a..a8a89bc5 100644 --- a/projects/wobble_bobble/shaders/update_particle_deformation.comp +++ b/projects/wobble_bobble/shaders/update_particle_deformation.comp @@ -47,12 +47,18 @@ void main() { } } + barrier(); + memoryBarrierBuffer(); + mat3 deformation_elastic = deformation; if (dt > 0.0f) { deformation_elastic = (mat3(1.0f) + dt * velocity_gradient) * deformation; } + barrier(); + memoryBarrierBuffer(); + particles[gl_GlobalInvocationID.x].deformation = mat4(deformation_elastic); } } \ No newline at end of file diff --git a/projects/wobble_bobble/shaders/update_particle_positions.comp b/projects/wobble_bobble/shaders/update_particle_positions.comp index 6351cdde..5e012f40 100644 --- a/projects/wobble_bobble/shaders/update_particle_positions.comp +++ b/projects/wobble_bobble/shaders/update_particle_positions.comp @@ -39,9 +39,13 @@ void main() { } } + barrier(); + memoryBarrierBuffer(); + particles[gl_GlobalInvocationID.x].minimal.position = position; particles[gl_GlobalInvocationID.x].minimal.velocity = velocity; } + barrier(); memoryBarrierBuffer(); } \ No newline at end of file diff --git a/projects/wobble_bobble/shaders/update_particle_velocities.comp b/projects/wobble_bobble/shaders/update_particle_velocities.comp index bc592ad6..d29b22e1 100644 --- a/projects/wobble_bobble/shaders/update_particle_velocities.comp +++ b/projects/wobble_bobble/shaders/update_particle_velocities.comp @@ -58,6 +58,9 @@ void main() { } } + barrier(); + memoryBarrierBuffer(); + mat3 affine_C = mat3(0.0f); vec3 velocity_apic = vec3(0.0f); @@ -75,11 +78,15 @@ void main() { } } + barrier(); + memoryBarrierBuffer(); + vec3 velocity_alpha = mix(velocity_pic, velocity_flip, alpha); vec3 velocity_beta = mix(velocity_alpha, velocity_apic, beta); particles[gl_GlobalInvocationID.x].minimal.velocity = velocity_beta; } + barrier(); memoryBarrierBuffer(); } \ No newline at end of file -- GitLab