Vulkan Programming Guide::Chapter2:: Memory and Resources(内存和资源)


VulKan 编程指南::第二章::内存和资源


在这一章你将会学习什么

  • VulKan是如何管理主机内存和设备内存
  • 如何在你的程序中高效的使用内存
  • VulKan是如何使用图片数据和缓冲(buffers)去消耗空间并生成一些数据

几乎所有的系统都会有操作内存的功能,VulKan也是有内存操作功能。在VulKan中有两种基本类内存类型:

  • 主机内存(内存条上的内存)
  • 设备内存(显卡中的内存)

对于VulKan的操作的资源需要使用设备内存,然后我们的程序负责去管理这些资源。一般内存是用来存储数据的。在这章你将会学会如何使用VulKan来控制管理内存。


主机内存管理

当VulKan创建一个新对象时,我们需要使用一定的内存来存储并与之相关联,对于这种存储使用的就是CPU可访问的主机内存。这些主机内存分配就是通过调用malloc(C语言常见)或者new(C++常见)语句来实现(说白了就是动态分配)。但是相对于这些普通的内存分配器,VulKan需要一些比较特殊的分配器。需要注意的是VulKan比较喜欢排列整齐的内存地址,这是因为在一些高性能的CPU处理上这将会更高效(或者只用这么分配才能高效)。假设使用了排列整齐内存VulKan可以表现出高效的性能。

为了满足高效的目的,VulKan提供了高级的内存分配器。这可能会导致部分替代(或完全替代)原先的分配器。VulKan是通过vkCreateInstance()函数中的pAllocator参数来指定分配器。对于vkCreateInstance()函数这里再次给出声明(参数讲解请参考第一章):

VkResult vkCreateInstance (
const VkInstanceCreateInfo* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkInstance* pInstance
);

对于pAllocator参数是指向一个VkAllocationCallbacks的结构体,直到目前我们一直给pAllocator赋值为nullptr,也就是告诉VulKan使用内部默认的内存分配器。对于VkAllocationCallbacks结构体,其内部封装了一个我们可控的自定义内存分配器,对于VkAllocationCallbacks结构体其声明如下:

typedef struct VkAllocationCallbacks {
    void* pUserData;
    PFN_vkAllocationFunction pfnAllocation;
    PFN_vkReallocationFunction pfnReallocation;
    PFN_vkFreeFunction pfnFree;
    PFN_vkInternalAllocationNotification pfnInternalAllocation;
    PFN_vkInternalFreeNotification pfnInternalFree;
} VkAllocationCallbacks;

 

先写到这吧,累死了(手动滑稽)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值