![]() ![]() Reordering may happen across command buffers and even vkQueueSubmits. Unless you add synchronization yourself, all commands in a queue execute out of order. The fact that commands start in-order is simply convenient language to make the spec language easier to write. The specification states that commands start execution in-order, but complete out-of-order. Any synchronization applies globally to a VkQueue, there is no concept of a only-inside-this-command-buffer synchronization. It is very important to clarify that for purposes of synchronization, everything submitted to a queue is simply a linear stream of commands. Many developers seem to think that command buffer boundaries are somehow special in Vulkan. Let’s get some common beginner mistakes out of the way first. The Vulkan queue is simply an abstraction where command buffers are submitted and the GPU churns through commands. There is a lot to consider for single-queue synchronization, and dealing with multiple queues is a small extension on top of single-queue synchronization, which is covered at the end when discussing semaphores. The Vulkan queueįor this part of the discussion we will only consider a single VkQueue. Where appropriate, I will use terms which match the Vulkan specification. Despite its reputation for maddening complexity, it is actually understandable and quite logical once you get over the initial hurdles. ![]() It’s a large hurdle to overcome when learning the API, and rather than mechanically explaining how it works, my goal here is to instill a mental model in the reader. One topic I’ve been meaning to write about for a long time is synchronization in Vulkan. After playing Fire Emblem: Three Houses for an ungodly 160 hours over the past weeks, I guess it’s time to put on my professor hat on the internet instead. ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |