I have a very basic setup with a single uniform buffer per frame that contains data that changes every frame like the VP matrix etc. I also have a big SSBO per frame that contains an array of per-object data like the model matrix. My engine is running in a double-buffering configuration with 2 swapchain images and so until now I had 2 instances of these buffers with 2 descriptor sets, each bound when rendering to the appropriate swap chain image.
I was under the assumption that this was done to avoid race conditions with the CPU writing to the buffer while the Shaders are reading from it. But now when I tried with just a single instance of these things, things still work fine without any race conditions or validation errors.
So my question is why is updating the buffer while the GPU is using it for rendering a frame not causing any issues? I am updating the buffers by mapping them to CPU host memory before recording the command buffers for each frame.