调试器
使用验证层进行调试
Vulkan 旨在实现高性能和低驱动程序开销。为此,它默认情况下只包含非常有限的错误检查和调试功能。如果您做错了什么,驱动程序通常会崩溃而不是返回错误代码,或者更糟糕的是,它似乎在您的显卡上运行但完全在其他显卡上失败。
为了在开发过程中启用广泛的检查,Vulkan 提供了验证层,这些层是可以在 API 和图形驱动程序之间插入的代码片段,用于执行诸如对函数参数运行额外检查和跟踪内存管理问题等操作。您可以在开发期间启用验证层,并在以零开销发布应用程序时完全禁用它们。
验证层可以由任何人编写,但 Khronos 提供了一套称为 VK_LAYER_KHRONOS_validation
的标准集。查看 Android 上的 Vulkan 验证层(来自 Android NDK 页面)以在您的应用程序中启用验证层。
RenderDoc
RenderDoc 是另一个功能强大的开源工具,它允许您捕获帧以进行检查和分析。它是一个非常强大的工具,已被图形程序员用来调试其渲染的场景。它很好地支持 Android 上的 Vulkan,尽管您的应用程序必须设置为 可调试的 才能正常工作。
有关如何在 Android 应用程序上设置和使用它的信息,请查看 如何在 Android 上使用 RenderDoc。
捕获/回放库
GFXReconstruct
GFXReconstruct 是一个开源项目,提供工具来捕获和回放应用程序执行的图形 API 调用。记录的跟踪可以稍后回放以重建捕获应用程序的图形特定行为。GFXReconstruct 的主要优势之一是它允许您在已发布的应用程序上使用它(当您关闭了 android:debuggable 时)。
有关更多信息,请访问项目 存储库。Android 上的 Vulkan 设置和使用信息在 GFXReconstruct API 捕获和回放用于 Android 中提供。
请注意,跟踪文件不可移植,这意味着您不能在一台设备上捕获文件并在另一台设备上回放它(具有不同的操作系统版本、芯片组,甚至驱动程序版本)。
分析器
Android GPU Inspector (AGI)
Android GPU Inspector (AGI) 是为 Android 构建的图形分析器,其中包含 系统分析 和 帧分析器。它提供高级分析信息,使您能够了解游戏的性能分析并识别瓶颈。
要下载 AGI 并了解如何使用它,请查看 Android GPU Inspector 网站。
Android Studio 分析器
Android Studio 分析器是用于分析应用程序性能的有用工具。但是,它并非专门针对图形分析。它包括 CPU 分析器、内存分析器、网络分析器、能量分析器、电源分析器和事件监视器。
有关如何设置和使用 Android Studio 分析器的更多信息,请查看 分析应用程序性能 部分。
OEM 分析器
本节中的工具是特定于 OEM 的,可能不适用于运行其他芯片的设备。
适用于移动设备的 ARM Performance Studio
适用于移动设备的 ARM Performance Studio 是 ARM Mobile Studio 的新名称。它是一套工具,其中包括 图形分析器 和 帧顾问,以帮助您识别和修复 ARM GPU 上的性能问题。
有关更多信息,请查看 适用于移动设备的 ARM Performance Studio 网站。
适用于 Mali GPU 的 ARM PerfDoc
PerfDoc 是开发的 Vulkan 层,用于验证应用程序是否符合 ARM 的 Mali GPU 最佳实践。它已合并到 VK_LAYER_KHRONOS_validation 中,本质上是标准 Vulkan 验证层的一部分。
有关如何使用它的信息,请查看 使用验证层进行调试 部分。
高通骁龙分析器
高通骁龙分析器是高通为应用程序开发者开发的分析软件,用于分析 CPU、GPU、DSP、内存、功耗、热量和网络性能,以识别其芯片组上的瓶颈。
有关更多信息,请查看 高通开发者网络上的骁龙分析器。
三星 GPUWatch
三星的 GPUWatch 是一个工具,用于观察三星设备上的 GPU 活动。与其他工具不同,您可以直接从移动设备使用此工具,因此即使您无法访问其他主机计算机,它也非常方便立即检查应用程序性能。
有关如何启用它的更多信息,请查看 用户指南。
PVRTune
Imagination Technologies 的 PVRTune 使开发人员能够使用各种计数器和指标实时分析 PowerVR 硬件上的应用程序。它还允许保存会话以进行进一步的低级分析,并检测性能瓶颈。
有关如何使用 PVRTune 的更多信息,请查看 手册。
迁移工具
将着色器从 GLSL 转换为 SPIR-V
Vulkan API 预计着色器程序将以 SPIR-V 二进制中间格式提供。此约定不同于 OpenGL ES,在 OpenGL ES 中,您可以将用 OpenGL 着色语言 (GLSL) 编写的源代码提交为文本字符串。
NDK r12 及更高版本包含一个运行时库,用于将 GLSL 着色器编译为 SPIR-V,Vulkan 可以使用它。可以使用 shaderc 编译器将用 GLSL 编写的着色器程序编译为 SPIR-V。如果您的游戏使用 HLSL,则 DirectXShaderCompiler 支持 SPIR-V 输出。
通常,您需要将着色器程序作为游戏资产构建过程的一部分离线编译,并将 SPIR-V 模块包含为运行时资产的一部分。
有关 Vulkan 应用程序的着色器编译过程的更多信息,请查看 Android NDK 部分中的 Android 上的 Vulkan 着色器编译器。
高级功能
将 Android 帧速率调节集成到您的 Vulkan 渲染器中
Android 帧速率调节库(也称为 Swappy)帮助 Vulkan 游戏实现平滑渲染和正确的速率调节,以使游戏渲染循环与操作系统的显示子系统和底层显示硬件同步。
正确的速率调节消除了称为撕裂的视觉伪像,通过显示刷新和帧呈现之间的同步优化功耗,并且还通过稳定帧速率消除卡顿。要详细了解帧速率调节的重要性,请查看 AGDK 的 帧速率调节库 部分。
有关如何将帧速率调整集成到游戏中的更多信息,请查看 将 Android 帧速率调整集成到您的 Vulkan 渲染器中。
使用 Vulkan 预旋转处理设备方向
在应用程序外部处理表面旋转可能并非免费。即使在一些配备专用显示处理单元 (DPU) 的高端设备上,也可能仍然会产生可衡量的性能损失,并且影响将取决于您的应用程序是 CPU 密集型还是 GPU 密集型。
Vulkan 为开发者提供了与 OpenGL 相比,能够向设备提供有关渲染状态的更多信息的能力。其中一项信息就是 **设备方向** 及其与 **渲染表面方向** 的关系。此功能使您能够实现预旋转,以充分利用 Android 上的 Vulkan。
有关如何在 Vulkan 应用程序上有效处理设备旋转的更多信息,请查看 使用 Vulkan 预旋转处理设备方向 以及配套的 演示应用程序。
通过降低精度进行优化
图形数据的数值格式和着色器计算可能会对游戏的性能产生重大影响。现代 3D 图形中的大部分计算和数据都使用浮点数。Android 上的 Vulkan 使用大小为 32 位或 16 位的浮点数。32 位浮点数通常被称为单精度或全精度。尽管 Vulkan 中定义了 64 位浮点类型,但它并不常见,因此不建议使用。
查看 使用降低精度进行优化,了解有关如何优化 Vulkan 应用程序以在算术运算中获得最佳性能的信息。