Vulkan 内存分配和图像资源的绑定

Vulkan 内存分配和图像资源的绑定,当我们创建了一个图像资源对象(VkImage),它实际上只包括了逻辑设备中的分配。图像本身此时并没有真的和设备内存有物理上的关联。实际的内存处理过程是在后续的过程中独立完成的。物理分配的过程非常依赖于图像的类型。图像可以是稀疏的形式或者非稀疏的形式。稀疏类型的资源分配时需要设置稀疏创建标记(VkImageCreateInfo中的VkImageCreateFlagBits)。如果我们没有设置这个标记,那么得到的就是非稀疏的图像资源。下面我们只讨论非稀疏形式的内存绑定过程。有关稀疏资源的分配方面的信息,请参看Vulkan的官方标准文档。

图像与内存的关联需要分为三个步骤:获取图像内存分配的需求条件在设备内存端分配所需的物理内存块,然后将分配的内存绑定到图像资源。下面我们将深入讨论这一过程。

获取内存分配的需求条件

我们可以使用API函数vkGetImageMemoryRequirements()来查询非稀疏图像资源的内存需求条件。以下给出了这个函数的语法:

Vulkan 内存分配和图像资源的绑定
函数vkGetImageMemoryRequirements()的参数域见如表所示:
Vulkan 内存分配和图像资源的绑定
结构体VkMemoryRequirements包含了与图像资源关联的内存的需求信息,可以传递给vkGetImageMemoryRequirements()。以下给出了这个函数的语法:

Vulkan 内存分配和图像资源的绑定
这个结构体的参数和参数功能描述如表所示:
Vulkan 内存分配和图像资源的绑定

在设备端分配物理内存

物理内存的分配需要通过函数vkAllocateMemory()来完成。我们在第酷客教程的管理Vulkan内存过这个函数的相关内容。

将分配的内存绑定到图像对象

分配了设备的物理内存之后,我们需要将这个内存绑定到对应的图像资源对象(VkImage)上。图像资源绑定到关联的设备内存的过程需要通过vkBindimageMemory()函数来完成。相关的代码如下所示:

Vulkan 内存分配和图像资源的绑定
这个函数的参数域见如表所示:
Vulkan 内存分配和图像资源的绑定

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!