在不同队列族上重复使用相同的主机可见缓冲区 [英] Reusing the same host-visible buffer on different queue families

查看:22
本文介绍了在不同队列族上重复使用相同的主机可见缓冲区的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

考虑主机可见的缓冲区(主要与流缓冲区相关,即由VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT内存支持的缓冲区),让我们假设以下使用模式:

  1. 将新数据写入主机上的映射地址(在正确同步之后)。
  2. 使用步骤1中写入的内容读取队列族A上的缓冲区。
  3. 将新数据写入主机上的映射地址(在正确同步之后)。
  4. 使用步骤3中写入的内容读取队列族B上的缓冲区。

现在,如果我省略了队列族所有权转移(QFOT),步骤3中写入的数据是否无法在步骤4中被队列族B访问?

由于host write ordering guarantee的隐式内存依赖性,当我使用vkQueueSubmit提交步骤4的命令时,写在主机上的数据对设备可见。

如何处理不同的队列系列?

cpu3>

好的,我们有一个推荐答案可修改的缓冲区。由于某种原因,该缓冲区是在独占模式下创建的。并且您希望执行以下操作:

  1. 将数据写入缓冲区。
  2. 使用队列族A复制数据
  3. 将数据写入缓冲区。
  4. 使用队列族B复制数据

为了使第4步起作用,您需要进行所有权转移。标准将这一点写在您引用的内容之前:

如果在不同系列中的两个队列之间正确表示了此类资源的使用之间的内存相关性,但没有定义所有权转移,则对于第二个队列系列执行的任何读取访问,该资源的内容都是未定义的。

您确实有正确表达的依赖项(我假设)。但复制数据是一种读访问权限。并且它是由队列族B执行的,这与队列族A不同。因此,步骤4(读取访问权限)触发此子句:该资源的内容未定义。

&Quot;Contents&Quot;表示所有内容。您在第1步第3步中编写的文件。除非您执行队列家族所有权转移,否则所有这些文件在第4步中都未定义。

这篇关于在不同队列族上重复使用相同的主机可见缓冲区的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