From 38b1a7a352ae6f6ea842f86744d495889960219e Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Sun, 30 Jan 2022 00:13:09 +0100
Subject: [PATCH] Added barriers to write and read accesses

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 .../wobble_bobble/shaders/transform_particles_to_grid.comp   | 2 ++
 projects/wobble_bobble/shaders/update_grid_forces.comp       | 4 ++++
 projects/wobble_bobble/shaders/update_grid_velocities.comp   | 4 ++++
 .../wobble_bobble/shaders/update_particle_deformation.comp   | 5 +++++
 .../wobble_bobble/shaders/update_particle_positions.comp     | 4 ++++
 .../wobble_bobble/shaders/update_particle_velocities.comp    | 5 +++++
 6 files changed, 24 insertions(+)

diff --git a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
index 49d6d962..defc9c3e 100644
--- a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
+++ b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
@@ -48,4 +48,6 @@ void main()	{
         ivec3(gl_GlobalInvocationID),
         gridValue
     );
+
+    memoryBarrierImage();
 }
\ No newline at end of file
diff --git a/projects/wobble_bobble/shaders/update_grid_forces.comp b/projects/wobble_bobble/shaders/update_grid_forces.comp
index bf1c8a17..cfb8e201 100644
--- a/projects/wobble_bobble/shaders/update_grid_forces.comp
+++ b/projects/wobble_bobble/shaders/update_grid_forces.comp
@@ -13,6 +13,8 @@ layout( push_constant ) uniform constants {
 };
 
 void main()	{
+    memoryBarrierImage();
+
     vec4 gridSample = imageLoad(
         gridImage,
         ivec3(gl_GlobalInvocationID)
@@ -42,4 +44,6 @@ void main()	{
         ivec3(gl_GlobalInvocationID),
         vec4(velocity, mass)
     );
+
+    memoryBarrierImage();
 }
\ No newline at end of file
diff --git a/projects/wobble_bobble/shaders/update_grid_velocities.comp b/projects/wobble_bobble/shaders/update_grid_velocities.comp
index 39e30841..0178b4c5 100644
--- a/projects/wobble_bobble/shaders/update_grid_velocities.comp
+++ b/projects/wobble_bobble/shaders/update_grid_velocities.comp
@@ -15,6 +15,8 @@ layout( push_constant ) uniform constants {
 };
 
 void main()	{
+    memoryBarrierImage();
+
     vec3 position = (vec3(gl_GlobalInvocationID) + vec3(0.5f)) / textureSize(sampler3D(gridTextureIn, gridSampler), 0);
     vec4 gridCurrentSample = texture(sampler3D(gridTextureIn, gridSampler), position);
 
@@ -26,4 +28,6 @@ void main()	{
         ivec3(gl_GlobalInvocationID),
         gridPreviousSample
     );
+
+    memoryBarrierImage();
 }
\ No newline at end of file
diff --git a/projects/wobble_bobble/shaders/update_particle_deformation.comp b/projects/wobble_bobble/shaders/update_particle_deformation.comp
index f38e1778..7bfc923b 100644
--- a/projects/wobble_bobble/shaders/update_particle_deformation.comp
+++ b/projects/wobble_bobble/shaders/update_particle_deformation.comp
@@ -18,6 +18,9 @@ layout( push_constant ) uniform constants {
 };
 
 void main()	{
+    memoryBarrierBuffer();
+    memoryBarrierImage();
+
     ParticleMinimal particle = particles[gl_GlobalInvocationID.x].minimal;
     mat3 deformation = mat3(particles[gl_GlobalInvocationID.x].deformation);
 
@@ -30,4 +33,6 @@ void main()	{
     mat3 deformation_elastic = (mat3(1.0f) + grad_velocity * dt) * deformation;
 
     particles[gl_GlobalInvocationID.x].deformation = mat4(deformation_elastic);
+
+    memoryBarrierBuffer();
 }
\ 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 b3433928..270c2108 100644
--- a/projects/wobble_bobble/shaders/update_particle_positions.comp
+++ b/projects/wobble_bobble/shaders/update_particle_positions.comp
@@ -15,9 +15,13 @@ layout( push_constant ) uniform constants {
 };
 
 void main()	{
+    memoryBarrierBuffer();
+
     if (gl_GlobalInvocationID.x < particles.length()) {
         vec3 position = particles[gl_GlobalInvocationID.x].minimal.position;
         position = position + particles[gl_GlobalInvocationID.x].minimal.velocity * dt;
         particles[gl_GlobalInvocationID.x].minimal.position = position;
     }
+
+    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 407f34d0..ecd57e12 100644
--- a/projects/wobble_bobble/shaders/update_particle_velocities.comp
+++ b/projects/wobble_bobble/shaders/update_particle_velocities.comp
@@ -13,6 +13,9 @@ layout(set=0, binding=1) uniform texture3D gridImage;
 layout(set=0, binding=2) uniform sampler gridSampler;
 
 void main()	{
+    memoryBarrierBuffer();
+    memoryBarrierImage();
+
     if (gl_GlobalInvocationID.x < particles.length()) {
         vec3 position = particles[gl_GlobalInvocationID.x].minimal.position;
         float mass = particles[gl_GlobalInvocationID.x].minimal.mass;
@@ -28,4 +31,6 @@ void main()	{
             particles[gl_GlobalInvocationID.x].minimal.velocity = gridVelocity * mass / gridMass;
         }
     }
+
+    memoryBarrierBuffer();
 }
\ No newline at end of file
-- 
GitLab