mirror of
https://git.h3cjp.net/H3cJP/citra.git
synced 2024-11-29 15:33:01 +00:00
renderer_vulkan/wrapper: Add pool handles
This commit is contained in:
parent
affee77b70
commit
397f53dea1
|
@ -428,4 +428,36 @@ void Image::BindMemory(VkDeviceMemory memory, VkDeviceSize offset) const {
|
||||||
Check(dld->vkBindImageMemory(owner, handle, memory, offset));
|
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
|
} // namespace Vulkan::vk
|
||||||
|
|
|
@ -600,4 +600,19 @@ public:
|
||||||
void BindMemory(VkDeviceMemory memory, VkDeviceSize offset) const;
|
void BindMemory(VkDeviceMemory memory, VkDeviceSize offset) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class DescriptorPool : public Handle<VkDescriptorPool, VkDevice, DeviceDispatch> {
|
||||||
|
using Handle<VkDescriptorPool, VkDevice, DeviceDispatch>::Handle;
|
||||||
|
|
||||||
|
public:
|
||||||
|
DescriptorSets Allocate(const VkDescriptorSetAllocateInfo& ai) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CommandPool : public Handle<VkCommandPool, VkDevice, DeviceDispatch> {
|
||||||
|
using Handle<VkCommandPool, VkDevice, DeviceDispatch>::Handle;
|
||||||
|
|
||||||
|
public:
|
||||||
|
CommandBuffers Allocate(std::size_t num_buffers,
|
||||||
|
VkCommandBufferLevel level = VK_COMMAND_BUFFER_LEVEL_PRIMARY) const;
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace Vulkan::vk
|
} // namespace Vulkan::vk
|
||||||
|
|
Loading…
Reference in a new issue