Package org.lwjgl.vulkan
Class NVExternalMemoryRdma
- java.lang.Object
-
- org.lwjgl.vulkan.NVExternalMemoryRdma
-
public class NVExternalMemoryRdma extends java.lang.ObjectThis extension adds support for allocating memory which can be used for remote direct memory access (RDMA) from other devices.Examples
VkPhysicalDeviceMemoryBudgetPropertiesEXT memoryBudgetProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT }; VkPhysicalDeviceMemoryProperties2 memoryProperties2 = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2, &memoryBudgetProperties }; vkGetPhysicalDeviceMemoryProperties2(physicalDevice, &memoryProperties2); uint32_t heapIndex = (uint32_t)-1; for (uint32_t memoryType = 0; memoryType < memoryProperties2.memoryProperties.memoryTypeCount; memoryType++) { if (memoryProperties2.memoryProperties.memoryTypes[memoryType].propertyFlags & VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV) { heapIndex = memoryProperties2.memoryProperties.memoryTypes[memoryType].heapIndex; break; } } if ((heapIndex == (uint32_t)-1) || (memoryBudgetProperties.heapBudget[heapIndex] < size)) { return; } VkPhysicalDeviceExternalBufferInfo externalBufferInfo = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO }; externalBufferInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; externalBufferInfo.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV; VkExternalBufferProperties externalBufferProperties = { VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES }; vkGetPhysicalDeviceExternalBufferProperties(physicalDevice, &externalBufferInfo, &externalBufferProperties); if (!(externalBufferProperties.externalMemoryProperties.externalMemoryFeatures & VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT)) { return; } VkExternalMemoryBufferCreateInfo externalMemoryBufferCreateInfo = { VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO }; externalMemoryBufferCreateInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV; VkBufferCreateInfo bufferCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, &externalMemoryBufferCreateInfo }; bufferCreateInfo.size = size; bufferCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; VkMemoryRequirements mem_reqs; vkCreateBuffer(device, &bufferCreateInfo, NULL, &buffer); vkGetBufferMemoryRequirements(device, buffer, &mem_reqs); VkExportMemoryAllocateInfo exportMemoryAllocateInfo = { VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO }; exportMemoryAllocateInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV; // Find memory type index uint32_t i = 0; for (; i < VK_MAX_MEMORY_TYPES; i++) { if ((mem_reqs.memoryTypeBits & (1 << i)) && (memoryProperties.memoryTypes[i].propertyFlags & VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV)) { break; } } VkMemoryAllocateInfo memAllocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, &exportMemoryAllocateInfo }; memAllocInfo.allocationSize = mem_reqs.size; memAllocInfo.memoryTypeIndex = i; vkAllocateMemory(device, &memAllocInfo, NULL, &mem); vkBindBufferMemory(device, buffer, mem, 0); VkMemoryGetRemoteAddressInfoNV getMemoryRemoteAddressInfo = { VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV }; getMemoryRemoteAddressInfo.memory = mem; getMemoryRemoteAddressInfo.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV; VkRemoteAddressNV rdmaAddress; vkGetMemoryRemoteAddressNV(device, &getMemoryRemoteAddressInfo, &rdmaAddress); // address returned in 'rdmaAddress' can be used by external devices to initiate RDMA transfersVK_NV_external_memory_rdma
- Name String
VK_NV_external_memory_rdma- Extension Type
- Device extension
- Registered Extension Number
- 372
- Revision
- 1
- Extension and Version Dependencies
- Requires Vulkan 1.0
- Requires
VK_KHR_external_memory
- Contact
- Carsten Rohde crohde
Other Extension Metadata
- Last Modified Date
- 2021-04-19
- IP Status
- No known IP claims.
- Contributors
- Carsten Rohde, NVIDIA
-
-
Field Summary
Fields Modifier and Type Field Description static intVK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NVExtendsVkExternalMemoryHandleTypeFlagBits.static intVK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NVExtendsVkMemoryPropertyFlagBits.static java.lang.StringVK_NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAMEThe extension name.static intVK_NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSIONThe extension specification version.static intVK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NVExtendsVkStructureType.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static intnvkGetMemoryRemoteAddressNV(org.lwjgl.vulkan.VkDevice device, long pMemoryGetRemoteAddressInfo, long pAddress)Unsafe version of:GetMemoryRemoteAddressNVstatic intvkGetMemoryRemoteAddressNV(org.lwjgl.vulkan.VkDevice device, VkMemoryGetRemoteAddressInfoNV pMemoryGetRemoteAddressInfo, org.lwjgl.PointerBuffer pAddress)Get an address for a memory object accessible by remote devices.
-
-
-
Field Detail
-
VK_NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION
The extension specification version.
-
VK_NV_EXTERNAL_MEMORY_RDMA_EXTENSION_NAME
The extension name.
-
VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV
ExtendsVkStructureType.Enum values:
-
VK_MEMORY_PROPERTY_RDMA_CAPABLE_BIT_NV
ExtendsVkMemoryPropertyFlagBits.
-
VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV
ExtendsVkExternalMemoryHandleTypeFlagBits.
-
-
Method Detail
-
nvkGetMemoryRemoteAddressNV
public static int nvkGetMemoryRemoteAddressNV(org.lwjgl.vulkan.VkDevice device, long pMemoryGetRemoteAddressInfo, long pAddress)Unsafe version of:GetMemoryRemoteAddressNV
-
vkGetMemoryRemoteAddressNV
public static int vkGetMemoryRemoteAddressNV(org.lwjgl.vulkan.VkDevice device, VkMemoryGetRemoteAddressInfoNV pMemoryGetRemoteAddressInfo, org.lwjgl.PointerBuffer pAddress)Get an address for a memory object accessible by remote devices.C Specification
To export an address representing the payload of a Vulkan device memory object accessible by remote devices, call:
VkResult vkGetMemoryRemoteAddressNV( VkDevice device, const VkMemoryGetRemoteAddressInfoNV* pMemoryGetRemoteAddressInfo, VkRemoteAddressNV* pAddress);Description
More communication may be required between the kernel-mode drivers of the devices involved. This information is out of scope of this documentation and should be requested from the vendors of the devices.
Valid Usage (Implicit)
devicemust be a validVkDevicehandlepMemoryGetRemoteAddressInfomust be a valid pointer to a validVkMemoryGetRemoteAddressInfoNVstructurepAddressmust be a valid pointer to aVkRemoteAddressNVvalue
Return Codes
- On success, this command returns
- On failure, this command returns
See Also
- Parameters:
device- the logical device that created the device memory being exported.pMemoryGetRemoteAddressInfo- a pointer to aVkMemoryGetRemoteAddressInfoNVstructure containing parameters of the export operation.pAddress- will return the address representing the payload of the device memory object.
-
-