comp_renderer: Improve synchronization
This series of patches removes redundant
WaitIdle calls on the queue and the device. For one they were redundant since synchronization was already in place by
For the remaining calls only one additional
vkDeviceWaitIdle was required when the swap chain was destroyed, in favor of doing it every draw call.
In addition the main
vkQueueSubmit is now synchronized with one
VkFence per command buffer, so for every swap chain image. This is pretty standard behaviour, as it is done for example in renderers as
Another patch removes redundancy since we don't need one buffer counter for frame and command buffers, since their size is equal. This now also applies to fences.
I considered moving the 3 variables (
VkFramebuffer) into a separate struct e.g.
comp_render_buffer as it is done in
gulkan, but I preferred to leave it as is to utilize Vulkan's functions using an array of command buffers. Also the reinitialization of the 3 is asynchronous.
The patch set was tested on radv, amdvlk, NVIDIA and Intel without producing validation errors. I can confirm that the validation indeed catches wrongfully removed
vkDeviceWaitIdle calls, which happened during development.