关于openharmony:开源图形驱动在OpenHarmony上的使用和落地

89次阅读

共计 2909 个字符,预计需要花费 8 分钟才能阅读完成。

本文转载自 OpenHarmony TSC 官网微信公众号《峰会回顾第 10 期 | 开源图形驱动在 OpenHarmony 上的应用和落地》

演讲嘉宾 | 黄   然
回顾整顿 | 廖   涛
排版校对 | 李萍萍

嘉宾简介
黄然,华为终端 BG 软件部资深图形技术专家,华为终端游戏规范、工具和剖析创始人,GPU Turbo 黑科技核心成员,在 OpenHarmony 社区上负责开源图形驱动 SIG、游戏 SIG、兼容性工作组组长等职务。

内容起源
第一届凋谢原子开源基金会 OpenHarmony 技术峰会——OS 内核及视窗分论坛

视频回顾
视频链接
https://www.bilibili.com/video/BV11g4y1572L/?spm_id_from=333.999.0.0

正 文 内 容
图形驱动也是一种软件程序,它串联了操作系统和应用程序与计算机图形硬件进行通信和交互,是施展硬件性能为操作系统提供高质量图形显示的关键环节。OpenHarmony 在开源图形驱动的应用和落地上做了哪些工作呢?OpenHarmony 游戏 SIG 组、图形驱动 SIG 组组长、华为终端图形资深技术专家黄然在第一届 OpenHarmony 技术峰会上给大家带来了几点分享。

01►OpenHarmony 图形驱动面临的挑战
图形驱动技术的演进始终跟 GPU 硬件的倒退相干。1975 年至今,随着 GPU 硬件由晚期的业余畛域高端图形工作站倒退到台式机 GPU 显卡,再到现在的挪动终端、云和服务器 GPU 显卡,图形驱动 API 也由 OpenGL 演进到了 DirectX。

目前,图形驱动畛域的支流厂商都对本身的外围代码闭源,Arm Mali、Qualcomm Adreno 和 Nvidia 等开源图形驱动也并没有特地“Open”。

随着开源静止的衰亡和胜利,AMD 和英特尔等公司的图形驱动开源建设了良好的生态,也获得了不错的成果。对 OpenHarmony 这样一个齐全开源的操作系统来说,图形开源驱动有很好的借鉴和学习意义,当然也存在着诸多挑战。把握开源图形驱动有多难呢?首先图形驱动的开发和钻研须要具备扎实的软硬件开发功底,且因为开源图形驱动在国内的倒退很慢,少有开发者专门从事该项工作,不足技术交换和实践经验分享。下图为黄然老师后期在开源驱动畛域学习和研究所做的笔记:

此外,对于 OpenHarmony 来说,以后大部分的小厂商无奈取得闭源 GPU 厂商的反对,导致视觉晦涩体验较差,限度了十分多 OpenHarmony 产品的商用,在肯定水平上也妨碍了 OpenHarmony 生态的推广。

02►开源图形驱动架构介绍
因为从驱动角度,OpenHarmony 富设施的内核是基于 Linux 的,故首先介绍下 Linux 开源驱动的整体架构。整个驱动的架构能够分为 2D 和 3D 两个局部,2D 局部的比拟老的框架是基于 X11,而比拟新的框架是基于 Wayland。

3D 的局部驱动通过 mesa,将 OpenGLES 或者 Vulkan 的 API 以及 shader 转化为硬件的 ISA。而 2D 的 DDX 驱动通过 glamor 也能够走到 mesa 层,这样防止了 2D 和 3D 分岔的驱动路线(过来已经是分岔的,2D 走 DDX)。

整体的驱动是 UMS+KMS 构造,UMS 负责用户层驱动的解析,而 KMS 用来做显示和硬件渲染,通过 libdrm 和 DRM 来造成 UMS 到 KMS 的传递。

在图形驱动中有几个要害概念:

