diff --git a/oatmeal/src/ctx_instance.cpp b/oatmeal/src/ctx_instance.cpp index 1423786..00feb50 100644 --- a/oatmeal/src/ctx_instance.cpp +++ b/oatmeal/src/ctx_instance.cpp @@ -1,7 +1,9 @@ #include #include #include +#include #include +#include #include #include "ctx.h" #include "vulkan/vulkan.hpp" @@ -80,4 +82,34 @@ namespace Oatmeal { return extensions; } + static VKAPI_ATTR vk::Bool32 VKAPI_CALL debugCallback(vk::DebugUtilsMessageSeverityFlagBitsEXT severity, + vk::DebugUtilsMessageTypeFlagsEXT type, + const vk::DebugUtilsMessengerCallbackDataEXT *pCallbackData, + void *) { + std::cerr << "Validation layer: type " << vk::to_string(type) << "msg: " << pCallbackData->pMessage + << std::endl; + return 0; + } + + void ctx::setupDebugMessenger() { + if (!enableValidationLayers) { + return; + } + + vk::DebugUtilsMessageSeverityFlagsEXT severityFlags(vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning | + vk::DebugUtilsMessageSeverityFlagBitsEXT::eError); + + vk::DebugUtilsMessageTypeFlagsEXT typeFlags(vk::DebugUtilsMessageTypeFlagBitsEXT::eGeneral | + vk::DebugUtilsMessageTypeFlagBitsEXT::eValidation | + vk::DebugUtilsMessageTypeFlagBitsEXT::ePerformance); + + vk::DebugUtilsMessengerCreateInfoEXT createInfo{ + .messageSeverity = severityFlags, + .messageType = typeFlags, + .pfnUserCallback = &debugCallback, + }; + + m_debugMessenger = m_instance.createDebugUtilsMessengerEXT(createInfo); + } + } // namespace Oatmeal