Before starting my topic, see this picture of this application (from Sascha Willems) and task manager.
(github: GitHub - SaschaWillems/VulkanSponza: Deferred Vulkan rendering playground using Crytek's Sponza scene)
this application renders sponza with particle effect, SSAO, based on deferred rendering.
I thought the application should occupy some of GPU usages. But it does not.
I recognized all the other examples of Sascha Willems does not have any GPU usages on my task manager. (other examples of Sascha Willems github : GitHub - SaschaWillems/Vulkan: Examples and demos for the new Vulkan API)
I guess this phenomenon is related to Synchronization.
Because, All of the examples use one semaphore for rendering and presenting.
In addition, they does not use any fence in acquire-submit-present loop.
So, I think the applications is not utilizing the benefit of triple buffer (just only one buffer with 3 swapchain images on my desktop). In order to acquire the next image of swapchain, the application will just wait for the presentation semaphore which will be signaled after the presentation engine does its own job.
However, Even if the application have a sync structure which I described above, I think the task manager should show that the application is using a few of GPU usages. But it isn’t.
I started my vulkan study with https://vulkan-tutorial.com/
and I just draw one triangle with the tutorial. But it uses GPU a lot.
the tutorial application is utilizing the benefit of triple buffer. it has three semaphore for rendering and presenting. And it uses fence for sync between CPU and GPU.
So my questions start here.
- Why does not the sponza application use any GPU usage?
- What is the benefit of 0% GPU usage, considering the synchronization structure of sponza application?
- What does the difference of GPU usage between the sponza application and just one triangle application imply for the rendering? (quite broad question, but I’m in a coma with this phenomenon. so please give me any feedback the difference between two structures)
- What should I select the base structure of Synchronization between two cases? (I know this question depends on my application, but I’m just growing my application from scratch while studying Vulkan)
Thanks in advance!