缓冲区和图像对象能以 共享模式 被创建,控制它们如何被队列访问。 受支持的共享模式如下:
typedef enum VkSharingMode {
VK_SHARING_MODE_EXCLUSIVE = 0,
VK_SHARING_MODE_CONCURRENT = 1,
} VkSharingMode;
-
VK_SHARING_MODE_EXCLUSIVE
specifies that access to any range或 image subresource of the object will be exclusive to a single queue family at a time. -
VK_SHARING_MODE_CONCURRENT
specifies that concurrent access to any range或 image subresource of the object from multiple queue families is supported.
注意 与 |
使用 VK_SHARING_MODE_EXCLUSIVE
创建的图像对象 的图像子资源和缓冲区的区间必须 只能被同一个队列族中的队列在任何时间访问。 为了让一个不同的队列族可以中断 图像子资源或者区间的内容, 应用程序 必须 执行一个 queue family ownership transfer.
一旦创建完成,使用 VK_SHARING_MODE_EXCLUSIVE
创建的资源,就不在被任何队列族拥有。 当没有队列族拥有该资源时,一个缓冲区或内存屏障不被要求 获取 所有权, - 在队列内第一次被使用时就获取来。
注意 Images still require a layout transition from |
一个队列族可以 获取 使用 VK_SHARING_MODE_EXCLUSIVE
创建的资源的 图像子资源 或 缓冲区区间 的所有权,且不需要所有权转移, 对于刚创建的资源来说同样如此;然而,以此方式获取所有权 会导致 图形子资源或者缓冲区区间的内容变得未定义。
使用 VK_SHARING_MODE_CONCURRENT
创建的 缓冲区的区间和图像对象的图像子资源 必须只能被 对应着创建信息数据结构的 queueFamilyIndexCount
和 pQueueFamilyIndices
成员 指定的队列族的队列所访问。