工具和高级功能

调试器

使用验证层进行调试

Vulkan 旨在实现高性能和低驱动程序开销。为此,它默认只包含非常有限的错误检查和调试功能。如果您操作不当,驱动程序通常会崩溃而不是返回错误代码,更糟糕的是,它可能在您的显卡上正常工作,但在其他显卡上完全失效。

为了在开发过程中实现广泛检查,Vulkan 提供了验证层,这些代码片段可以插入到 API 和图形驱动程序之间,以执行诸如对函数参数进行额外检查和跟踪内存管理问题等操作。您可以在开发期间启用验证层,并在发布应用程序时将其完全禁用,而不会产生任何开销。

验证层可以由任何人编写,但 Khronos 提供了一组单一的标准集,名为 VK_LAYER_KHRONOS_validation。查看 Android NDK 页面上的Android 上的 Vulkan 验证层,以在您的应用程序中启用验证层。

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 Profiler

Android Studio Profiler 是一个用于分析应用性能的实用工具。然而,它并非专门针对图形性能分析。它包含 CPU Profiler、Memory Profiler、Network Profiler、Energy Profiler、Power Profiler 和 Event Monitor。

有关如何设置和使用 Android Studio Profiler 的更多信息,请查看分析您的应用性能部分。

OEM 性能分析器

本节中的工具是 OEM 特定的,可能无法在运行其他芯片的设备上运行。

ARM Performance Studio for Mobile

Arm Performance Studio for Mobile 是 Arm Mobile Studio 的新名称。它是一套工具,包括图形分析器帧顾问,可帮助您识别和修复 ARM GPU 上的性能问题。

有关更多信息,请查看Arm Performance Studio for Mobile 网站。

ARM PerfDoc for Mali GPUs

PerfDoc 是一个 Vulkan 层,用于根据 ARM 的 Mali GPU 最佳实践验证应用程序。它现已合并到 VK_LAYER_KHRONOS_validation 中,并已成为标准 Vulkan 验证层的一部分。

有关如何使用它的信息,请查看使用验证层进行调试部分。

Qualcomm Snapdragon Profiler

Qualcomm Snapdragon Profiler 是由 Qualcomm 开发的性能分析软件,供应用程序开发者分析 CPU、GPU、DSP、内存、功耗、散热和网络性能,以识别其芯片组上的瓶颈。

有关更多信息,请查看 Qualcomm 开发者网络上的 Snapdragon Profiler

Samsung GPUWatch

三星的 GPUWatch 是一种用于观察三星设备上 GPU 活动的工具。与其他工具不同,您可以直接从移动设备使用此工具,因此即使无法访问另一台主机计算机,也可以非常方便地立即检查应用程序性能。

有关如何启用它的更多信息,请查看用户指南

PVRTune

Imagination Technologies 的 PVRTune 使开发者能够实时分析 PowerVR 硬件上的应用程序,并提供各种计数器和指标。它还允许保存会话以进行进一步的底层分析并检测性能瓶颈。

有关如何使用 PVRTune 的更多信息,请查看手册

迁移工具

将着色器从 GLSL 转换为 SPIR-V

Vulkan API 要求以 SPIR-V 二进制中间格式提供着色器程序。此约定与 OpenGL ES 不同,在 OpenGL ES 中,您可以提交以 OpenGL Shading Language (GLSL) 编写的源代码作为文本字符串。

NDK r12 及更高版本包含一个运行时库,用于将 GLSL 着色器编译为可由 Vulkan 使用的 SPIR-V。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 限制。

与 OpenGL 相比,Vulkan 为开发者提供了向设备指定更多渲染状态信息的能力。其中一项信息是**设备方向**及其与**渲染曲面方向**的关系。此功能可让您实施预旋转,以充分利用 Android 上的 Vulkan。

有关如何在 Vulkan 应用程序上高效处理设备旋转的更多信息,请查看使用 Vulkan 预旋转处理设备方向以及随附的演示应用程序

通过降低精度进行优化

图形数据和着色器计算的数值格式会对游戏的性能产生重大影响。现代 3D 图形中的大多数计算和数据都使用浮点数。Android 上的 Vulkan 使用 32 位或 16 位大小的浮点数。32 位浮点数通常称为单精度或全精度。尽管 Vulkan 中定义了 64 位浮点类型,但它不常用,也不建议使用。

查看通过降低精度进行优化,了解如何优化您的 Vulkan 应用程序以在算术方面获得最佳性能。