Index: vulkan-game.cpp
===================================================================
--- vulkan-game.cpp	(revision a8f0577e557e2fccb87ed4f3f06a0f3ca375f7d8)
+++ vulkan-game.cpp	(revision 80de39d7bf67abe6677279753262dff6c2f42318)
@@ -58,4 +58,15 @@
 }
 
+void DestroyDebugUtilsMessengerEXT(VkInstance instance,
+      VkDebugUtilsMessengerEXT debugMessenger,
+      const VkAllocationCallbacks* pAllocator) {
+   auto func = (PFN_vkDestroyDebugUtilsMessengerEXT) vkGetInstanceProcAddr(
+      instance, "vkDestroyDebugUtilsMessengerEXT");
+
+   if (func != nullptr) {
+      func(instance, debugMessenger, pAllocator);
+   }
+}
+
 class VulkanGame {
    public:
@@ -70,5 +81,5 @@
    private:
       GameGui_SDL gui;
-      SDL_Window* window = NULL;
+      SDL_Window* window = nullptr;
 
       VkInstance instance;
@@ -90,5 +101,5 @@
                SDL_WINDOW_VULKAN | SDL_WINDOW_SHOWN);
 
-            if (window == NULL) {
+            if (window == nullptr) {
                cout << "Window could not be created!" << endl;
                return RTWO_ERROR;
@@ -125,9 +136,15 @@
          createInfo.ppEnabledExtensionNames = extensions.data();
 
+         VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo;
          if (enableValidationLayers) {
             createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
             createInfo.ppEnabledLayerNames = validationLayers.data();
+
+            populateDebugMessengerCreateInfo(debugCreateInfo);
+            createInfo.pNext = &debugCreateInfo;
          } else {
             createInfo.enabledLayerCount = 0;
+
+            createInfo.pNext = nullptr;
          }
 
@@ -137,13 +154,17 @@
       }
 
-      void setupDebugMessenger() {
-         if (!enableValidationLayers) return;
-
-         VkDebugUtilsMessengerCreateInfoEXT createInfo = {};
+      void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo) {
+         createInfo = {};
          createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
          createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
          createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
          createInfo.pfnUserCallback = debugCallback;
-         createInfo.pUserData = nullptr;
+      }
+
+      void setupDebugMessenger() {
+         if (!enableValidationLayers) return;
+
+         VkDebugUtilsMessengerCreateInfoEXT createInfo;
+         populateDebugMessengerCreateInfo(createInfo);
 
          if (CreateDebugUtilsMessengerEXT(instance, &createInfo, nullptr, &debugMessenger) != VK_SUCCESS) {
@@ -231,4 +252,8 @@
 
       void cleanup() {
+         if (enableValidationLayers) {
+            DestroyDebugUtilsMessengerEXT(instance, debugMessenger, nullptr);
+         }
+
          vkDestroyInstance(instance, nullptr);
 
