From 302824e58b6fc442e9c7aa1733dd981b71952e56 Mon Sep 17 00:00:00 2001 From: Tobias Frisch <tfrisch@uni-koblenz.de> Date: Sun, 30 Jan 2022 02:00:30 +0100 Subject: [PATCH] Removed grid velocity shader and updated pipelines Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de> --- .../shaders/init_particle_volumes.comp | 14 +++++ .../shaders/update_grid_velocities.comp | 33 ---------- projects/wobble_bobble/src/main.cpp | 63 +++++-------------- 3 files changed, 29 insertions(+), 81 deletions(-) delete mode 100644 projects/wobble_bobble/shaders/update_grid_velocities.comp diff --git a/projects/wobble_bobble/shaders/init_particle_volumes.comp b/projects/wobble_bobble/shaders/init_particle_volumes.comp index 7277e586..5f30307f 100644 --- a/projects/wobble_bobble/shaders/init_particle_volumes.comp +++ b/projects/wobble_bobble/shaders/init_particle_volumes.comp @@ -1,6 +1,20 @@ #version 450 +#extension GL_GOOGLE_include_directive : enable layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in; +#include "particle.inc" + +layout(set=0, binding=0, std430) buffer particleBuffer { + Particle particles []; +}; + void main() { + memoryBarrierBuffer(); + + if (gl_GlobalInvocationID.x < particles.length()) { + // nothing + } + + memoryBarrierBuffer(); } \ 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 deleted file mode 100644 index 0178b4c5..00000000 --- a/projects/wobble_bobble/shaders/update_grid_velocities.comp +++ /dev/null @@ -1,33 +0,0 @@ -#version 450 -#extension GL_GOOGLE_include_directive : enable - -layout(local_size_x = 4, local_size_y = 4, local_size_z = 4) in; - -#include "particle.inc" - -layout(set=0, binding=0) uniform texture3D gridTextureIn; -layout(set=0, binding=1) uniform sampler gridSampler; -layout(set=0, binding=2, rgba32f) writeonly uniform image3D gridImageOut; - -layout( push_constant ) uniform constants { - float t; - float dt; -}; - -void main() { - memoryBarrierImage(); - - vec3 position = (vec3(gl_GlobalInvocationID) + vec3(0.5f)) / textureSize(sampler3D(gridTextureIn, gridSampler), 0); - vec4 gridCurrentSample = texture(sampler3D(gridTextureIn, gridSampler), position); - - vec3 offset = position - gridCurrentSample.xyz * dt; - vec4 gridPreviousSample = texture(sampler3D(gridTextureIn, gridSampler), offset); - - imageStore( - gridImageOut, - ivec3(gl_GlobalInvocationID), - gridPreviousSample - ); - - memoryBarrierImage(); -} \ No newline at end of file diff --git a/projects/wobble_bobble/src/main.cpp b/projects/wobble_bobble/src/main.cpp index f76a7d53..4fae6395 100644 --- a/projects/wobble_bobble/src/main.cpp +++ b/projects/wobble_bobble/src/main.cpp @@ -153,17 +153,6 @@ int main(int argc, const char **argv) { grid.switchLayout(vk::ImageLayout::eGeneral); - vkcv::Image tmpGrid = core.createImage( - vk::Format::eR32G32B32A32Sfloat, - 64, - 64, - 64, - false, - true - ); - - tmpGrid.switchLayout(vk::ImageLayout::eGeneral); - /* TODO: clear grid via compute shader? std::vector<glm::vec4> grid_vec (grid.getWidth() * grid.getHeight() * grid.getDepth()); @@ -204,6 +193,12 @@ int main(int argc, const char **argv) { initParticleVolumesSets ); + { + vkcv::DescriptorWrites writes; + writes.storageBufferWrites.push_back(vkcv::BufferDescriptorWrite(0, particles.getHandle())); + core.writeDescriptorSet(initParticleVolumesSets[0], writes); + } + std::vector<vkcv::DescriptorSetHandle> updateGridForcesSets; vkcv::ComputePipelineHandle updateGridForcesPipeline = createComputePipeline( core, compiler, @@ -218,21 +213,6 @@ int main(int argc, const char **argv) { core.writeDescriptorSet(updateGridForcesSets[0], writes); } - std::vector<vkcv::DescriptorSetHandle> updateGridVelocitiesSets; - vkcv::ComputePipelineHandle updateGridVelocitiesPipeline = createComputePipeline( - core, compiler, - "shaders/update_grid_velocities.comp", - updateGridVelocitiesSets - ); - - { - vkcv::DescriptorWrites writes; - writes.sampledImageWrites.push_back(vkcv::SampledImageDescriptorWrite(0, grid.getHandle())); - writes.samplerWrites.push_back(vkcv::SamplerDescriptorWrite(1, gridSampler)); - writes.storageImageWrites.push_back(vkcv::StorageImageDescriptorWrite(2, tmpGrid.getHandle())); - core.writeDescriptorSet(updateGridVelocitiesSets[0], writes); - } - std::vector<vkcv::DescriptorSetHandle> updateParticleDeformationSets; vkcv::ComputePipelineHandle updateParticleDeformationPipeline = createComputePipeline( core, compiler, @@ -243,7 +223,7 @@ int main(int argc, const char **argv) { { vkcv::DescriptorWrites writes; writes.storageBufferWrites.push_back(vkcv::BufferDescriptorWrite(0, particles.getHandle())); - writes.sampledImageWrites.push_back(vkcv::SampledImageDescriptorWrite(1, tmpGrid.getHandle())); + writes.sampledImageWrites.push_back(vkcv::SampledImageDescriptorWrite(1, grid.getHandle())); writes.samplerWrites.push_back(vkcv::SamplerDescriptorWrite(2, gridSampler)); core.writeDescriptorSet(updateParticleDeformationSets[0], writes); } @@ -258,7 +238,7 @@ int main(int argc, const char **argv) { { vkcv::DescriptorWrites writes; writes.storageBufferWrites.push_back(vkcv::BufferDescriptorWrite(0, particles.getHandle())); - writes.sampledImageWrites.push_back(vkcv::SampledImageDescriptorWrite(1, tmpGrid.getHandle())); + writes.sampledImageWrites.push_back(vkcv::SampledImageDescriptorWrite(1, grid.getHandle())); writes.samplerWrites.push_back(vkcv::SamplerDescriptorWrite(2, gridSampler)); core.writeDescriptorSet(updateParticleVelocitiesSets[0], writes); } @@ -346,7 +326,7 @@ int main(int argc, const char **argv) { { vkcv::DescriptorWrites writes; - writes.sampledImageWrites.push_back(vkcv::SampledImageDescriptorWrite(0, tmpGrid.getHandle())); + writes.sampledImageWrites.push_back(vkcv::SampledImageDescriptorWrite(0, grid.getHandle())); writes.samplerWrites.push_back(vkcv::SamplerDescriptorWrite(1, gridSampler)); core.writeDescriptorSet(gfxSetGrid, writes); } @@ -505,9 +485,13 @@ int main(int argc, const char **argv) { cmdStream, initParticleVolumesPipeline, dispatchSizeParticles, - {}, + { vkcv::DescriptorSetUsage( + 0, core.getDescriptorSet(initParticleVolumesSets[0]).vulkanHandle + ) }, vkcv::PushConstants(0) ); + + core.recordBufferMemoryBarrier(cmdStream, particles.getHandle()); core.recordEndDebugLabel(cmdStream); initializedParticleVolumes = true; } @@ -524,25 +508,8 @@ int main(int argc, const char **argv) { ); core.recordEndDebugLabel(cmdStream); - core.recordBeginDebugLabel(cmdStream, "UPDATE GRID VELOCITIES", { 0.47f, 0.77f, 0.85f, 1.0f }); - core.prepareImageForSampling(cmdStream, grid.getHandle()); - core.prepareImageForStorage(cmdStream, tmpGrid.getHandle()); - - core.recordComputeDispatchToCmdStream( - cmdStream, - updateGridVelocitiesPipeline, - dispatchSizeGrid, - { vkcv::DescriptorSetUsage( - 0, core.getDescriptorSet(updateGridVelocitiesSets[0]).vulkanHandle - ) }, - timePushConstants - ); - - core.recordImageMemoryBarrier(cmdStream, tmpGrid.getHandle()); - core.recordEndDebugLabel(cmdStream); - core.recordBeginDebugLabel(cmdStream, "UPDATE PARTICLE DEFORMATION", { 0.78f, 0.89f, 0.94f, 1.0f }); - core.prepareImageForSampling(cmdStream, tmpGrid.getHandle()); + core.prepareImageForSampling(cmdStream, grid.getHandle()); core.recordComputeDispatchToCmdStream( cmdStream, -- GitLab