example (2nd example, modified slightly, added queuesubmit) taken from https://github.com/KhronosGroup/Vulkan-Docs/wiki/Synchronization-Examples
First dispatch reads from a storage buffer, second dispatch writes to that storage buffer.
comment from original example: execution dependencies are sufficient. A pipeline barrier or event without a any access flags is an execution dependency.
vkCmdDispatch(commandbuffer1...);
VkMemoryBarrier2KHR memoryBarrier = {
...
.srcStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR,
.dstStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR };
VkDependencyInfoKHR dependencyInfo = {
...
1, // memoryBarrierCount
&memoryBarrier, // pMemoryBarriers
...
}
vkCmdPipelineBarrier2KHR(commandBuffer1, &dependencyInfo);
// what if VkQueueSubmit here
VkSubmitInfo submitinfo{};
....
submitinfo. pCommandBuffers = commandbuffer1;
VkQueueSubmit(queue, 1,&submitinfo, fence1);
-------------------submit1---------------------------
vkCmdDispatch(commandbuffer2, ...);
VkSubmitInfo submitinfo2{};
....
submitinfo2. pCommandBuffers = commandbuffer2;
VkQueueSubmit(queue, 1,&submitinfo, fence2);
-------------------submit2---------------------------
// waitfence1..wait fence2
what does the Barrier do in this case? maybe it has no effect since the barrier only works on commandBuffer1? is there a proper way to sync across multiple submits?