blob: 679081f1febc03883090c095e6b523c66f4906c2 [file] [log] [blame]
// 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.
--