Properly cleanup Vulkan resources
This commit is contained in:
parent
a6923c33ea
commit
fb7af358ab
2 changed files with 17 additions and 1 deletions
|
@ -20,6 +20,7 @@ private:
|
||||||
bool enableDebug = false;
|
bool enableDebug = false;
|
||||||
|
|
||||||
PFN_vkCreateDebugUtilsMessengerEXT createMessenger_ = nullptr;
|
PFN_vkCreateDebugUtilsMessengerEXT createMessenger_ = nullptr;
|
||||||
|
PFN_vkDestroyDebugUtilsMessengerEXT destroyMessenger_ = nullptr;
|
||||||
|
|
||||||
VkDebugUtilsMessengerEXT messenger_ = nullptr;
|
VkDebugUtilsMessengerEXT messenger_ = nullptr;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -15,6 +15,12 @@ Renderer::Renderer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Renderer::~Renderer() {
|
Renderer::~Renderer() {
|
||||||
|
#ifdef DEBUG
|
||||||
|
destroyMessenger_(instance_, messenger_, nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vkDestroyDevice(device_, nullptr);
|
||||||
|
|
||||||
vkDestroyInstance(instance_, nullptr);
|
vkDestroyInstance(instance_, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,6 +39,8 @@ void Renderer::createInstance() {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
delete[] availableLayers;
|
||||||
|
|
||||||
uint32_t extensionCount = 0;
|
uint32_t extensionCount = 0;
|
||||||
vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);
|
vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);
|
||||||
|
|
||||||
|
@ -49,6 +57,8 @@ void Renderer::createInstance() {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
delete[] availableExtensions;
|
||||||
|
|
||||||
VkInstanceCreateInfo instanceCreateInfo = {};
|
VkInstanceCreateInfo instanceCreateInfo = {};
|
||||||
instanceCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
|
instanceCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
|
||||||
instanceCreateInfo.enabledLayerCount = enabledLayers.size();
|
instanceCreateInfo.enabledLayerCount = enabledLayers.size();
|
||||||
|
@ -62,6 +72,7 @@ void Renderer::createInstance() {
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
void Renderer::createDebugMessenger() {
|
void Renderer::createDebugMessenger() {
|
||||||
createMessenger_ = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance_, "vkCreateDebugUtilsMessengerEXT");
|
createMessenger_ = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance_, "vkCreateDebugUtilsMessengerEXT");
|
||||||
|
destroyMessenger_ = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance_, "vkDestroyDebugUtilsMessengerEXT");
|
||||||
|
|
||||||
VkDebugUtilsMessengerCreateInfoEXT messengerCreateInfo = {};
|
VkDebugUtilsMessengerCreateInfoEXT messengerCreateInfo = {};
|
||||||
messengerCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
|
messengerCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
|
||||||
|
@ -93,6 +104,8 @@ void Renderer::createLogicalDevice() {
|
||||||
physicalDevice = physicalDevices[i];
|
physicalDevice = physicalDevices[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete[] physicalDevices;
|
||||||
|
|
||||||
uint32_t queueFamilyPropertiesCount = 0;
|
uint32_t queueFamilyPropertiesCount = 0;
|
||||||
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyPropertiesCount, nullptr);
|
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyPropertiesCount, nullptr);
|
||||||
|
|
||||||
|
@ -106,6 +119,8 @@ void Renderer::createLogicalDevice() {
|
||||||
graphicsFamilyIndex = i;
|
graphicsFamilyIndex = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete[] queueFamilyProperties;
|
||||||
|
|
||||||
const std::set<uint32_t> queueFamilyIndices = {graphicsFamilyIndex};
|
const std::set<uint32_t> queueFamilyIndices = {graphicsFamilyIndex};
|
||||||
std::vector<VkDeviceQueueCreateInfo> deviceQueueCreateInfos;
|
std::vector<VkDeviceQueueCreateInfo> deviceQueueCreateInfos;
|
||||||
for(auto queueFamilyIndex : queueFamilyIndices) {
|
for(auto queueFamilyIndex : queueFamilyIndices) {
|
||||||
|
|
Reference in a new issue