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

演讲嘉宾 | 黄   然

回顾整理 | 廖   涛

排版校对 | 李萍萍

嘉宾简介

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

内容来源

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

视频回顾

视频链接

峰会回顾第10期 | 开源图形驱动在OpenHarmony上的使用和落地(黄然)_哔哩哔哩_bilibili

正 文 内 容

图形驱动也是一种软件程序,它串联了操作系统和应用程序与计算机图形硬件进行通信和交互,是发挥硬件性能为操作系统提供高质量图形显示的关键环节。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技术干货内容

开源图形驱动在OpenHarmony上的使用和落地的更多相关文章

  1. 如何为编程爱好者设计一款好玩的智能硬件(七)——LCD1602点阵字符型液晶显示模块驱动封装(上)

    当前进展: 一.我的构想:如何为编程爱好者设计一款好玩的智能硬件(一)——即插即用.积木化.功能重组的智能硬件模块构想 二.别人家的孩子:如何为编程爱好者设计一款好玩的智能硬件(二)——别人是如何设计 ...

  2. 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架

    20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语 ...

  3. flexpaper 开源轻量级的在浏览器上显示各种文档的组件

    FlexPaper是一个开源轻量级的在浏览器上显示各种文档的组件,被设计用来与PDF2SWF一起使用, 使在Flex中显示PDF成为可能,而这个过程并无需PDF软件环境的支持.它可以被当做Flex的库 ...

  4. Thinkpad 笔记本 装win7 64 位操作系统热键驱动装不上问题解决!

    Thinkpad 笔记本 装win7 64 位操作系统热键驱动装不上问题解决! 一般牛人的解释如下: 问题终于搞定.是因为需要手工建%PROGRAMFILES%\Lenovo\Hotkey目录.这个写 ...

  5. epson 630打印机驱动安装不上

    1号机: 连接到630打印机的电脑 2号机: 通过网络连接到630打印机 *现状: 直接将数据线插在2号机上安装打印机时,驱动安装不上,设备管理器中有“!”号 *原因: 可能是已有一台通过网络连接到1 ...

  6. 记manjaro图形驱动删除后的一次补救

    #一.前言 众所周知,NVIDIA的闭源驱动在Linux上的兼容性不是很好,再加上我不玩游戏,于是我就想卸载独显只留核显.我以为我装了独显和核显两种驱动,原本想直接删除独显驱动,没想到删除的是bumb ...

  7. 可跨平台C++开源图形图像框架:openFrameworks

    博客参考:https://www.hahack.com/codes/openframeworks-intro/#%E4%BB%80%E4%B9%88%E6%98%AF-openframeworks 和 ...

  8. Win10 驱动装不上,提示:Windows 无法验证此设备所需的驱动程序的数字签名。该值受安全引导策略保护,无法进行修改或删除。

    Windows 无法验证此设备所需的驱动程序的数字签名.某软件或硬件最近有所更改,可能安装了签名错误或损毁的文件,或者安装的文件可能是来路不明的恶意软件.(代码52) 最近换了新主板,升级了Windo ...

  9. square开源vim,tmux配置在linux上使用

    首先安装需要的软件 apt-get install vim ack-grep git tmux gnome-terminal ctags xclip silversearcher-ag 这里tmux需 ...

  10. 自制单片机之十六……将文字或图形转成LCD上使用的C51字模数据

    这一讲说说如何用取模软件将图形转成数据吧,有很多人反复问我这个问题,我就再罗嗦下吧! 取字模的软件有很多款.有的只能将文字转成字模数据,有的既可将文本文字转字模也能将图片转成点阵数据.在这里我就介绍一 ...

随机推荐

  1. python Apscheduler持久化

    from pytz import utc from apscheduler.schedulers.background import BackgroundScheduler from apschedu ...

  2. 【LeetCode字符串#01】反转字符串I+II

    反转字符串 力扣题目链接(opens new window) 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地 ...

  3. golang中关于map的value类型定义为函数类型时(方法值)的一点点思考

    文章的内容仅仅是自己关于map的value类型定义为函数类型时的一点点思考,如有不对的地方,请不吝赐教. 学习过后才知道叫做 方法值. 1.起因 最近在看老项目代码时,看到了一段类似于下面的定义,最开 ...

  4. Vue源码学习(十):关于dep和watcher使用的一些思考

    好家伙,   前面想了好久,都没想明白为什么要dep和watcher打配合才能实现数据-视图同步 为什么要多一个依赖管理这样的东西 给每个数据绑个watcher(xxfunction),然后,数据变了 ...

  5. 【Azure 应用服务】在创建App Service时,遇见“No available instances to satisfy this request. App Service is attempting to increase capacity.”错误

    问题描述 在创建新的App Service,遇见了资源不满足当前需求的提示.详细消息为: "Code": "Conflict","Message&qu ...

  6. 【Azure 应用服务】App Service for Container中配置与ACR(Azure Container Registry)的RABC权限

    问题描述 在使用App Service for container时,在从ACR(Azure Container Registry)中获取应用的镜像时,需要使用对应的权限.默认情况为在ACR中启用Ad ...

  7. VC-MFC(1) 随笔笔记+连接数据库

    1 数据库语句: 2 CREATE DATABASE---创建新数据库 3 ALTER DATABASE-----修改数据库 4 CREATE TABLE ---- -创建新表 5 ALTER TAB ...

  8. Review Book for GEE(Graduate Entrance Examination)

    English is made up of phrases and idioms, in the case of both written and spoken usage. When learnin ...

  9. day02-Spring基本介绍02

    Spring基本介绍02 5.简单模拟Spring基于XML配置的程序 5.1需求说明 自己写一个简单的Spring容器,通过读取beans.xml,获取第一个Javabean:Monster的对象, ...

  10. linux命令行下使用代理

    有两种方法: 1.curl -x <proxy_ip>:<proxy_port> <real_website> 举例:curl -x 12.99.109.52:80 ...