@@ -92,6 +92,24 @@ Names vsg::validateInstancelayerNames(const Names& names)
9292 return validatedNames;
9393}
9494
95+ static VKAPI_ATTR VkBool32 VKAPI_CALL debugUtilsMessengerCallback (
96+ VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
97+ VkDebugUtilsMessageTypeFlagsEXT /* messageType*/ ,
98+ const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
99+ void * /* pUserData*/ )
100+ {
101+ vsg::Logger::Level level = vsg::Logger::LOGGER_INFO;
102+ if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) != 0 ) level = vsg::Logger::LOGGER_ERROR;
103+ else if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) != 0 ) level = vsg::Logger::LOGGER_WARN;
104+ else if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) != 0 ) level = vsg::Logger::LOGGER_INFO;
105+ else if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) != 0 ) level = vsg::Logger::LOGGER_DEBUG;
106+
107+ vsg::log (level, " [Vulkan] " , pCallbackData->pMessage );
108+
109+ return VK_FALSE;
110+ }
111+
112+
95113Instance::Instance (Names instanceExtensions, Names layers, uint32_t vulkanApiVersion, AllocationCallbacks* allocator) :
96114 apiVersion(vulkanApiVersion)
97115{
@@ -145,6 +163,16 @@ Instance::Instance(Names instanceExtensions, Names layers, uint32_t vulkanApiVer
145163 }
146164
147165 _extensions = InstanceExtensions::create (this );
166+
167+ if (isExtensionSupported (VK_EXT_DEBUG_UTILS_EXTENSION_NAME) && _extensions->vkCreateDebugUtilsMessengerEXT )
168+ {
169+ VkDebugUtilsMessengerCreateInfoEXT debugUtilsMessengerCreateInfo{};
170+ debugUtilsMessengerCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
171+ debugUtilsMessengerCreateInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT;
172+ debugUtilsMessengerCreateInfo.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;
173+ debugUtilsMessengerCreateInfo.pfnUserCallback = debugUtilsMessengerCallback;
174+ result = _extensions->vkCreateDebugUtilsMessengerEXT (instance, &debugUtilsMessengerCreateInfo, nullptr , &_debugUtilsMessenger);
175+ }
148176}
149177
150178Instance::~Instance ()
@@ -153,6 +181,11 @@ Instance::~Instance()
153181
154182 if (_instance)
155183 {
184+ if (_debugUtilsMessenger != VK_NULL_HANDLE && _extensions->vkDestroyDebugUtilsMessengerEXT )
185+ {
186+ _extensions->vkDestroyDebugUtilsMessengerEXT (_instance, _debugUtilsMessenger, nullptr );
187+ }
188+
156189 vkDestroyInstance (_instance, _allocator);
157190 }
158191}
0 commit comments