Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Name
VK_EXT_external_memory_host - device extension
VK_EXT_external_memory_host
- Name String
VK_EXT_external_memory_host
- Extension Type
- Device extension
- Registered Extension Number
- 179
- Revision
- 1
- Ratification Status
- Not ratified
- Extension and Version Dependencies
- VK_KHR_external_memory or Version 1.1
- Contact
Other Extension Metadata
- Last Modified Date
- 2017-11-10
- IP Status
- No known IP claims.
- Contributors
- Jaakko Konttinen, AMD
- David Mao, AMD
- Daniel Rakos, AMD
- Tobias Hector, Imagination Technologies
- Faith Ekstrand, Intel
- James Jones, NVIDIA
Description
This extension enables an application to import host allocations and host mapped foreign device memory to Vulkan memory objects.
New Commands
New Structures
Extending
MemoryAllocateInfo
:Extending
PhysicalDeviceProperties2
:
New Enum Constants
EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION
Extending
ExternalMemoryHandleTypeFlagBits
:Extending
StructureType
:
Issues
1) What memory type has to be used to import host pointers?
RESOLVED: Depends on the implementation. Applications have to use
the new getMemoryHostPointerPropertiesEXT
command to query the
supported memory types for a particular host pointer. The reported
memory types may include memory types that come from a memory heap that
is otherwise not usable for regular memory object allocation and thus
such a heap’s size may be zero.
2) Can the application still access the contents of the host allocation after importing?
RESOLVED: Yes. However, usual synchronization requirements apply.
3) Can the application free the host allocation?
RESOLVED: No, it violates valid usage conditions. Using the memory object imported from a host allocation that is already freed thus results in undefined behavior.
4) Is mapMemory
expected to return the same host
address which was specified when importing it to the memory object?
RESOLVED: No. Implementations are allowed to return the same address but it is not required. Some implementations might return a different virtual mapping of the allocation, although the same physical pages will be used.
5) Is there any limitation on the alignment of the host pointer and/or size?
RESOLVED: Yes. Both the address and the size have to be an integer
multiple of minImportedHostPointerAlignment
. In addition, some
platforms and foreign devices may have additional restrictions.
6) Can the same host allocation be imported multiple times into a given physical device?
RESOLVED: No, at least not guaranteed by this extension. Some platforms do not allow locking the same physical pages for device access multiple times, so attempting to do it may result in undefined behavior.
7) Does this extension support exporting the new handle type?
RESOLVED: No.
8) Should we include the possibility to import host mapped foreign device memory using this API?
RESOLVED: Yes, through a separate handle type. Implementations are
still allowed to support only one of the handle types introduced by this
extension by not returning import support for a particular handle type
as returned in
ExternalMemoryPropertiesKHR
.
Version History
Revision 1, 2017-11-10 (Daniel Rakos)
- Internal revisions
See Also
ImportMemoryHostPointerInfoEXT
, MemoryHostPointerPropertiesEXT
,
PhysicalDeviceExternalMemoryHostPropertiesEXT
,
getMemoryHostPointerPropertiesEXT
Document Notes
For more information, see the Vulkan Specification
This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.
Synopsis
- getMemoryHostPointerPropertiesEXT :: forall io. MonadIO io => Device -> ExternalMemoryHandleTypeFlagBits -> ("hostPointer" ::: Ptr ()) -> io MemoryHostPointerPropertiesEXT
- data ImportMemoryHostPointerInfoEXT = ImportMemoryHostPointerInfoEXT {}
- data MemoryHostPointerPropertiesEXT = MemoryHostPointerPropertiesEXT {}
- data PhysicalDeviceExternalMemoryHostPropertiesEXT = PhysicalDeviceExternalMemoryHostPropertiesEXT {}
- type EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION = 1
- pattern EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION :: forall a. Integral a => a
- type EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME = "VK_EXT_external_memory_host"
- pattern EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
Documentation
getMemoryHostPointerPropertiesEXT Source #
:: forall io. MonadIO io | |
=> Device |
|
-> ExternalMemoryHandleTypeFlagBits |
|
-> ("hostPointer" ::: Ptr ()) |
|
-> io MemoryHostPointerPropertiesEXT |
vkGetMemoryHostPointerPropertiesEXT - Get properties of external memory host pointer
Valid Usage
-
handleType
must beEXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT
orEXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
-
pHostPointer
must be a pointer aligned to an integer multiple ofPhysicalDeviceExternalMemoryHostPropertiesEXT
::minImportedHostPointerAlignment
- If
handleType
isEXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT
,pHostPointer
must be a pointer to host memory - If
handleType
isEXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
,pHostPointer
must be a pointer to host mapped foreign memory
Valid Usage (Implicit)
-
device
must be a validDevice
handle
-
handleType
must be a validExternalMemoryHandleTypeFlagBits
value -
pHostPointer
must be a pointer value -
pMemoryHostPointerProperties
must be a valid pointer to aMemoryHostPointerPropertiesEXT
structure
Return Codes
See Also
VK_EXT_external_memory_host,
Device
,
ExternalMemoryHandleTypeFlagBits
,
MemoryHostPointerPropertiesEXT
data ImportMemoryHostPointerInfoEXT Source #
VkImportMemoryHostPointerInfoEXT - Import memory from a host pointer
Description
Importing memory from a host pointer shares ownership of the memory between the host and the Vulkan implementation. The application can continue to access the memory through the host pointer but it is the application’s responsibility to synchronize device and non-device access to the payload as defined in Host Access to Device Memory Objects.
Applications can import the same payload into multiple instances of Vulkan and multiple times into a given Vulkan instance. However, implementations may fail to import the same payload multiple times into a given physical device due to platform constraints.
Importing memory from a particular host pointer may not be possible
due to additional platform-specific restrictions beyond the scope of
this specification in which case the implementation must fail the
memory import operation with the error code
ERROR_INVALID_EXTERNAL_HANDLE_KHR
.
Whether device memory objects imported from a host pointer hold a reference to their payload is undefined. As such, the application must ensure that the imported memory range remains valid and accessible for the lifetime of the imported memory object.
Valid Usage
- If
handleType
is not0
, it must be supported for import, as reported inExternalMemoryProperties
- If
handleType
is not0
, it must beEXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT
orEXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
-
pHostPointer
must be a pointer aligned to an integer multiple ofPhysicalDeviceExternalMemoryHostPropertiesEXT
::minImportedHostPointerAlignment
- If
handleType
isEXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT
,pHostPointer
must be a pointer toallocationSize
number of bytes of host memory, whereallocationSize
is the member of theMemoryAllocateInfo
structure this structure is chained to - If
handleType
isEXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
,pHostPointer
must be a pointer toallocationSize
number of bytes of host mapped foreign memory, whereallocationSize
is the member of theMemoryAllocateInfo
structure this structure is chained to
Valid Usage (Implicit)
-
sType
must beSTRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT
-
handleType
must be a validExternalMemoryHandleTypeFlagBits
value -
pHostPointer
must be a pointer value
See Also
VK_EXT_external_memory_host,
ExternalMemoryHandleTypeFlagBits
,
StructureType
ImportMemoryHostPointerInfoEXT | |
|
Instances
data MemoryHostPointerPropertiesEXT Source #
VkMemoryHostPointerPropertiesEXT - Properties of external memory host pointer
Description
The value returned by memoryTypeBits
must only include bits that
identify memory types which are host visible.
Valid Usage (Implicit)
See Also
VK_EXT_external_memory_host,
StructureType
,
getMemoryHostPointerPropertiesEXT
MemoryHostPointerPropertiesEXT | |
|
Instances
data PhysicalDeviceExternalMemoryHostPropertiesEXT Source #
VkPhysicalDeviceExternalMemoryHostPropertiesEXT - Structure describing external memory host pointer limits that can be supported by an implementation
Description
If the PhysicalDeviceExternalMemoryHostPropertiesEXT
structure is
included in the pNext
chain of the
PhysicalDeviceProperties2
structure passed to
getPhysicalDeviceProperties2
,
it is filled in with each corresponding implementation-dependent
property.
Valid Usage (Implicit)
See Also
Instances
type EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION = 1 Source #
pattern EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION :: forall a. Integral a => a Source #
type EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME = "VK_EXT_external_memory_host" Source #
pattern EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #