Lugdunum  0.1.0
DescriptorPool.cpp
Go to the documentation of this file.
2 
4 
5 namespace lug {
6 namespace Graphics {
7 namespace Vulkan {
8 namespace API {
9 namespace Builder {
10 
11 DescriptorPool::DescriptorPool(const API::Device& device) : _device{device} {}
12 
14  // Create the descriptorPool creation information for vkCreateDescriptorPool
15  const VkDescriptorPoolCreateInfo createInfo{
16  /* createInfo.sType */ VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
17  /* createInfo.pNext */ nullptr,
18  /* createInfo.flags */ _flags,
19  /* createInfo.maxSets */ _maxSets,
20  /* createInfo.poolSizeCount */ static_cast<uint32_t>(_poolSizes.size()),
21  /* createInfo.pPoolSizes */ _poolSizes.data(),
22  };
23 
24  // Create the descriptorPool
25  VkDescriptorPool vkDescriptorPool{VK_NULL_HANDLE};
26  VkResult result = vkCreateDescriptorPool(static_cast<VkDevice>(_device), &createInfo, nullptr, &vkDescriptorPool);
27 
28  if (returnResult) {
29  *returnResult = result;
30  }
31 
32  if (result != VK_SUCCESS) {
33  return false;
34  }
35 
36  descriptorPool = API::DescriptorPool(vkDescriptorPool, &_device);
37 
38  return true;
39 }
40 
41 std::unique_ptr<API::DescriptorPool> DescriptorPool::build(VkResult* returnResult) {
42  std::unique_ptr<API::DescriptorPool> descriptorPool = std::make_unique<API::DescriptorPool>();
43  return build(*descriptorPool, returnResult) ? std::move(descriptorPool) : nullptr;
44 }
45 
46 } // Builder
47 } // API
48 } // Vulkan
49 } // Graphics
50 } // lug
bool build(API::DescriptorPool &instance, VkResult *returnResult=nullptr)
std::vector< VkDescriptorPoolSize > _poolSizes