53 lines
1.3 KiB
C++
53 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include "device.hpp"
|
|
|
|
namespace sophia {
|
|
|
|
class DescriptorPool {
|
|
public:
|
|
DescriptorPool(const DescriptorPool&) = delete;
|
|
DescriptorPool& operator=(const DescriptorPool&) = delete;
|
|
|
|
class Builder {
|
|
public:
|
|
Builder(Device& device) : device{device} {}
|
|
|
|
Builder& addPoolSize(vk::DescriptorType descriptorType, u32 count);
|
|
Builder& setPoolFlags(vk::DescriptorPoolCreateFlags flags);
|
|
Builder& setMaxSets(u32 count);
|
|
std::unique_ptr<DescriptorPool> build() const;
|
|
|
|
private:
|
|
Device& device;
|
|
std::vector<vk::DescriptorPoolSize> poolSizes{};
|
|
u32 maxSets = 1000;
|
|
vk::DescriptorPoolCreateFlags poolFlags{};
|
|
};
|
|
|
|
DescriptorPool(Device& device, u32 maxSets,
|
|
vk::DescriptorPoolCreateFlags poolFlags,
|
|
const std::vector<vk::DescriptorPoolSize>& poolSizes);
|
|
~DescriptorPool();
|
|
|
|
bool allocateDescriptorSet(const vk::DescriptorSetLayout descriptorSetLayout,
|
|
vk::DescriptorSet& descriptor) const;
|
|
|
|
void freeDescriptors(std::vector<vk::DescriptorSet>& descriptors) const;
|
|
|
|
void resetPool();
|
|
|
|
const vk::DescriptorPool& get() { return this->descriptorPool; }
|
|
|
|
private:
|
|
Device& device;
|
|
vk::DescriptorPool descriptorPool;
|
|
|
|
friend class DescriptorWriter;
|
|
};
|
|
|
|
} // namespace sophia
|