vulkan提供了四個基本的同步機制:
• Fences
• Semaphores
• Events
• Barriers
Fence的作用是對兩個有依賴關係的的command 的執行進行控制,比如一個計算: (1)B = D + C; (2) res = A * B, 在計算 res時,必須要先保證B合法的求解完畢,fence的作用正是保證在(1)求解完之前(2)不會求解
Barriers 的名稱很好的描述了barries的作用,barriers是控制一系列的執行和讀寫命令的同步的,比如(1)B = C + D + E + F + ……+ X,其中每一個加數都要計算出來,這時候就使用barriers保證每一個加數都計算出來之後(1)過程纔開始執行
fence 的使用:
VkResult vkQueueSubmit(
VkQueue queue,
uint32_t submitCount,
const VkSubmitInfo* pSubmits,
VkFence fence);
如果fence不是VK_NULL_HANDLE,在VkSubmitInfo::pCommandBuffers 中record的所有command執行完之後,fence就會成爲:signaled。 當submitted的command爲0時,在submitted的前期工作做完後,fence仍會變成singled