97 lines
3.2 KiB
C++
97 lines
3.2 KiB
C++
#include "vk_resource_manager.h"
|
|
|
|
static Resource_Manager resource_manager;
|
|
|
|
Resource_Manager* get_resource_manager() {
|
|
return &resource_manager;
|
|
}
|
|
|
|
void Resource_Manager::initialize(VkDevice device) {
|
|
this->device = device;
|
|
}
|
|
|
|
void Resource_Manager::release_resources() {
|
|
for (auto semaphore : semaphores) {
|
|
vkDestroySemaphore(device, semaphore, nullptr);
|
|
}
|
|
semaphores.clear();
|
|
|
|
for (auto descriptor_pool : descriptor_pools) {
|
|
vkDestroyDescriptorPool(device, descriptor_pool, nullptr);
|
|
}
|
|
descriptor_pools.clear();
|
|
|
|
for (auto buffer : buffers) {
|
|
vkDestroyBuffer(device, buffer, nullptr);
|
|
}
|
|
buffers.clear();
|
|
|
|
for (auto sampler : samplers) {
|
|
vkDestroySampler(device, sampler, nullptr);
|
|
}
|
|
samplers.clear();
|
|
|
|
for (auto descriptor_set_layout : descriptor_set_layouts) {
|
|
vkDestroyDescriptorSetLayout(device, descriptor_set_layout, nullptr);
|
|
}
|
|
descriptor_set_layouts.clear();
|
|
|
|
for (auto pipeline_layout : pipeline_layouts) {
|
|
vkDestroyPipelineLayout(device, pipeline_layout, nullptr);
|
|
}
|
|
pipeline_layouts.clear();
|
|
}
|
|
|
|
VkSemaphore Resource_Manager::create_semaphore() {
|
|
VkSemaphoreCreateInfo desc;
|
|
desc.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
|
|
desc.pNext = nullptr;
|
|
desc.flags = 0;
|
|
|
|
VkSemaphore semaphore;
|
|
VkResult result = vkCreateSemaphore(device, &desc, nullptr, &semaphore);
|
|
check_vk_result(result, "vkCreateSemaphore");
|
|
semaphores.push_back(semaphore);
|
|
return semaphore;
|
|
}
|
|
|
|
VkDescriptorPool Resource_Manager::create_descriptor_pool(const VkDescriptorPoolCreateInfo& desc) {
|
|
VkDescriptorPool descriptor_pool;
|
|
VkResult result = vkCreateDescriptorPool(device, &desc, nullptr, &descriptor_pool);
|
|
check_vk_result(result, "vkCreateDescriptorPool");
|
|
descriptor_pools.push_back(descriptor_pool);
|
|
return descriptor_pool;
|
|
}
|
|
|
|
VkBuffer Resource_Manager::create_buffer(const VkBufferCreateInfo& desc) {
|
|
VkBuffer buffer;
|
|
VkResult result = vkCreateBuffer(device, &desc, nullptr, &buffer);
|
|
check_vk_result(result, "vkCreateBuffer");
|
|
buffers.push_back(buffer);
|
|
return buffer;
|
|
}
|
|
|
|
VkSampler Resource_Manager::create_sampler(const VkSamplerCreateInfo& desc) {
|
|
VkSampler sampler;
|
|
VkResult result = vkCreateSampler(device, &desc, nullptr, &sampler);
|
|
check_vk_result(result, "vkCreateSampler");
|
|
samplers.push_back(sampler);
|
|
return sampler;
|
|
}
|
|
|
|
VkDescriptorSetLayout Resource_Manager::create_descriptor_set_layout(const VkDescriptorSetLayoutCreateInfo& desc) {
|
|
VkDescriptorSetLayout descriptor_set_layout;
|
|
VkResult result = vkCreateDescriptorSetLayout(device, &desc, nullptr, &descriptor_set_layout);
|
|
check_vk_result(result, "vkCreateDescriptorSetLayout");
|
|
descriptor_set_layouts.push_back(descriptor_set_layout);
|
|
return descriptor_set_layout;
|
|
}
|
|
|
|
VkPipelineLayout Resource_Manager::create_pipeline_layout(const VkPipelineLayoutCreateInfo& desc) {
|
|
VkPipelineLayout pipeline_layout;
|
|
VkResult result = vkCreatePipelineLayout(device, &desc, nullptr, &pipeline_layout);
|
|
check_vk_result(result, "vkCreatePipelineLayout");
|
|
pipeline_layouts.push_back(pipeline_layout);
|
|
return pipeline_layout;
|
|
}
|