调试器
使用验证层进行调试
Vulkan 专为实现高性能和低驱动程序开销而设计。为了实现这一点,默认情况下,它仅包含非常有限的错误检查和调试功能。如果出现错误,驱动程序通常会崩溃,而不是返回错误代码,更糟糕的是,它看似可以在显卡上运行,但在其他显卡上则完全失败。
为了在开发过程中实现大量检查,Vulkan 提供了验证层。验证层是可插入 API 和图形驱动程序之间的代码段,用于执行对函数参数进行额外检查和跟踪内存管理问题等操作。您可以在开发期间启用验证层,并在零开销发布应用时完全停用验证层。
验证层可以由任何人编写,但 Khronos 提供了一个名为 VK_LAYER_KHRONOS_validation
的标准集。请从 Android NDK 页面查看 Android 上的 Vulkan 验证层,以在您的应用中启用验证层。
渲染文档
RenderDoc 是另一个强大的开源工具,可让您捕获帧以进行检查和分析。这是一个非常强大的工具,图形编程人员已使用它来调试其渲染的场景。它在 Android 上很好地支持 Vulkan,但您必须将应用设置为可调试才能正常运行。
如需了解如何在 Android 应用中设置和使用 RenderDoc,请参阅如何在 Android 上使用 RenderDoc。
捕获 / 重放库
GFX 重构
GFXReStructure 是一个开源项目,提供用于捕获和重放应用执行的图形 API 调用的工具。稍后可重放录制的轨迹,以重建所捕获应用的图形特定行为。GFXRestruct 的一个主要优势是,让您可以在已发布的应用上使用它(在关闭 android:debuggable 的情况下)。
如需了解详情,请访问项目代码库。 如需了解 Android 上的 Vulkan 设置和使用信息,请参阅 GFXRestruct API Capture and Replay for Android。
请注意,轨迹文件不可移植,这意味着您无法在一台设备上捕获文件并在另一台设备(使用不同的操作系统版本、芯片组甚至驱动程序版本)上重放该文件。
性能分析器
Android GPU 检查器 (AGI)
Android GPU 检查器 (AGI) 是专为 Android 构建的图形性能分析器,其中包含系统配置文件和帧性能分析器。它提供概要性能分析信息,可帮助您了解游戏的性能概况并识别瓶颈。
如需下载 AGI 并了解如何使用,请访问 Android GPU 检查器网站。
Android Studio 性能分析器
Android Studio 性能分析器是一款用于分析应用性能的实用工具。不过,它并非专门针对图形性能分析。它包含 CPU 性能分析器、内存性能分析器、网络性能分析器、能耗性能分析器、功耗性能分析器和事件监控器。
如需详细了解如何设置和使用 Android Studio 性能分析器,请参阅分析应用性能部分。
OEM 性能分析器
本部分中的工具是 OEM 专用工具,可能不适用于在其他芯片上运行的设备。
移动版 ARM Performance Studio
Arm Performance Studio for Mobile 是 Arm Mobile Studio 的新名称。它是一套包含图形分析器和 Frame Advisor 的工具,可帮助您识别和修复 ARM GPU 上的性能问题。
如需了解详情,请参阅 Arm Performance Studio for Mobile 网站。
适用于 Mali GPU 的 ARM PerfDoc
PerfDoc 是一个 Vulkan 层,用于根据 ARM 的 Mali GPU 最佳实践验证应用。此后,它已合并到 VK_LAYER_KHRONOS_validation 中,且本质上是标准 Vulkan 验证层的一部分。
如需了解具体用法,请参阅使用验证层进行调试部分。
Qualcomm Snapdragon 性能分析器
Qualcomm Snapdragon Profiler 是 Qualcomm 为应用开发者开发的一款性能分析软件,用于分析 CPU、GPU、DSP、内存、电源、散热和网络性能,以识别其芯片组上的瓶颈。
如需了解详情,请查看 Qualcomm 开发者网络上的 Snapdragon 性能分析器。
三星 GPUWatch
三星的 GPUWatch 是一款用于观察三星设备上的 GPU 活动的工具。与其他工具不同,您可以直接从移动设备上使用此工具,因此,即使您无法访问其他主机,也可以立即检查应用性能,非常方便。
如需详细了解如何启用该功能,请参阅用户指南。
个人视频录像机
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 Frame Pacing 集成至 Vulkan 渲染程序
Android Frame Pacing 库(也称为 Swappy)可帮助 Vulkan 游戏实现流畅的渲染和正确的节奏,以使游戏渲染循环与操作系统的显示子系统和底层显示硬件保持同步。
正确的同步节奏可消除称为“撕裂”的视觉伪影,通过同步屏幕刷新和帧呈现来优化功耗,以及通过稳定帧速率来消除卡顿。如需详细了解帧同步的重要性,请查看 AGDK 的 Frame Pacing 库部分。
如需详细了解如何将帧同步集成到游戏中,请参阅将 Android Frame Pacing 集成到您的 Vulkan 渲染程序中。
通过 Vulkan 预旋转处理设备的屏幕方向
应用外的表面旋转处理可能并非免费。即使在一些配备专用显示处理器 (DPU) 的高端设备上,仍然可能产生可衡量的性能损失,而影响将取决于您的应用是受 CPU 限制还是受 GPU 限制。
与 OpenGL 相比,Vulkan 让开发者能够为设备指定更多关于渲染状态的信息。这类信息之一是设备屏幕方向及其与呈现 Surface 屏幕方向的关系。借助此功能,您可以实现预旋转,以便在 Android 上充分利用 Vulkan。
如需详细了解如何在 Vulkan 应用中高效处理设备旋转,请参阅通过 Vulkan 预旋转处理设备的屏幕方向和随附的演示应用。
通过降低精度进行优化
图形数据和着色器计算的数字格式会对游戏性能产生重大影响。现代 3D 图形中的大多数计算和数据都使用浮点数。Android 上的 Vulkan 使用大小为 32 或 16 位的浮点数。32 位浮点数通常称为单精度或全精度。虽然 Vulkan 中定义了 64 位浮点类型,但该类型不常见,因此不建议使用。
如需了解如何优化 Vulkan 应用以获得最佳算法性能,请参阅降低精度进行优化。