/ appendices / VK_NV_external_memory.txt
VK_NV_external_memory.txt
 1  include::meta/VK_NV_external_memory.txt[]
 2  
 3  *Last Modified Date*::
 4      2016-08-19
 5  *IP Status*::
 6      No known IP claims.
 7  *Contributors*::
 8    - James Jones, NVIDIA
 9    - Carsten Rohde, NVIDIA
10  
11  Applications may wish to export memory to other Vulkan instances or other
12  APIs, or import memory from other Vulkan instances or other APIs to enable
13  Vulkan workloads to be split up across application module, process, or API
14  boundaries.
15  This extension enables applications to create exportable Vulkan memory
16  objects such that the underlying resources can be referenced outside the
17  Vulkan instance that created them.
18  
19  === New Object Types
20  
21  None.
22  
23  === New Enum Constants
24  
25  Extending elink:VkStructureType:
26  
27    ** ename:VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV
28    ** ename:VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV
29  
30  === New Enums
31  
32  None.
33  
34  === New Structures
35  
36    * Extending slink:VkImageCreateInfo:
37    ** slink:VkExternalMemoryImageCreateInfoNV
38    * Extending slink:VkMemoryAllocateInfo
39    ** slink:VkExportMemoryAllocateInfoNV
40  
41  === New Functions
42  
43  None.
44  
45  === Issues
46  
47  1) If memory objects are shared between processes and APIs, is this
48  considered aliasing according to the rules outlined in the
49  <<resources-memory-aliasing,Memory Aliasing>> section?
50  
51  *RESOLVED*: Yes, but strict exceptions to the rules are added to allow some
52  forms of aliasing in these cases.
53  Further, other extensions may build upon these new aliasing rules to define
54  specific support usage within Vulkan for imported native memory objects, or
55  memory objects from other APIs.
56  
57  2) Are new image layouts or metadata required to specify image layouts and
58  layout transitions compatible with non-Vulkan APIs, or with other instances
59  of the same Vulkan driver?
60  
61  *RESOLVED*: No.
62  Separate instances of the same Vulkan driver running on the same GPU should
63  have identical internal layout semantics, so applictions have the tools they
64  need to ensure views of images are consistent between the two instances.
65  Other APIs will fall into two categories: Those that are Vulkan compatible
66  (a term to be defined by subsequent interopability extensions), or Vulkan
67  incompatible.
68  When sharing images with Vulkan incompatible APIs, the Vulkan image must be
69  transitioned to the ename:VK_IMAGE_LAYOUT_GENERAL layout before handing it
70  off to the external API.
71  
72  Note this does not attempt to address cross-device transitions, nor
73  transitions to engines on the same device which are not visible within the
74  Vulkan API.
75  Both of these are beyond the scope of this extension.
76  
77  === Examples
78  
79  [source,c++]
80  ----------------------------------------
81  
82      // TODO: Write some sample code here.
83  
84  ----------------------------------------
85  
86  === Version History
87  
88    * Revision 1, 2016-08-19 (James Jones)
89      - Initial draft