Vulkan TOP/BOTTOM OF PIPE 和 ALL_COMMANDS

Vulkan TOP/ BOTTOM OF PIPE and ALL_COMMANDS

和很多 "beginner" 一样,我认为使用 TOP_OF_PIPELINE 作为 dst 和 BOTTOM_OF_PIPELINE 作为 src 意味着两者都是 ALL_COMMANDS。

Here 尼可波拉斯写道 "Since top/bottom of the pipe make no sense for memory barriers, maybe using them should just be flat-out invalid. And thus useful only for execution barriers."

据我了解,由于 TOP 和 BOTTOM 不执行任何内存访问,因此在顶部或底部放置屏障不能使内存可见^^。

据我了解 Nicol Bolas 的意思以及我刚才所说的内存访问/可见性,当您使用 bottom 或 top 时,您必须将 accessMask 设置为 0。

如果我想展示图片,我可以这样做:

srcStage = COLOR_ATTACHMENT_OUTPUT_BIT
srcAccess = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT
oldLayout = ATTACHMENT_OPTIMAL
dstStage = BOTTOM
dstAccess = 0; // Since memory read access will be "issued" by semaphore
newLayout = PRESENT_KHR;

我们在这里使用 bottom 是因为我们不希望内存屏障让当前队列像规范中描述的那样等待 :

The VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT is useful for accomplishing memory barriers and layout transitions when the next accesses will be done in a different queue or by a presentation engine; in these cases subsequent commands in the same queue do not need to wait, but the barrier or transition must complete before semaphores associated with the batch signal.

所以现在,我可以说(我希望...)我知道什么时候使用每个阶段但是 TOP_OF_PIPE 不...

那么,我的问题是: 执行障碍到底是什么(因此没有内存障碍)?它们为什么有用? (因为说一个操作发生在另一个操作之后很好,但更好的说法是我们可以在第二个操作中使用第一个操作产生的数据)。 我应该什么时候在管道的底部或顶部放置屏障?

谢谢!

What exactly is an execution barrier (thus without memory barrier)?

正如规范所说:它会阻止操作的执行,直到先前发出的操作完成。

Why are they useful? (because it is good to say that one operation happen after one other, but it is better to can say that we can consume the data produced in the first operation in the second operation).

您假设 消耗 数据是您可能正在等待的唯一事情。

例如,假设您正在流式传输一些纹理数据。好吧,在该纹理的所有使用都完成之前,您不能开始将副本执行到该纹理的内存中。但是您不会消耗这些进程产生的东西;您只需要等到这些过程完成即可。

这就是纯粹的执行障碍。


自从1.0.35明确了管道的含义,TOP和BOTTOM的含义更加明确

具体说明是,无论您为源和目标指定什么管道阶段,都会指定该阶段和所有阶段before/after。因此,如果您将片段着色器指定为源,那么在它之前执行的所有阶段也是该屏障的一部分。如果您将顶点着色器指定为目标,那么它之后的所有阶段也会在该同步后执行。

所以 BOTTOM 作为源意味着在先前命令的所有阶段之后。 TOP 作为目标意味着在后续命令的所有阶段之前。将 BOTTOM 作为目标没有任何意义,TOP 作为源也没有意义。


注意:最近的规范更改已阐明 top/bottom ......根本不是实际阶段。叹息

相反,这些“阶段”被指定为表示“所有阶段”或“无阶段”,具体取决于它们是指定源范围还是目标范围。 TOP 表示作为目标作用域时的所有阶段,而 BOTTOM 表示作为源作用域时的所有阶段。

基本上,它的意思和以前一样,但是在Vulkan执行模型中没有任何特定的想法,即有一个阶段是所有阶段的开始。