当指定VkPipelineStageFlag时,它是指舞台的开始还是舞台的结束?

时间:2018-05-25 07:32:37

标签: vulkan

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

源阶段掩码指定要与其同步的操作的源。如果您将源指定为顶点着色器阶段,则表示您尝试同步的操作发生在VS或之前。

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