Vulkan

Android 7.0 添加了对 Vulkan 的支持。Vulkan 是用于高性能 3D 图形的低开销、跨平台 API。与 OpenGL ES 一样,Vulkan 提供多种用于在应用中创建高质量的实时图形的工具。Vulkan 的优势包括降低 CPU 开销以及支持 SPIR-V 二进制中间语言。

系统芯片 (SoC) 供应商(如 GPU 独立硬件供应商 (IHV))可以编写适用于 Android 的 Vulkan 驱动程序;原始设备制造商 (OEM) 只需为特定设备集成这些驱动程序即可。要详细了解 Vulkan 驱动程序如何与系统进行交互、应如何安装特定于 GPU 的工具以及特定于 Android 的要求,请参阅实现 Vulkan

应用开发者可以利用 Vulkan 来创建在 GPU 上执行命令的应用,大幅降低开销。此外,Vulkan 还可以更直接地映射到当前图形硬件中的功能,最大限度地降低驱动程序的出错概率,并减少开发者的测试时间(例如,排查 Vulkan 错误所需的时间更短)。

有关 Vulkan 的常规信息,请参阅 Vulkan 概览或查看下文中的资源列表。

Vulkan 组件

Vulkan 支持包含以下组件:

图 1:Vulkan 组件

  • Vulkan 验证层(在 Android NDK 中提供)。这是开发者在开发 Vulkan 应用期间使用的一组库。图形供应商提供的 Vulkan 运行时库和 Vulkan 驱动程序不包含使 Vulkan 运行时保持高效的运行时错误检查功能,而是使用验证库(仅在开发过程中)来查找应用在使用 Vulkan API 时出现的错误。Vulkan 验证库在开发过程中关联到应用并执行此错误检查。在找出所有 API 使用问题之后,该应用将不再需要包含这些库。
  • Vulkan 运行时(由 Android 提供)。这是一个原生库 ((libvulkan.so),提供称为 Vulkan 的新公共原生 API。大多数功能由 GPU 供应商提供的驱动程序实现;运行时会封装驱动程序、提供 API 拦截功能(针对调试和其他开发者工具)以及管理驱动程序与平台依赖项(如 BufferQueue)之间的交互。
  • Vulkan 驱动程序(由 SoC 提供)。将 Vulkan API 映射到特定于硬件的 GPU 命令以及与内核图形驱动程序的交互。

已修改的组件

为支持 Vulkan,Android 7.0 对以下现有图形组件进行了修改:

  • BufferQueue:Vulkan 运行时通过现有 ANativeWindow 接口与现有的 BufferQueue 组件进行交互。对 ANativeWindow 和 BufferQueue 进行了细微的修改(新枚举值和新方法),而架构没有任何变更。
  • Gralloc HAL:添加了一个新的可选接口,用于了解是否可将某种指定格式用于特定生产方/消费方组合,而无需实际分配缓冲区。

有关这些组件的详情,请参阅 BufferQueue 和 gralloc(有关 ANativeWindow 的详情,请参阅 EGLSurface 和 OpenGL ES)。

Vulkan API

Android 平台包括来自 Khronos Group 的 Vulkan API 规范Android 特定实现。Android 应用必须使用 Window 系统集成 (WSI) 扩展程序来输出其呈现内容。

资源

通过以下资源详细了解 Vulkan:

  • 位于 platform/frameworks/native/vulkanVulkan 加载程序 (libvulkan.so):包含 Android 的 Vulkan 加载程序,以及一些对平台开发者十分有用的 Vulkan 相关工具。
  • Vulkan 实现人员指南:旨在帮助 GPU IHV 编写适用于 Android 的 Vulkan 驱动程序,以及指导原始设备制造商 (OEM) 为特定设备集成这些驱动程序。该指南介绍了 Vulkan 驱动程序如何与系统进行交互、应如何安装特定于 GPU 的工具,以及特定于 Android 的要求。
  • Vulkan Graphics API 指南:介绍了如何开始在 Android 应用中使用 Vulkan、Android 平台上的 Vulkan 设计指南详情、如何使用 Vulkan 的着色程序编译器,以及如何使用验证层来帮助确保使用 Vulkan 的应用的稳定性。
  • Vulkan 新闻:包含事件、补丁程序、教程以及更多与 Vulkan 相关的新闻报道。