【发布时间】:2020-12-14 17:05:14
【问题描述】:
假设我有一个由n 图像组成的交换链,并且我允许k“飞行中的帧”。我通过一组信号量imageAvailableSemaphore 和renderFinishedSemaphore 和栅栏imageInFlight 确保vkAcquireNextImageKHR、vkQueueSubmit 和vkQueuePresentKHR 之间的正确同步,就像在this tutorial 中所做的那样:
imageAvailableSemaphores.resize(MAX_FRAMES_IN_FLIGHT);
renderFinishedSemaphores.resize(MAX_FRAMES_IN_FLIGHT);
inFlightFences.resize(MAX_FRAMES_IN_FLIGHT);
需要栅栏来确保在 GPU 完成使用相应图像之前我们不会再次使用信号量。所以,这个栅栏需要在vkQueueSubmit中指定。
另一方面,我正在创建独立于“飞行中的帧”的命令缓冲区。它们是“一次性提交”命令缓冲区。因此,一旦提交,我会将它们添加到“待删除”列表中。我需要知道 GPU 何时完成执行此列表中的命令缓冲区。
但我无法在vkQueueSubmit 中指定另一个栅栏。我该如何解决这个问题?
【问题讨论】: