Vulkan 内存分配和图像资源的绑定,当我们创建了一个图像资源对象(VkImage
),它实际上只包括了逻辑设备中的分配。图像本身此时并没有真的和设备内存有物理上的关联。实际的内存处理过程是在后续的过程中独立完成的。物理分配的过程非常依赖于图像的类型。图像可以是稀疏的形式或者非稀疏的形式。稀疏类型的资源分配时需要设置稀疏创建标记(VkImageCreateInfo
中的VkImageCreateFlagBits
)。如果我们没有设置这个标记,那么得到的就是非稀疏的图像资源。下面我们只讨论非稀疏形式的内存绑定过程。有关稀疏资源的分配方面的信息,请参看Vulkan的官方标准文档。
图像与内存的关联需要分为三个步骤:获取图像内存分配的需求条件,在设备内存端分配所需的物理内存块,然后将分配的内存绑定到图像资源。下面我们将深入讨论这一过程。
获取内存分配的需求条件
我们可以使用API函数vkGetImageMemoryRequirements()
来查询非稀疏图像资源的内存需求条件。以下给出了这个函数的语法:
函数vkGetImageMemoryRequirements()
的参数域见如表所示:
结构体VkMemoryRequirements
包含了与图像资源关联的内存的需求信息,可以传递给vkGetImageMemoryRequirements()。以下给出了这个函数的语法:
这个结构体的参数和参数功能描述如表所示:
在设备端分配物理内存
物理内存的分配需要通过函数vkAllocateMemory()
来完成。我们在第酷客教程的管理Vulkan内存过这个函数的相关内容。
将分配的内存绑定到图像对象
分配了设备的物理内存之后,我们需要将这个内存绑定到对应的图像资源对象(VkImage)上。图像资源绑定到关联的设备内存的过程需要通过vkBindimageMemory()函数来完成。相关的代码如下所示:
这个函数的参数域见如表所示:
酷客网相关文章:
评论前必须登录!
注册