admin 管理员组

文章数量: 1184232

学习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

本文标签: 调句柄 函数 系统