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 }