diff --git a/kraken/KRDevice.cpp b/kraken/KRDevice.cpp index dd2aea4..46b9e2f 100644 --- a/kraken/KRDevice.cpp +++ b/kraken/KRDevice.cpp @@ -475,9 +475,18 @@ bool KRDevice::initDescriptorPool() return true; } -VkDescriptorPool KRDevice::getDescriptorPool() +void KRDevice::createDescriptorSets(const std::vector& layouts, std::vector& descriptorSets) { - return m_descriptorPool; + VkDescriptorSetAllocateInfo allocInfo{}; + allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; + allocInfo.descriptorPool = m_descriptorPool; + allocInfo.descriptorSetCount = descriptorSets.size(); + allocInfo.pSetLayouts = layouts.data(); + if (vkAllocateDescriptorSets(m_logicalDevice, &allocInfo, descriptorSets.data()) != VK_SUCCESS) { + // TODO - Vulkan Refactoring - Error Handling + // In event of failure, should allocate an additional descriptor pool and try again + assert(false); + } } bool KRDevice::initialize(const std::vector& deviceExtensions) diff --git a/kraken/KRDevice.h b/kraken/KRDevice.h index fd96292..51fe1e3 100644 --- a/kraken/KRDevice.h +++ b/kraken/KRDevice.h @@ -83,7 +83,7 @@ public: void graphicsUpload(VkCommandBuffer& commandBuffer, KRDataBlock& data, VkBuffer destination); void graphicsUpload(VkCommandBuffer& commandBuffer, void* data, size_t size, VkBuffer destination); - VkDescriptorPool getDescriptorPool(); + void createDescriptorSets(const std::vector& layouts, std::vector& descriptorSets); VkPhysicalDevice m_device; VkDevice m_logicalDevice;