106 lines
3.9 KiB
Plaintext
106 lines
3.9 KiB
Plaintext
// Copyright (c) 2014-2016 Khronos Group. This work is licensed under a
|
|
// Creative Commons Attribution 4.0 International License; see
|
|
// http://creativecommons.org/licenses/by/4.0/
|
|
|
|
VkSharingMode(3)
|
|
================
|
|
|
|
Name
|
|
----
|
|
VkSharingMode - Buffer and image sharing modes
|
|
|
|
C Specification
|
|
---------------
|
|
|
|
// refBegin VkSharingMode - Buffer and image sharing modes
|
|
|
|
Buffer and image objects are created with a _sharing mode_ controlling how
|
|
they can: be accessed from queues. The supported sharing modes are:
|
|
|
|
include::../enums/VkSharingMode.txt[]
|
|
|
|
|
|
Description
|
|
-----------
|
|
|
|
* ename: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.
|
|
* ename:VK_SHARING_MODE_CONCURRENT specifies that concurrent access to any
|
|
range or image subresource of the object from multiple queue families is
|
|
supported.
|
|
|
|
[NOTE]
|
|
.Note
|
|
====
|
|
ename:VK_SHARING_MODE_CONCURRENT may: result in lower performance access to
|
|
the buffer or image than ename:VK_SHARING_MODE_EXCLUSIVE.
|
|
====
|
|
|
|
Ranges of buffers and image subresources of image objects created using
|
|
ename: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: transfer exclusive ownership of the range or image
|
|
subresource between the source and destination queue families with the
|
|
following sequence of operations:
|
|
|
|
1. Release exclusive ownership from the source queue family to the
|
|
destination queue family.
|
|
2. Use semaphores to ensure proper execution control for the ownership
|
|
transfer.
|
|
3. Acquire exclusive ownership for the destination queue family from the
|
|
source queue family.
|
|
|
|
To release exclusive ownership of a range of a buffer or image subresource
|
|
of an image object, the application must: execute a buffer or image memory
|
|
barrier, respectively (see slink:VkBufferMemoryBarrier and
|
|
slink:VkImageMemoryBarrier) on a queue from the source queue family. The
|
|
pname:srcQueueFamilyIndex parameter of the barrier must: be set to the
|
|
source queue family index, and the pname:dstQueueFamilyIndex parameter to
|
|
the destination queue family index.
|
|
|
|
To acquire exclusive ownership, the application must: execute the same
|
|
buffer or image memory barrier on a queue from the destination queue family.
|
|
|
|
Upon creation, resources using ename: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. However, images still require a
|
|
<<resources-image-layouts,layout transition>> from
|
|
ename:VK_IMAGE_LAYOUT_UNDEFINED or ename:VK_IMAGE_LAYOUT_PREINITIALIZED
|
|
before being used on the first queue. This layout transition can: either be
|
|
accomplished by an image memory barrier or by use in a render pass instance.
|
|
|
|
Once a queue family has used a range or image subresource of an
|
|
ename:VK_SHARING_MODE_EXCLUSIVE resource, its contents are undefined to
|
|
other queue families unless ownership is transferred. The contents may: also
|
|
become undefined for other reasons, e.g. as a result of writes to an image
|
|
subresource that aliases the same memory. A queue family can: take ownership
|
|
of a range or image subresource without an ownership transfer in the same
|
|
way as for a resource that was just created, however doing so means any
|
|
contents written by other queue families or via incompatible aliases are
|
|
undefined.
|
|
|
|
// refEnd VkSharingMode
|
|
|
|
|
|
See Also
|
|
--------
|
|
|
|
slink:VkBufferCreateInfo, slink:VkImageCreateInfo
|
|
|
|
|
|
Document Notes
|
|
--------------
|
|
|
|
For more information, see the Vulkan Specification at URL
|
|
|
|
https://www.khronos.org/registry/vulkan/specs/1.0/xhtml/vkspec.html#VkSharingMode
|
|
|
|
This page is extracted from the Vulkan Specification.
|
|
Fixes and changes should be made to the Specification,not directly.
|
|
|
|
include::footer.txt[]
|
|
|