微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT VkAccessFlags 设置为 0?

如何解决VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT VkAccessFlags 设置为 0?

在 Vulkan 规范中,它定义了:

VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT 等价于 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT VkAccessFlags 在第二个同步范围中指定时设置为 0,但指定 no 第一个范围的阶段。

类似:

VK_PIPELINE_STAGE_BottOM_OF_PIPE_BIT 等价于 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT VkAccessFlags 在第一个同步范围中指定时设置为 0,但未指定任何阶段 在第二个范围内。

我不清楚在这种情况下“VkAccessFlags 设置为 0”是什么意思?

从技术上讲,VkAccessFlags一个类型,而不是一个变量,所以它不能被设置为任何东西。

(它似乎正在调整 TOP/BottOM_OF_PIPE 的某些特殊属性VK_PIPELINE_STAGE_ALL_COMMANDS_BIT 的定义关于 VkAccessFlags,但我不太清楚那个特殊属性是什么或在哪里它被指定。)

有人知道它在说什么吗?

(或者,换句话说:如果我们从规范中删除“with VkAccessFlags set to 0”这两个语句,会破坏什么?)

解决方法

对于内存依赖而言,阶段标志的解释是不同的,这是一种迂回的说法。

对于 src 中的执行依赖项,它需要您提供的阶段位,并自动包含逻辑上较早的阶段。与 dst 类似,逻辑上较晚的阶段会自动包含在内。

但这仅适用于执行依赖项。对于内存依赖,只有您提供的阶段标志计数(不会自动添加)。

例如,假设您在 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT 中有 VK_ACCESS_MEMORY_WRITE_BIT + src。这意味着所有先前命令的所有内存写入都将可用。但是,如果您在 VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT 中有 VK_ACCESS_MEMORY_WRITE_BIT + src,则意味着仅来自 BOTTOM_OF_PIPE 阶段的所有内存写入可用,因此没有内存写入可用(因为该特定阶段不提供任何)。

无论哪种方式,IMO,为了代码清晰起见,最好始终明确说明所有管道阶段。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。