VkBuffer 的队列家族所有权转移粒度

Queue family ownership transfer granularity for VkBuffer

问题:将 VkBuffer 的子区域从一个队列家族转移到另一个队列家族是否有任何granularity/alignment要求?

我愿意:

  1. 使用单个 graphics/present 队列从单个 VkBuffer 获取绘制调用;
  2. 和另一个单独的计算队列来填充所述 VkBuffer
  3. 中的子分配 regions/sections

因此,提交到 graphics/present 队列 (1.) 的命令将 read/source 数据通过提交到计算队列 (2.) 的命令写入 VkBuffer。而且我不想将 整个 VkBuffer 从一个队列转移到另一个队列,而只是转移某些子区域(一旦它们的计算完成并且结果可以是 consumed/sourced图形命令)。

我读到,每当你使用 VK_SHARING_MODE_EXCLUSIVE VkSharingMode 时,你必须明确地将所有权从一个队列(在我的例子中是计算队列)转移到另一个队列(在我的例子中是 graphics/present 队列) 这样提交到后一个队列的命令就会看到前一个队列中提交的命令所做的更改。 我知道如何执行此操作以及如何使用信号量正确同步释放和获取操作。

但是,由于我想使用带有手动子分配(实际上是 VMA 虚拟分配)的单个 VkBuffer,并且看到 VkBufferMemoryBarrier 提供了 offsetsize 属性,我想知道对于 VkBuffer 的哪个 sections/pages 可以传输是否有任何粒度要求。

我真的可以将 VkBuffer 的 单字节 从一个队列家族传输到另一个队列家族吗?或者我是否必须遵守某些 granularity/alignment 要求(对齐要求除外我自己在那个 VkBuffer 中的数据结构,当然还有那个缓冲区的用法)?

队列族传输字节范围没有粒度要求。事实上,内存屏障字节范围似乎也没有粒度要求。