I am writing a threaded vulkan application and it does not behave like I expected.
The application has three threads, each one using a separate queue.
One thread does the frame logic, commandbuffer recording and image presenting/acquiring. A second thread does data transfers and the third draws from the recorded command buffers.
A threadswait until its GPU executions finish before giving the resources to another thread and I am measuring the waiting times on the submission fences.
Roughly, the presenting takes around 2ms, the logic takes around 12ms, the transfering 16ms and the drawing 3ms.
The application framerate is 60 FPS and bounded by the transfer time as expected. However, when increasing the draw complexity e.g. with blending without changing any other parameters, the framerate is reduced.
When the drawing takes 6 instead of 3ms, both the transfer and the present times are increased by 1-2ms. These are the actual processing times without any waiting for resources.
I am using a rather old GPU but since the tasks of the threads/queues are so different, I did not expect them to be impacted by the work of other queues.
Is there an obvious explanation for this? Can this be caused by the driver or the old GPU or is it just normal behaviour?