Vulkan Cookbook 第五章 16 释放描述符集

释放描述符集

译者注:示例代码点击此处

如果我们想返回由描述符集分配的内存并将其返回给池,我们可以释放给定的描述符集。

怎么做...

  1. 使用逻辑设备的句柄初始化名为logical_device的VkDevice类型的变量。
  2. 获取使用VK_DESCRIPTOR_POOL_CREATE_FREE_DECRIPTOR_SET_BIT标志创建的描述符池。将其句柄存储在名为descriptor_pool的VkDescriptorPool类型变量。
  3. 创建名为descriptor_sets的std::vector<VkDescriptorSet>类型向量。添加应该释放到向量的所有描述符集。
  4. 调用 vkFreeDescriptorSets( logical_device, descriptor_pool, static_cast<uint32_t>(descriptor_sets.size()), descriptor_sets.data() )。提供logical_device和descriptor_pool变量、descriptor_sets向量中的元素数量、以及指向descriptor_sets向量的第一个元素指针。
  5. 通过检查是否返回VK_SUCCESS值来确保调用成功。
  6. 清楚descriptor_sets向量,因为我们不能再使用释放的描述符集的句柄。

这个怎么运作...

释放描述符集会释放它所有的内存并将其返回池中。应该可以从池中分配另一组相同类型,但由于池的内存碎片可能无法实现(在这种情况下,我们可能需要创建另一个池或重置池)。

我们可以一次释放多个描述符集,但它们都必须来自同一个池,是这样完成的:

VkResult result = vkFreeDescriptorSets( logical_device, descriptor_pool, static_cast<uint32_t>(descriptor_sets.size()), descriptor_sets.data() );
if( VK_SUCCESS != result ) {
  std::cout << "Error occurred during freeing descriptor sets." << std::endl;
  return false;
}

descriptor_sets.clear();
return true;

我们不能同时从多个线程释放同一池分配的描述符集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值