开源图形驱动在OpenHarmony上的使用和落地

news2024/11/18 19:55:49

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

演讲嘉宾 | 黄   然

回顾整理 | 廖   涛

排版校对 | 李萍萍

嘉宾简介

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

内容来源

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

视频回顾

视频链接

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

正 文 内 容

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

01OpenHarmony图形驱动面临的挑战

图形驱动技术的演进始终跟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技术干货内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/956168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索医疗行业的低代码平台:了解适用于医疗领域的最佳选择

数字化的进程已经渗透到各行各业,包括医疗行业,很多医院也开始实现数字化管理,依托低代码平台。 医疗管理涉及从组织员工到管理患者,再到保存医疗机构资源等各个方面。医疗保健管理的范围因机构规模(当地诊所或专科医院)而异。通…

字节跳动推出AI对话工具“豆包”:免费用

我是卢松松,点点上面的头像,欢迎关注我哦! 听说松松客服的小马爆料了一个消息:字节跳动推出了一个新的AI大模型对话工具,叫做“豆包”。竟然一查发现,早在8月18号就已经上线了呢。原来这个“豆包”其实是之…

实训笔记8.31

实训笔记8.31 8.31笔记一、项目开发流程一共分为七个阶段1.1 数据产生阶段1.2 数据采集存储阶段1.3 数据清洗预处理阶段1.4 数据统计分析阶段1.5 数据迁移导出阶段1.6 数据可视化阶段 二、项目数据清洗预处理的实现2.1 清洗预处理规则2.2 代码实现 三、项目的数据统计分析阶段3…

NoSQL基础

零、文章目录 NoSQL基础 1、为什么要用NoSQL (1)单机单数据库时代 网络不发达的时代,一个系统由一台机器,一个数据库来实现,只要流量上来,首先性能瓶颈就是数据库IO。 (2)Cache数…

C语言指针进阶(3)

这节我们来总结一下指针和数组面试题。 在这节我们主要用到这样几个知识点: 1.数组名是数组首元素的地址。 但是有两个例外: 2.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。 3.&…

Wazuh部署之单节点部署

Linux进行Wazuh单机部署 1. Wazuh索引器安装2. Wazuh服务器安装3. Wazuh仪表盘安装4. 踩坑记录 1. Wazuh索引器安装 1.1 证书创建 生成SSL证书 下载wazuh-certs-tool.sh脚本和config.yml配置文件。这将创建证书,对Wazuh中心组件之间的通信进行加密。 curl -sO h…

MySQL高阶查询语句

目录 一、常用查询 1、按关键字排序 1.1 升序排序 1.2 降序排序 1.3 结合where进项条件过滤再排序 1.4 多条件排序 2、区间判断及查询不重复记录 2.1 and/or(且/或) 2.2 嵌套 /多条件 2.3 distinct 查询不重复记录 3、对结果进行分组 4、限…

基于YOLOV8模型和CCPD数据集的车牌目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要:基于YOLOV8模型和CCPD数据集的车牌目标检测系统可用于日常生活中检测与定位车牌目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算…

Day51|leetcode 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

leetcode 309.最佳买卖股票时机含冷冻期 题目链接:309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode) 视频链接:动态规划来决定最佳时机,这次有冷冻期!| LeetCode:309.买卖股票的最佳时机含冷冻…

对比通达信主副图指标,排序指标的显示方式

**1.新建指标的注意事项:**打开指标公式编辑器,公式名称是要必填的、指标源码里面有参数要带上参数,不然会指报错、画线方法(主图显示,还是幅图显示,以及是否要叠加k线,主图替换等等&#xff09…

七大基本判断问题,你都get到了吗

Hello,这里是mouche,当然你也可以叫我某车,反正大家都爱这么叫😁最近看到一些判断就想记下来,这一篇算附带自己的思考和整理的整理型的博客吧,接下去如果有想到新的也会在这一篇进行整理如果有错误的可以在评论区提醒我…

圆圈加数字的css

方式一 .circle { width: 50px; height: 50px; border-radius: 50%; background-color: #f00; color: #fff; text-align: center; line-height: 50px; } .circle::before { content: attr(data-number); display: block; } <div class"circle" data-number"…

Hibernate(Spring Data)抓取策略

文章目录 示例代码放到最后&#xff0c;使用的是Springboot 项目1. 简介2. Hibernate抓取策略分类2.1 即时加载&#xff08;Eager Loading&#xff09;2.2 延迟加载&#xff08;Lazy Loading&#xff09;2.3 子查询加载&#xff08;Subselect Loading&#xff09;2.4 基于批处理…

【100天精通python】Day48:python Web开发_WSGI接口与使用

目录 1 WSGI接口 1.1 CGI 简介 1.2 WSGI 简介 1.3 定义 WSGI 接口 1.3.1 应用程序&#xff08;Application&#xff09; 1.3.2 服务器&#xff08;Server&#xff09; 1.4 WSGI 接口的使用示例 1.5 WSGI接口的优势 1 WSGI接口 上一节实现了静态服务器&#xff0c;但是当…

Cell子刊:肠道菌菌株之间的“明争暗斗”

抗生素耐药性质粒可以在肠道中不同肠杆菌科之间传播。本期经典文献解读&#xff0c;为大家带来发表在Cell Host and Microbe上的研究成果&#xff0c;探索具有相似营养需求的肠杆菌科沙门氏菌群如何在同一肠道中共同繁殖及质粒转移。 期刊&#xff1a;Cell Host Microbe …

八、MySQL(DML)如何修改表中的数据?

1、修改表数据 &#xff08;1&#xff09;基础语法&#xff1a; update 表名 SET 字段名1数值1,字段名2数值2&#xff0c;…… [where 条件]; &#xff08;2&#xff09; 操作实例&#xff1a; 第一步&#xff1a; 先准备一张表 insert into things values (10086,18,0x12…

spark支持深度学习批量推理

背景 在数据量较大的业务场景中&#xff0c;spark在数据处理、传统机器学习训练、 深度学习相关业务&#xff0c;能取得较明显的效率提升。 本篇围绕spark大数据背景下的推理&#xff0c;介绍一些优雅的使用方式。 spark适用场景 大数据量自定义方法处理、类sql处理传统机器…

掌握Kubernetes API:释放容器编排的潜力

Kubernetes API使用 1、 API是什么&#xff1f; API&#xff08;Application Programming Interface&#xff0c;应用程序接口&#xff09;&#xff1a; 是一些预先定义的接口&#xff08;如函数、HTTP接口&#xff09;&#xff0c;或指软件系统不同组成部分衔接的约定。 用来…

分类算法系列③:模型选择与调优 (Facebook签到位置预测)

目录 模型选择与调优 1、介绍 模型选择&#xff08;Model Selection&#xff09;&#xff1a; 调优&#xff08;Hyperparameter Tuning&#xff09;&#xff1a; 本章重点 2、交叉验证 介绍 为什么需要交叉验证 数据处理 3、⭐超参数搜索-网格搜索(Grid Search) 介绍…

合宙Air724UG LuatOS-Air LVGL API控件--图表 (Chart)

图表 (Chart) 一幅图胜过一千个字&#xff0c;通过图表展示出的数据内容能让用户更快速有效的了解数据特征。 代码示例 – 创建图表 chart lvgl.chart_create(lvgl.scr_act(), nil) lvgl.obj_set_size(chart, 200, 150) lvgl.obj_align(chart, nil, lvgl.ALIGN_CENTER, 0, …