一是 LLVM、TGSI 和 Gallium。TGSI 是一种用于形容着色器的两头语言,是所有驱动程序应用的惟一两头示意,所有的 Shader 都会转化为两头的 IR。而 Gallium 是 LLVM 的后端,可能基于不同硬件进行不同硬件的 ISA 绘制,如图中的 radeonsi 就是 AMD 的 radeon 的后端渲染。

二是 ISA。ISA 由控制流(CF)指令、ALU 指令、通过纹理缓存提取的指令和通过顶点缓存提取的指令组成,其中控制流程序通过应用控制流指令(条件跳转、循环和子例程)来领导程序子句的流,包含内存调配指令和其余指令,这些指令能够指定顶点和几何程序何时实现相干操作,相似 CPU 的汇编语言。

三是 Fence。Fence 可能让 GPU 和 CPU 协调工作,进步图像显示的速度。通过 Fence 机制产生的 GPU 的事件,可能保障用户态程序下发的渲染命令被程序执行,从而保障下层应用程序渲染相干数据的一致性。

03►开源图形驱动在 OpenHarmony 上的移植
OpenHarmony 驱动框架反对多种接入模式,可能实现南向硬件的疾速部署。其中,显示框架反对 Display_Gralloc、Display_Gfx 和 Device HDI 的 3 类南向接口,其中,Display_Gralloc 负责内存调配;Display_Gfx 负责图形硬件 2D 绘制,能够用于离线合成;Device HDI 负责显示设施个性治理,包含屏幕显示,在线及离线硬件合成,硬件 Vsync,显示设施色调治理等。在开发板能力反对方面,RK3568 和 HI3516dv300 反对 DRM 内存调配、DRM 送显以及硬件离线合成,HI3751V350 反对反对 FbDev 和 DmaBuf-Heap、反对 FbDev 显示,不反对硬件离线合成。

针对上述 OpenHarmony 驱动框架的整体状况,开源 GPU 驱动的适配工作次要分为以下 3 个阶段进行:(1)验证内核 panfrost 驱动和用户态 panfrost 驱动能够失常工作;(2)开源 GPU 驱动适配 OpenHarmony(Flutter+weston)旧框架;(3)开源 GPU 驱动适配 OpenHarmony(RenderService)新框架。目前,越来越多的趣味开发者参加到了 OpenHarmony 的开源图形驱动适配和移植的工作中,近期有一些用户曾经胜利将高通开源驱动移植到挪动终端上,使其可能运行一些 2D 和 3D 的利用。这意味着开源驱动在 OpenHarmony 上生态正在朝着良好的方向倒退。

从 GLmark2 跑分状况来看,OpenHarmony 开源驱动在 2D 的纹理解决等方面体现比闭源驱动优异,在要害的着色和暗影、地形等偏 3D 的方面体现还较差。即便如此,在 2D 和 3D 开源图形驱动上的性能晋升曾经足以满足绝大多数产品的需要。

当然,在这个过程中,还有一些搭档参考以后的工作,把高通的 freedreno 开源驱动也实现了移植,并且能够在小米等手机上能够运行和应用开源驱动,如下:

将来咱们还会在 X86 根底的 AMD 以及 Intel GPU 上使能开源驱动,服务于 OpenHamrony,也心愿更多的小伙伴能够一起退出社区微信群 SIG-OpenGfxDrv 共建图形驱动,对应的 gitee 链接为:https://gitee.com/openharmony/third_party_mesa3d

04►总结 & 瞻望
真正想做好图形竞争力,就要理解 GPU 的工作机制和图形驱动原理,OpenHarmony 社区正是一个交换和学习的良好平台;OpenHarmony 开源图形驱动是将来趋势,也会是历史最终抉择,心愿有越来越多的趣味开发者可能参加到开源图形驱动的适配和移植工作中来,共建 OpenHarmony 生态。

点击关注理解更多 OpenHarmony TSC 技术干货内容

正文完
 0