开源图形驱动在OpenHarmony上的使用和落地
本文转载自 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上的使用和落地的更多相关文章
- 如何为编程爱好者设计一款好玩的智能硬件(七)——LCD1602点阵字符型液晶显示模块驱动封装(上)
当前进展: 一.我的构想:如何为编程爱好者设计一款好玩的智能硬件(一)——即插即用.积木化.功能重组的智能硬件模块构想 二.别人家的孩子:如何为编程爱好者设计一款好玩的智能硬件(二)——别人是如何设计 ...
- 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架
20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语 ...
- flexpaper 开源轻量级的在浏览器上显示各种文档的组件
FlexPaper是一个开源轻量级的在浏览器上显示各种文档的组件,被设计用来与PDF2SWF一起使用, 使在Flex中显示PDF成为可能,而这个过程并无需PDF软件环境的支持.它可以被当做Flex的库 ...
- Thinkpad 笔记本 装win7 64 位操作系统热键驱动装不上问题解决!
Thinkpad 笔记本 装win7 64 位操作系统热键驱动装不上问题解决! 一般牛人的解释如下: 问题终于搞定.是因为需要手工建%PROGRAMFILES%\Lenovo\Hotkey目录.这个写 ...
- epson 630打印机驱动安装不上
1号机: 连接到630打印机的电脑 2号机: 通过网络连接到630打印机 *现状: 直接将数据线插在2号机上安装打印机时,驱动安装不上,设备管理器中有“!”号 *原因: 可能是已有一台通过网络连接到1 ...
- 记manjaro图形驱动删除后的一次补救
#一.前言 众所周知,NVIDIA的闭源驱动在Linux上的兼容性不是很好,再加上我不玩游戏,于是我就想卸载独显只留核显.我以为我装了独显和核显两种驱动,原本想直接删除独显驱动,没想到删除的是bumb ...
- 可跨平台C++开源图形图像框架:openFrameworks
博客参考:https://www.hahack.com/codes/openframeworks-intro/#%E4%BB%80%E4%B9%88%E6%98%AF-openframeworks 和 ...
- Win10 驱动装不上,提示:Windows 无法验证此设备所需的驱动程序的数字签名。该值受安全引导策略保护,无法进行修改或删除。
Windows 无法验证此设备所需的驱动程序的数字签名.某软件或硬件最近有所更改,可能安装了签名错误或损毁的文件,或者安装的文件可能是来路不明的恶意软件.(代码52) 最近换了新主板,升级了Windo ...
- square开源vim,tmux配置在linux上使用
首先安装需要的软件 apt-get install vim ack-grep git tmux gnome-terminal ctags xclip silversearcher-ag 这里tmux需 ...
- 自制单片机之十六……将文字或图形转成LCD上使用的C51字模数据
这一讲说说如何用取模软件将图形转成数据吧,有很多人反复问我这个问题,我就再罗嗦下吧! 取字模的软件有很多款.有的只能将文字转成字模数据,有的既可将文本文字转字模也能将图片转成点阵数据.在这里我就介绍一 ...
随机推荐
- error接口
// 实际上它是interface类型,这个类型有一个返回错误信息的单一方法: type error interface{ Error() string } 创建一个error最简单的方法就是调用er ...
- 现代 CSS 解决方案:accent-color 强调色
accent-color 是从 Chrome 93 开始被得到支持的一个不算太新属性.之前一直没有好好介绍一下这个属性.直到最近在给一些系统整体切换主题色的时候,更深入的了解了一下这个属性. 简单而言 ...
- 用容器部署Nexus 3作为Nuget和Docker的仓库
1.准备docker-compose的配置文件 version: '3' services: nexus: image: 'sonatype/nexus3:3.42.0' container_name ...
- Postman/Jmeter工具实现接口测试,为什么还要用代码来实现接口自动化测试?
这种工具包括一些开源框架最大缺点就是不够灵活,如果是单接口的测试还行,但是有的项目接口比较庞大和负责,这种情况下就不大适用工具(工具适用于小型项目,代码适用于中大型项目) 主要有以下几个原因: 1敏捷 ...
- Java //内存解析
- element_ui实现表格内套表单,点击可以编辑
<template> <div class="app-container"> <el-table :data="list" str ...
- 摆脱鼠标系列 - Alt + N 快速切换vscode多个项目 - HotKeyP
摆脱鼠标系列 - Alt + N 快速切换vscode多个项目 用的软件是 HotKeyP 打开软件选择vscode vscode里面的 project那个插件也很好,但是需要打开vscode以后,这 ...
- 基于DSP的设备振动信号的采集和处理模块研发总结
前记 在能源领域,由于很多地方都是无人值守,设备故障检测是一个必须面对的问题.笔者通过最近几个行业案例了解到,由于很多设备发生故障时候会产生特定频谱的声音,所以该行业对振动监测的需求特别强烈,由于涉 ...
- day07-JavaScript04
JavaScript04 11.DOM02 11.3HTML-DOM文档说明 11.3.1基本介绍 在HTML DOM(文档对象模型)中,每个部分都是节点: 1)文档本身是文档节点 2)所有HTML元 ...
- 深入解析C#中的第三方库NPOI:Excel和Word文件处理的利器
一.引言 在.NET开发中,操作Office文档(特别是Excel和Word)是一项常见的需求.然而,在服务器端或无Microsoft Office环境的场景下,直接使用Office Interop可 ...