|
|
|
@ -428,4 +428,36 @@ void Image::BindMemory(VkDeviceMemory memory, VkDeviceSize offset) const {
|
|
|
|
|
Check(dld->vkBindImageMemory(owner, handle, memory, offset));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DescriptorSets DescriptorPool::Allocate(const VkDescriptorSetAllocateInfo& ai) const {
|
|
|
|
|
const std::size_t num = ai.descriptorSetCount;
|
|
|
|
|
std::unique_ptr sets = std::make_unique<VkDescriptorSet[]>(num);
|
|
|
|
|
switch (const VkResult result = dld->vkAllocateDescriptorSets(owner, &ai, sets.get())) {
|
|
|
|
|
case VK_SUCCESS:
|
|
|
|
|
return DescriptorSets(std::move(sets), num, owner, handle, *dld);
|
|
|
|
|
case VK_ERROR_OUT_OF_POOL_MEMORY:
|
|
|
|
|
return {};
|
|
|
|
|
default:
|
|
|
|
|
throw Exception(result);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CommandBuffers CommandPool::Allocate(std::size_t num_buffers, VkCommandBufferLevel level) const {
|
|
|
|
|
VkCommandBufferAllocateInfo ai;
|
|
|
|
|
ai.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
|
|
|
|
|
ai.pNext = nullptr;
|
|
|
|
|
ai.commandPool = handle;
|
|
|
|
|
ai.level = level;
|
|
|
|
|
ai.commandBufferCount = static_cast<u32>(num_buffers);
|
|
|
|
|
|
|
|
|
|
std::unique_ptr buffers = std::make_unique<VkCommandBuffer[]>(num_buffers);
|
|
|
|
|
switch (const VkResult result = dld->vkAllocateCommandBuffers(owner, &ai, buffers.get())) {
|
|
|
|
|
case VK_SUCCESS:
|
|
|
|
|
return CommandBuffers(std::move(buffers), num_buffers, owner, handle, *dld);
|
|
|
|
|
case VK_ERROR_OUT_OF_POOL_MEMORY:
|
|
|
|
|
return {};
|
|
|
|
|
default:
|
|
|
|
|
throw Exception(result);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // namespace Vulkan::vk
|
|
|
|
|