diff --git a/projects/wobble_bobble/shaders/init_particle_volumes.comp b/projects/wobble_bobble/shaders/init_particle_volumes.comp index 7277e586fc746006f121dd7a439e4ff46ead3971..5f30307f39d0f325b5a60dcfd5c68da8662dc04b 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 0178b4c5d777bbb1d0105623b923563765d57120..0000000000000000000000000000000000000000 --- 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 f76a7d53d1f87f197db7ef31dd91be3e3e46a8a8..4fae63957d298cd6f2881a6874300df1249115f9 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,