我想用事件实现某种关键部分 - 我需要知道何时我能够主机更新顶点缓冲区。为此,我在记录命令缓冲区之前在主机(vkSetEvent()
)上设置了一个事件,然后记录命令以重置事件(vkCmdResetEvent
)。 vkCmdResetEvent
需要指定源阶段掩码以确定事件发出信号的时间。在这里,我不确定舞台,并且无法在规范中找到所需的措辞。如果我使用VK_PIPELINE_STAGE_VERTEX_SHADER_BIT
我是否保证在舞台结束时重置事件?还是舞台的开始?
答案 0 :(得分:2)
stageFlags用于指定要在哪些管道中插入同步操作。
这意味着对于 source 阶段,它是在之前的命令完成阶段之后,对于目标阶段,它是在以下命令可以在这些阶段开始之前。
答案 1 :(得分:1)
源阶段掩码指定要与其同步的操作的源。如果您将源指定为顶点着色器阶段,则表示您尝试同步的操作发生在VS或之前。
在vkCmdResetEvent
的情况下,需要进行同步,以便在测试事件的命令发生之前不执行reset命令。所以主机设置事件,一些稍后命令测试它(可能使用vkCmdWaitEvents
,使用VK_PIPELINE_STAGE_HOST_BIT
作为其来源),vkCmdResetEvent
需要重置它。那么,后一个命令需要使用vkCmdWaitEvents
设置为目的地的阶段作为其源。这可确保在等待完成之前不执行reset命令。