问题描述
考虑主机可见的缓冲区(主要与流缓冲区相关,即由VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
内存支持的缓冲区),让我们假设以下使用模式:
现在,如果我省略了队列族所有权转移(QFOT),步骤3中写入的数据是否无法在步骤4中被队列族B访问?
由于host write ordering guarantee的隐式内存依赖性,当我使用vkQueueSubmit
提交步骤4的命令时,写在主机上的数据对设备可见。
如何处理不同的队列系列?
cpu3>
好的,我们有一个推荐答案可修改的缓冲区。由于某种原因,该缓冲区是在独占模式下创建的。并且您希望执行以下操作:
将数据写入缓冲区。 使用队列族A复制数据 将数据写入缓冲区。 使用队列族B复制数据为了使第4步起作用,您需要进行所有权转移。标准将这一点写在您引用的内容之前:
如果在不同系列中的两个队列之间正确表示了此类资源的使用之间的内存相关性,但没有定义所有权转移,则对于第二个队列系列执行的任何读取访问,该资源的内容都是未定义的。
您确实有正确表达的依赖项(我假设)。但复制数据是一种读访问权限。并且它是由队列族B执行的,这与队列族A不同。因此,步骤4(读取访问权限)触发此子句:该资源的内容未定义。
&Quot;Contents&Quot;表示所有内容。您在第1步和第3步中编写的文件。除非您执行队列家族所有权转移,否则所有这些文件在第4步中都未定义。