/ Core / Clockworks / CwGraphics-Debug.cpp
CwGraphics-Debug.cpp
 1  #include <Clockworks/CwGraphics.hpp>
 2  #include <iostream>
 3  
 4  // CwDebugCallback
 5  static VKAPI_ATTR VkBool32 VKAPI_CALL CwDebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT MSeverity, VkDebugUtilsMessageTypeFlagsEXT MType,
 6                                                        const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* UserData) {
 7          std::cerr << "Validaton: \n \n" << pCallbackData->pMessage << "\n \n";
 8          return VK_FALSE;
 9  };
10  void CwGraphics::StartMessenger() {
11          if (!EnableValLayers) return;
12  
13          VkDebugUtilsMessengerCreateInfoEXT CInfo{};
14  
15          CInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
16          CInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT |
17                                  VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
18          CInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT |
19                              VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
20          CInfo.pfnUserCallback = CwDebugCallback;
21          if (CreateDebugMessenger(Instance, &CInfo, nullptr, &DebugMessenger) != VK_SUCCESS)
22                  throw std::runtime_error("CW-ERROR: failed to set up mesanger :( ");
23          else {
24                  std::cout << "Cw-Info: Debug-Mesanger Sucsess! :D\n";
25          }
26          CInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*)&CInfo;
27  };
28  
29  VkResult CwGraphics::CreateDebugMessenger(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* CInfo,
30                                            const VkAllocationCallbacks* Allocator, VkDebugUtilsMessengerEXT* DebugMessenger) {
31          auto func = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT");
32          if (func != nullptr) {
33                  return func(instance, CInfo, Allocator, DebugMessenger);
34          } else {
35                  return VK_ERROR_EXTENSION_NOT_PRESENT;
36          }
37  }
38  
39  void CwGraphics::DestroyDebugMessenger(VkInstance Instance, VkDebugUtilsMessengerEXT DebugMessenger, const VkAllocationCallbacks* Allo) {
40          auto func = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(Instance, "vkDestroyDebugUtilsMessengerEXT");
41  
42          if (func != nullptr) {
43                  func(Instance, DebugMessenger, Allo);
44          }
45  }