当指定 VkPipelineStageFlag 时,它意味着阶段的开始还是阶段的结束?

When specifying VkPipelineStageFlag does it mean start of the stage or end of the stage?

我想用事件实现某种关键部分 - 我需要知道何时能够主机更新顶点缓冲区。为此,我在记录命令缓冲区之前在主机 (vkSetEvent()) 上设置了一个事件,然后记录了一个重置​​事件的命令 (vkCmdResetEvent)。 vkCmdResetEvent 需要指定源阶段掩码以确定何时发出事件信号。在这里我不确定阶段,也无法在规范中找到所需的措辞。如果我使用 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT 是否可以保证事件将在阶段结束时重置?还是舞台的开始?

stageFlags 用于指定要在哪些管道中插入同步操作。

这意味着对于 source 阶段,它在前面的命令完成阶段之后,对于 destination 阶段,它在以下命令之前可以从这些阶段开始。

源阶段掩码指定您正在同步的操作的源。如果您将源指定为顶点着色器阶段,那么您是说您尝试同步的操作发生在 VS 中或之前。

vkCmdResetEvent 的情况下,需要进行同步,以便在测试事件的命令发生之前不会执行重置命令。所以主机设置了事件,稍后一些命令测试它(可能使用 vkCmdWaitEvents,使用 VK_PIPELINE_STAGE_HOST_BIT 作为它的源),并且 vkCmdResetEvent 需要重置它。那么,后一个命令需要使用 vkCmdWaitEvents 设置为其 目标 的阶段作为其来源。这确保在等待完成之前不会执行重置命令。