Vulkan で同期を処理するには、いくつかの方法があります。これは私がそれを理解する方法です:
- フェンスは GPU から CPU への同期です。
- セマフォは GPU から GPU への同期であり、(同じまたは異なるキューで) キューの送信を同期するために使用されます。
- イベントはより一般的で、リセットされ、CPU と GPU の両方でチェックされます。
- バリアは、コマンド バッファー内の同期に使用されます。
私の場合、2 つのコマンド バッファがあります。そして、最初のコマンド バッファの後に 2 番目のコマンド バッファを実行する必要があります。
submitInfo.pCommandBuffers = &firstCommandBuffer;
vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE);
// wait for first command buffer to finish
submitInfo.pCommandBuffers = &secondCommandBuffer;
vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE);
これに最適な同期の種類は何ですか? 使用する場合vkQueueWaitIdle(queue)),
は、フェンスを使用するのと同じことですか、それともイベントまたはセマフォを使用する必要がありますか?
複数のコマンドバッファを同時にキューに送信した場合:
std::vector<VkCommandBuffer> submitCmdBuffers = {
firstCommandBuffer,
secondCommandBuffer
};
submitInfo.commandBufferCount = submitCmdBuffers.size();
submitInfo.pCommandBuffers = submitCmdBuffers.data();
1 つ目と 2 つ目を同期する方法はまだありますか?