KRDevice now allocates a global descriptor pool per each device.

This commit is contained in:
2022-09-20 18:12:18 -07:00
parent a3ee2845d1
commit ee091aa1fe
2 changed files with 45 additions and 0 deletions

View File

@@ -49,6 +49,7 @@ KRDevice::KRDevice(KRContext& context, const VkPhysicalDevice& device)
, m_allocator(VK_NULL_HANDLE)
, m_streamingStagingBuffer{}
, m_graphicsStagingBuffer{}
, m_descriptorPool(VK_NULL_HANDLE)
{
}
@@ -74,6 +75,10 @@ void KRDevice::StagingBufferInfo::destroy(VmaAllocator& allocator)
void KRDevice::destroy()
{
if (m_descriptorPool != VK_NULL_HANDLE) {
vkDestroyDescriptorPool(m_logicalDevice, m_descriptorPool, nullptr);
m_descriptorPool = VK_NULL_HANDLE;
}
m_streamingStagingBuffer.destroy(m_allocator);
m_graphicsStagingBuffer.destroy(m_allocator);
@@ -443,6 +448,38 @@ bool KRDevice::initStagingBuffer(VkDeviceSize size, StagingBufferInfo* info
return true;
}
bool KRDevice::initDescriptorPool()
{
// TODO - Vulkan Refactoring - These values need to be dynamic
// TODO - Perhaps we should dynamically creaate new pools as needed
const size_t kMaxDescriptorSets = 64;
const size_t kMaxUniformBufferDescriptors = 1024;
const size_t kMaxImageSamplerDescriptors = 1024;
VkDescriptorPoolSize poolSizes[2] = {};
poolSizes[0].type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
poolSizes[0].descriptorCount = static_cast<uint32_t>(kMaxUniformBufferDescriptors);
poolSizes[1].type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
poolSizes[1].descriptorCount = static_cast<uint32_t>(kMaxImageSamplerDescriptors);
VkDescriptorPoolCreateInfo poolInfo{};
poolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
poolInfo.poolSizeCount = 2;
poolInfo.pPoolSizes = poolSizes;
poolInfo.maxSets = static_cast<uint32_t>(kMaxDescriptorSets);
if (vkCreateDescriptorPool(m_logicalDevice, &poolInfo, nullptr, &m_descriptorPool) != VK_SUCCESS) {
return false;
}
return true;
}
VkDescriptorPool KRDevice::getDescriptorPool()
{
return m_descriptorPool;
}
bool KRDevice::initialize(const std::vector<const char*>& deviceExtensions)
{
// TODO - Return discrete failure codes
@@ -478,6 +515,11 @@ bool KRDevice::initialize(const std::vector<const char*>& deviceExtensions)
return false;
}
if (!initDescriptorPool()) {
destroy();
return false;
}
return true;
}

View File

@@ -83,6 +83,8 @@ public:
void graphicsUpload(VkCommandBuffer& commandBuffer, KRDataBlock& data, VkBuffer destination);
void graphicsUpload(VkCommandBuffer& commandBuffer, void* data, size_t size, VkBuffer destination);
VkDescriptorPool getDescriptorPool();
VkPhysicalDevice m_device;
VkDevice m_logicalDevice;
VkPhysicalDeviceProperties m_deviceProperties;
@@ -141,4 +143,5 @@ private:
, const char* debug_label
#endif // KRENGINE_DEBUG_GPU_LABELS
);
bool initDescriptorPool();
};