学习vulkan有不短的时间了,几年前就遇到这个bug,直到最近才终于彻底解决了,泪目
本文记录了作者在使用Vulkan创建实例时,如果想加入调试回调以跟踪实例本身创建过程,遇到的问题及解决方法。
分类:笔记
如何在vulkan中开启验证层以调试
验证层并不是vulkan核心的功能,所以开启它需要扩展支持,主要的步骤有三个:
1.设置调试用的回调函数和回调句柄,这里的回调函数就是真正的处理函数,目前只有打印功能;
2.从地址中使用vkGetInstanceProcAddr加载代理函数,以将调试回调函数设置给回调句柄,这个设置函数vulkan没有直接提供,需要从地址中获取;
3.利用2得到的函数,将调试回调函数设置给回调句柄。
// 回调句柄
VkDebugUtilsMessengerEXT debugMessenger;// 只有打印功能的调试回调函数static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(
VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
VkDebugUtilsMessageTypeFlagsEXT messageType,const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,void* pUserData){
std::cerr <<"validation layer : "<< pCallbackData->pMessage << std::endl;return VK_FALSE;}// 2.使用vkGetInstanceProcAddr获取代理函数
VkResult CreateDebugUtilsMessengerEXT(VkInstance instance,const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,const VkAllocationCallbacks* pAllcator,
VkDebugUtilsMessengerEXT* pDebugMessenger){
auto func =(PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance

发布评论