I have an issue with a specific scenario using a single staging buffer (host visible) to service multiple device local buffers to that multiple inflight frames can be queued.
I have a single staging buffer that I write to once then use the contents to copy to device local memory.
In frame one I fill the staging buffer up (using vkMapMemory) and copy to device local (using vkCmdCopyBuffer) and it works, renderdoc can see the data populated in the buffers defined in the Pipeline window - vertex input section.
In frame two I skip filling the staging buffer and go straight to copying the contents to a new device local location (so that both buffers can be queued on the GPU together). In this case renderdoc doesn’t see the data in the pipeline window. It is just full of zeros. If I change frame 2 so that it fills up the staging buffer again render doc sees the device local memory correctly again.
Question is what happens to the staging buffer after a copy to device local that makes it not visible in render doc when done a second time. I check the staging and device local buffer by doing a copy back to local memory afterward running the commands and they seem to look ok in both cases which is wierd.
When I cycle back to populating the frame ones buffer in a later frame, frame ones buffer updates correctly again.
To foresee certain questions, I do change the vertex buffer IDs and offsets passed to vkCmdBindVertexBuffer and vkCmdBindaindexBuffer. And the do match the IDs passed to the copy command for each frame. The reason I am doing this is not all the vertex data changes each frame, one buffer that does change each frame is correctly updated while the others that don’t change aren’t.