跳转至

vkAllocateMemory

函数原型

1
2
3
4
5
VkResult vkAllocateMemory(
    VkDevice                                    device,
    const VkMemoryAllocateInfo*                 pAllocateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkDeviceMemory*                             pMemory);

描述

申请GPU显存。

参数

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

补充

VkMemoryAllocateInfo 结构体定义:

1
2
3
4
5
6
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));