gpt4 book ai didi

Vulkan 顶部/管道底部和 ALL_COMMANDS

转载 作者:行者123 更新时间:2023-12-04 03:16:29 31 4
gpt4 key购买 nike

作为很多“初学者”,我认为使用 TOP_OF_PIPELINE 作为 dst 和 BOTTOM_OF_PIPELINE 作为 src 意味着 ALL_COMMANDS 两者。

Here Nicol Bolas 写道:“由于管道的顶部/底部对内存屏障没有意义,也许使用它们应该完全无效。因此仅对执行屏障有用。”

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

据我了解 Nicol Bolas 的意思以及我刚才所说的内存访问/可见性,当您使用底部或顶部时,您必须将 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;

我们在这里使用底部是因为我们不希望内存屏障使当前队列等待,因为它在规范中描述:

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明确了pipeline的含义,TOP和BOTTOM的含义更加明确。
具体说明是,您为源和目标指定的任何管道阶段都指定了该阶段及其之前/之后的所有阶段。因此,如果您将片段着色器指定为源,那么在它之前执行的所有阶段也是该屏障的一部分。如果您指定顶点着色器作为目标,那么它之后的所有阶段也将在该同步之后执行。
所以 BOTTOM 作为源意味着在先前命令的所有阶段之后。 TOP 作为目的地意味着在后续命令的所有阶段之前。 BOTTOM 作为目的地没有任何实际意义,TOP 作为源也没有任何意义。

注意:最近的规范更改已将顶部/底部澄清为...根本不是实际阶段。叹。
相反,这些“阶段”被指定为“所有阶段”或“无阶段”,具体取决于它们是指定源范围还是目标范围。 TOP 表示充当目标范围时的所有阶段,而 BOTTOM 表示充当源范围时的所有阶段。
基本上,它的含义与之前相同,但在 Vulkan 执行模型中没有任何具体想法,即有一个阶段是所有阶段的开始。

关于Vulkan 顶部/管道底部和 ALL_COMMANDS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40495580/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com