BsVulkanDescriptorPool.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsVulkanDescriptorPool.h"
  4. #include "BsVulkanDevice.h"
  5. namespace bs { namespace ct
  6. {
  7. VulkanDescriptorPool::VulkanDescriptorPool(VulkanDevice& device)
  8. :mDevice(device)
  9. {
  10. VkDescriptorPoolSize poolSizes[6];
  11. poolSizes[0].type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
  12. poolSizes[0].descriptorCount = sMaxSampledImages;
  13. poolSizes[1].type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
  14. poolSizes[1].descriptorCount = sMaxUniformBuffers;
  15. poolSizes[2].type = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
  16. poolSizes[2].descriptorCount = sMaxImages;
  17. poolSizes[3].type = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER;
  18. poolSizes[3].descriptorCount = sMaxSampledBuffers;
  19. poolSizes[4].type = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER;
  20. poolSizes[4].descriptorCount = sMaxBuffers;
  21. poolSizes[5].type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
  22. poolSizes[5].descriptorCount = sMaxBuffers;
  23. VkDescriptorPoolCreateInfo poolCI;
  24. poolCI.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
  25. poolCI.pNext = nullptr;
  26. poolCI.flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT;
  27. poolCI.maxSets = sMaxSets;
  28. poolCI.poolSizeCount = sizeof(poolSizes)/sizeof(poolSizes[0]);
  29. poolCI.pPoolSizes = poolSizes;
  30. VkResult result = vkCreateDescriptorPool(mDevice.getLogical(), &poolCI, gVulkanAllocator, &mPool);
  31. assert(result == VK_SUCCESS);
  32. }
  33. VulkanDescriptorPool::~VulkanDescriptorPool()
  34. {
  35. vkDestroyDescriptorPool(mDevice.getLogical(), mPool, gVulkanAllocator);
  36. }
  37. }}