Archived
1
Fork 0

Properly cleanup Vulkan resources

This commit is contained in:
Joshua Goins 2018-09-28 20:41:48 -04:00
parent a6923c33ea
commit fb7af358ab
2 changed files with 17 additions and 1 deletions

View file

@ -20,6 +20,7 @@ private:
bool enableDebug = false;
PFN_vkCreateDebugUtilsMessengerEXT createMessenger_ = nullptr;
PFN_vkDestroyDebugUtilsMessengerEXT destroyMessenger_ = nullptr;
VkDebugUtilsMessengerEXT messenger_ = nullptr;
#endif

View file

@ -15,6 +15,12 @@ Renderer::Renderer() {
}
Renderer::~Renderer() {
#ifdef DEBUG
destroyMessenger_(instance_, messenger_, nullptr);
#endif
vkDestroyDevice(device_, nullptr);
vkDestroyInstance(instance_, nullptr);
}
@ -32,6 +38,8 @@ void Renderer::createInstance() {
enabledLayers.push_back("VK_LAYER_LUNARG_standard_validation");
}
#endif
delete[] availableLayers;
uint32_t extensionCount = 0;
vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);
@ -48,6 +56,8 @@ void Renderer::createInstance() {
}
}
#endif
delete[] availableExtensions;
VkInstanceCreateInfo instanceCreateInfo = {};
instanceCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
@ -62,7 +72,8 @@ void Renderer::createInstance() {
#ifdef DEBUG
void Renderer::createDebugMessenger() {
createMessenger_ = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance_, "vkCreateDebugUtilsMessengerEXT");
destroyMessenger_ = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance_, "vkDestroyDebugUtilsMessengerEXT");
VkDebugUtilsMessengerCreateInfoEXT messengerCreateInfo = {};
messengerCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
messengerCreateInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT;
@ -93,6 +104,8 @@ void Renderer::createLogicalDevice() {
physicalDevice = physicalDevices[i];
}
delete[] physicalDevices;
uint32_t queueFamilyPropertiesCount = 0;
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyPropertiesCount, nullptr);
@ -106,6 +119,8 @@ void Renderer::createLogicalDevice() {
graphicsFamilyIndex = i;
}
delete[] queueFamilyProperties;
const std::set<uint32_t> queueFamilyIndices = {graphicsFamilyIndex};
std::vector<VkDeviceQueueCreateInfo> deviceQueueCreateInfos;
for(auto queueFamilyIndex : queueFamilyIndices) {