跳到主要内容

vkAllocateMemory

函数原型

VkResult vkAllocateMemory(
VkDevice device,
const VkMemoryAllocateInfo* pAllocateInfo,
const VkAllocationCallbacks* pAllocator,
VkDeviceMemory* pMemory);

描述

申请GPU显存。

参数

  • device : 具备显存的逻辑设备。
  • pAllocateInfo : VkMemoryAllocateInfo 结构体指针,描述了如何申请显存。
  • pAllocator : host memory分配器。
  • pMemory : VkDeviceMemory句柄,指向申请的显存。

补充

VkMemoryAllocateInfo 结构体定义:

typedef struct VkMemoryAllocateInfo {
VkStructureType sType;
const void* pNext;
VkDeviceSize allocationSize;
uint32_t memoryTypeIndex;
} VkMemoryAllocateInfo;
  • sType : VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO
  • allocationSize : 申请的显存大小。
  • memoryTypeIndex : 显存类型索引。

返回值

  • VK_SUCCESS : 成功申请显存。
  • 其他 : 申请显存失败。

代码示例

VkBuffer buffer = VK_NULL_PTR;
VkBufferCreateInfo create_info = {};
create_info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
create_info.usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR;
create_info.size = 1024;
VK_CHECK(vkCreateBuffer(device, &create_info, nullptr, &buffer));

VkMemoryRequirements memory_requirements;
vkGetBufferMemoryRequirements(device, buffer, &memory_requirements);

VkDeviceMemory memory;
VkMemoryAllocateInfo memory_allocation{};
memory_allocation.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
memory_allocation.allocationSize = memory_requirements.size;
memory_allocation.memoryTypeIndex = 0;
VK_CHECK(vkAllocateMemory(device, &memory_allocation, nullptr, &memory));