Vulkan 调试方法

Vulkan的调试功能会验证应用程序的实现过程。它不仅反映程序错误,还会进行其他形式的验证,例如API的用法是否正确。它会验证传递给API函数的每一个参数,如果传入数据有潜在的问题或者危险行为,它就会给出警告信息。此外如果API的用法不是最优化的话,它也会汇报性能相关的警告。默认情况下,调试功能是被禁止的,应用程序需要自己决定是否要启用它。调试功能只适用于那些显式启用了它的层当中,并且需要在Vkinstance实例创建的时候执行启用操作。

如果调试功能已经启用,那么它会将自己插入到层所对应的Vulkan指令调用链当中。对于每一个指令,调试功能都会访问所启用的层,验证它们是否存在潜在的错误,警告,调试信息等内容。

步骤概览

Vulkan中进行调试工作很简单。下面给出了在应用程序中启用这个功能的各个步骤的概览:

1)在实例级添加扩展名VK_EXT_DEBUG_REPORT_EXTENSION_NAME,从而开启调试功能。

2)定义一组用于调试的验证层。例如,我们可能对下面列出的一些常用层更感兴趣(实例级别或者设备级别)。有关这些功能层的更多信息,参考酷客教程LunarG验证层及其特性。

  • VK_LAYER_GOOGLE_unique_objects
  • VK_LAYER_LUNARG_api_dump
  • VK_LAYER_LUNARG_core_validation
  • VK_LAYER_LUNARG_image
  • VK_LAYER_LUNARG_object_tracker
  • VK_LAYER_LUNARG_parameter_validation
  • VK_LAYER_LUNARG_swapchain
  • VK_LAYER_GOOGLE_threading

3)Vulkan的调试API并不属于核心指令的一部分,因此不能通过加载器直接静态加载。我们可以通过扩展API的方式,在运行过程中通过动态链接的形式获取预定义的函数指针。这样我们在后面的过程中就可以使用调试功能扩展API函数vkCreateDebug-ReportCallbackEXT以及vkDestroyDebugReportCallbackEXT了,它们都是通过动态链接和查询获取的。两者分别用于调试报告的创建和销毁。

4)当我们成功获取了调试报告API函数的指针之后,可以通过前一个API(vkCreateDebugReportCallbackEXT)创建调试报告对象。Vulkan会通过用户定义的回调函数(此回调函数必须链接到这个API)返回调试报告对象。

5)不再需要调试时销毁调试报告对象即可。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!