启用验证层
Vulkan API的设计考虑了性能。提高其性能的一种方法是降低驱动程序执行的状态和错误检查。这是Vulkan被称为“瘦API”或“瘦驱动程序”的原因之一,它是硬件的最小抽象,这是API可跨多个硬件供应商和设备类型(高性能桌面)计算机,移动电话以及低功耗嵌入式系统。
但是,与传统的高级API(如OpenGL)相比,这种方法使得使用Vulkan API创建应用程序变得更加困难。这是因为驱动程序给开发人员的反馈非常少,因为它期望程序员正确使用API并遵守Vulkan规范中定义的规则。
为了缓解这个问题,Vulkan还被设计为一个分层API。最底层的核心是Vulkan API本身,它与驱动程序通信,允许我们对硬件进行编程(如下图所示)。除此之外是在Application和Vulkan API之间,开发人员可以启用其他层,以简化调试过程。
怎么做...
在Windows操作系统上:
1.在安装了SDK的地方,然后打开了当前的目录。
2.将vk_layer_settings.txt文件复制到要调试的可执行文件的目录中(到要执行的应用程序的文件夹中)。
3.创建一个名为VK_INSTANCE_LAYERS的环境变量:
1.打开命令行控制台(命令提示符/ cmd.exe)。
2.输入以下内容:
setx VK_INSTANCE_LAYERS
VK_LAYER_LUNARG_standard_validation
3. 关闭控制台。
4.再次重新打开命令提示符。
5.将当前目录更改为要执行的应用程序的文件夹。
6.运行应用程序;潜在的警告或错误将标准输出显示在命令提示符中。
在Liunx操作系统上:
1.打开当前安装了SDK的目录。
2.将vk_layer_settings.txt文件复制到要调试的可执行文件的目录中(进入要执行的应用程序的目录)。
3.创建一个名为VK_INSTANCE_LAYERS的环境变量:
1.打开终端窗口。
2.键入以下内容:
export
VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_standard_validation
3.关闭控制台。
4.运行应用程序;潜在的警告或错误将标准输出显示在命令提示符中
这个怎么运作...
Vulkan验证层包含一组库,可帮助查找已创建应用程序中的潜在问题。他们包括调试的功能但不限于此,验证传递给Vulkan函数的参数,验证纹理和渲染目标格式,跟踪Vulkan对象及其生命周期和使用情况,以及检查潜在的内存泄漏或转储(显示/打印)Vulkan API函数调用。这些功能由不同的验证层启用,但大多数都被收集到一个名为VK_LAYER_LUNARG_standard_validation的层中启用。其他层的名称的示例还有VK_LAYER_LUNARG_swapchain,VK_LAYER_LUNARG_object_tracker,VK_LAYER_GOOGLE_threading或VK_LAYER_LUNARG_api_dump等。可以同时启用多个图层,使用方法类似只需将要激活的图层名称分配给VK_INSTANCE_LAYERS环境变量即可。如果您是Windows操作系统用户,请记住使用分号分隔它们,如示例所示:
setx VK_INSTANCE_LAYERS VK_LAYER_LUNARG_api_dump;VK_LAYER_LUNARG_core_validation
如果您是Linux OS用户,请使用冒号分隔它们。例如:
export VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_api_dump:VK_LAYER_LUNARG _core_validation
名为VK_INSTANCE_LAYERS的环境变量也可以使用其他特定于操作系统的方式设置,例如Windows上的高级操作系统设置或Linux上的/etc/environment。
前面的示例为所有使用Vulkan的应用程序启用全局验证层,但也可以在实例创建期间在其源代码中为我们自己的应用程序启用它们。 但是,这种方法要求我们每次要启用或禁用不同的层时重新编译整个程序。 因此,使用前面的配方更容易启用它们。 这样,当我们想要发布应用程序的最终版本时,也不会忘记禁用它们。 要禁用验证层,我们只需删除VK_INSTANCE_LAYERS环境变量。
提示:不应在已发布的应用程序版本中启用验证层,因为它们可能会大幅降低性能。
有关可用验证层的完整列表,请参阅文档,该文档可以在安装Vulkan SDK的目录的Documentation子文件夹中找到。