架构5–Vulkan

by admin on 2020年4月17日

Google 最近发布并开源了
GAPID,这是一个工具合集,允许检查、调整和重复从应用程序到 Graphics
驱动之间的调用。

转自:

GAPID 采用 Go 语言编写,目前仍在开发中,但已经可以用于调试许多 Android
OpenGL ES 和 Vulkan 应用。

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
概览或查看下文中的资源列表。

GAPID 由以下子工具/组件构成:

Vulkan 组件

Vulkan 支持包含以下组件:

图片 1

                                                                  图
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)
扩展程序来输出其呈现内容。

  • gapii图形
    API 拦截器
    —— 位于应用程序/游戏和 GPU
    驱动程序之间的一层,记录所有调用和内存访问。

  • gapis图形API服务器 ——  分析报告不正确的捕获流 API
    使用情况,处理在各种目标设备上重复过程的数据,并向客户端提供 RPC
    接口。

  • gapir图像 API
    Replay 守护 
    ——  一个基于堆栈的
    VM,用于回放捕获文件,模仿原始应用程序/游戏对 GPU
    驱动程序的调用。支持读取任何缓冲区/帧缓冲区,并提供分析功能。

  • gapic图形
    API 客户端 
    ——  
    前端用户界面应用。提供捕获数据、内存、资源和帧缓冲区内容的可视化检查。

  • gapil图形
    API 语言
    —— 一种新的特定领域语言,用于全面描述图形
    API。拦截器、服务器和重复系统的绝大部分都是依赖它结合模板生成的。

资源

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

位于platform/frameworks/native/vulkan的Vulkan
加载程序(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 相关的新闻报道。

Except as otherwise noted, the content of this page is licensed under
theCreative Commons Attribution 3.0
License,
and code samples are licensed under theApache 2.0
License.
For details, see ourSite
Policies.
Java is a registered trademark of Oracle and/or its affiliates.

Last updated 九月 6, 2017.

图片 2

GAPID 支持在 Windows、Linux 和 MacOS 上运行,Google 还计划在支持这些 API
的主机上跟踪 OpenGLES 和 Vulkan 应用。

(文/开源中国)    

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图