Buffer and image objects are created with a sharing mode controlling how they can be accessed from queues. The supported sharing modes are:
typedef enum VkSharingMode { VK_SHARING_MODE_EXCLUSIVE = 0, VK_SHARING_MODE_CONCURRENT = 1, } VkSharingMode;
VK_SHARING_MODE_EXCLUSIVE
specifies that access to any range or
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 or image subresource of the object from multiple queue families is
supported.
![]() | Note |
---|---|
|
Ranges of buffers and image subresources of image objects created using
VK_SHARING_MODE_EXCLUSIVE
must only be accessed by queues in the same
queue family at any given time.
In order for a different queue family to be able to interpret the memory
contents of a range or image subresource, the application must perform a
queue family ownership transfer.
Upon creation, resources using VK_SHARING_MODE_EXCLUSIVE
are not owned
by any queue family.
A buffer or image memory barrier is not required to acquire ownership when
no queue family owns the resource - it is implicitly acquired upon first use
within a queue.
![]() | Note |
---|---|
Images still require a layout transition from
|
A queue family can take ownership of an image subresource or buffer range
of a resource created with VK_SHARING_MODE_EXCLUSIVE
, without an
ownership transfer, in the same way as for a resource that was just created;
however, taking ownership in this way has the effect that the contents of
the image subresource or buffer range are undefined.
Ranges of buffers and image subresources of image objects created using
VK_SHARING_MODE_CONCURRENT
must only be accessed by queues from the
queue families specified through the queueFamilyIndexCount
and
pQueueFamilyIndices
members of the corresponding create info
structures.