| // Copyright (c) 2018-2020 NVIDIA Corporation |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| [open,refpage='VkImportMemoryWin32HandleInfoNV',desc='Import Win32 memory created on the same physical device',type='structs'] |
| -- |
| To import memory created on the same physical device but outside of the |
| current Vulkan instance, add a slink:VkImportMemoryWin32HandleInfoNV |
| structure to the pname:pNext chain of the slink:VkMemoryAllocateInfo |
| structure, specifying a handle to and the type of the memory. |
| |
| The sname:VkImportMemoryWin32HandleInfoNV structure is defined as: |
| |
| include::{generated}/api/structs/VkImportMemoryWin32HandleInfoNV.txt[] |
| |
| * pname:sType is the type of this structure. |
| * pname:pNext is `NULL` or a pointer to a structure extending this |
| structure. |
| * pname:handleType is `0` or a elink:VkExternalMemoryHandleTypeFlagBitsNV |
| value specifying the type of memory handle in pname:handle. |
| * pname:handle is a Windows code:HANDLE referring to the memory. |
| |
| If pname:handleType is `0`, this structure is ignored by consumers of the |
| slink:VkMemoryAllocateInfo structure it is chained from. |
| |
| .Valid Usage |
| **** |
| * [[VUID-VkImportMemoryWin32HandleInfoNV-handleType-01327]] |
| pname:handleType must: not have more than one bit set |
| * [[VUID-VkImportMemoryWin32HandleInfoNV-handle-01328]] |
| pname:handle must: be a valid handle to memory, obtained as specified by |
| pname:handleType |
| **** |
| |
| include::{generated}/validity/structs/VkImportMemoryWin32HandleInfoNV.txt[] |
| -- |
| Bits which can: be set in pname:handleType are: |
| |
| [open,refpage='VkExternalMemoryHandleTypeFlagBitsNV',desc='Bitmask specifying external memory handle types',type='enums'] |
| -- |
| Possible values of slink:VkImportMemoryWin32HandleInfoNV::pname:handleType, |
| specifying the type of an external memory handle, are: |
| |
| include::{generated}/api/enums/VkExternalMemoryHandleTypeFlagBitsNV.txt[] |
| |
| * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV specifies a |
| handle to memory returned by flink:vkGetMemoryWin32HandleNV. |
| * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV specifies a |
| handle to memory returned by flink:vkGetMemoryWin32HandleNV, or one |
| duplicated from such a handle using `DuplicateHandle()`. |
| * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV specifies a |
| valid NT handle to memory returned by |
| `IDXGIResource1::CreateSharedHandle`, or a handle duplicated from such a |
| handle using `DuplicateHandle()`. |
| * ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV specifies a |
| handle to memory returned by `IDXGIResource::GetSharedHandle()`. |
| |
| ifdef::editing-notes[] |
| [NOTE] |
| .editing-note |
| ==== |
| (Jon) If additional (non-Win32) bits are added to the possible memory types, |
| this type should move to the `apiext:VK_NV_external_memory_capabilities` |
| section, and each bit would then be protected by ifdefs for the extension it |
| is defined by. |
| ==== |
| endif::editing-notes[] |
| -- |
| |
| [open,refpage='VkExternalMemoryHandleTypeFlagsNV',desc='Bitmask of VkExternalMemoryHandleTypeFlagBitsNV',type='flags'] |
| -- |
| include::{generated}/api/flags/VkExternalMemoryHandleTypeFlagsNV.txt[] |
| |
| tname:VkExternalMemoryHandleTypeFlagsNV is a bitmask type for setting a mask |
| of zero or more elink:VkExternalMemoryHandleTypeFlagBitsNV. |
| -- |
| |