【架构分析】MESA (EGL/GLES)架构分析
目录
背景介绍
MESA 软件架构
非-Gallium3D 架构
Gallium3D 架构
Intel i915 Backend
VirtIO-GPU Backend
核心数据结构层次关系
MESA 核心函数调用时序
非Gallium3D架构
eglGetDisplay调用时序
eglInitialize调用时序
eglCreateContext调用时序
eglCreateWindowSurface调用时序
eglMakeCurrent调用时序
eglSwapBuffers调用时序
glFlush调用时序
Gallium3D架构
Gallium3D-eglInitialize 时序图
Gallium3D- eglCreateContext时序图
Gallium3D- glFlush时序图
背景介绍
GPU的user space driver是GPU厂商的技术核心模块,迫于kernel的GPL license 要求kernel的GPU driver必须开源,所以GPU 厂商将GPU的核心技术代码实现在user space的EGL和GLES相关库并以binary的形式发布保护核心IP.
MESA 是一个开源的graphics库,它提供了一个EGL和GLES 的user space driver的参考实现,但MESA不限于支持EGL和GLES,参考https://www.mesa3d.org可以看到它几乎支持所有GPU上的API
本文基于MESA 18.0.5版本对它EGL/GLES的实现进行了架构和关键时序的分析,MESA 代码下载:https://archive.mesa3d.org//
MESA 软件架构
MESA 可以分为非-Gallium3D 与 Gallium3D两种架构
非-Gallium3D 架构
![](/assets/blank.gif)
早期的MESA架构中,vendor DRI driver(比如上图的intel i915 显卡驱动)和mesa 库耦合比较紧密,跨平台移植较为困难
Gallium3D 架构
Intel i915 Backend
![](/assets/blank.gif)
MESA演进为Gallium3D架构后,可以通过Gallium模块+不同平台相关的Backend实现,进一步分割了Vendor HW driver 模块以及与平台窗口系统有关的WinSys 模块(软件架构设计模式仁者见仁,是不是搞的更复杂了。。。)
VirtIO-GPU Backend
![](/assets/blank.gif)
Gallium3D架构由于backend模块独立(即Vendor HW driver 模块以及与平台窗口系统有关的WinSys 模块独立),所以Gallium3D可以选择不同的backend,比如上图某个Hypervisor虚拟机的方案商可以通过采用MESA-Gallium3D + virtIO-GPU backend在Guest VM中实现虚拟GPU了功能,在Host VM中通过libvirglrenderer 来替Guest VM的应用响应3D GPU的绘图命令
核心数据结构层次关系
![](/assets/blank.gif)
MESA的核心数据结构很多很复杂,上图列举了一些核心数据结构主要强调了它们的层次关系,即上层使用下层的抽象结构(比如 函数指针调用),下层为上次做具体的实现(比如具体的函数实现),虽然是C代码但设计理念基本上与C++的继承类似
MESA 核心函数调用时序
非Gallium3D架构
eglGetDisplay调用时序
![](/assets/blank.gif)
eglInitialize调用时序
![](/assets/blank.gif)
eglCreateContext调用时序
![](/assets/blank.gif)
eglCreateWindowSurface调用时序
![](/assets/blank.gif)
eglMakeCurrent调用时序
![](/assets/blank.gif)
eglSwapBuffers调用时序
![](/assets/blank.gif)
glFlush调用时序
![](/assets/blank.gif)
Gallium3D架构
Gallium3D-eglInitialize 时序图
![](/assets/blank.gif)
Gallium3D- eglCreateContext时序图
![](/assets/blank.gif)
Gallium3D- glFlush时序图
![](/assets/blank.gif)
从上面的几个Gallium3D的时序图可以看出,对比非Gallium3D架构,Vendor和平台相关的实现移到了HW Vendor Driver和WinSys 模块的具体实现中,libmesa_dri_drivers 面向Gallium3D提供的接口实现EGL和GLES的调用,实现了API OS HW的三层分割
【架构分析】MESA (EGL/GLES)架构分析相关推荐
- 分布式实时日志分析解决方案ELK部署架构
分布式实时日志分析解决方案ELK部署架构 参考文章: (1)分布式实时日志分析解决方案ELK部署架构 (2)https://www.cnblogs.com/zhangjianbin/p/7965867 ...
- 大型网站技术架构:核心原理与案例分析阅读笔记二
大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...
- 《大型网站技术架构:核心原理与案例分析》笔记05
<大型网站技术架构:核心原理与案例分析>笔记05 网站的课扩展性架构: 扩展性:指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力.表现在系统基础设施稳定不需要经常变更,应用之间 ...
- 一文讲透大型网站架构模式核心原理与案例分析
什么是模式?每一个模式描述了一个在我们周围不断发生的问题及该问题解决方案的核心.这样,你就能一次又一次地使用该方案而不必做重复的工作. 也许互联网产品不是随便复制就能成功的,创新的产品更能为用户创造价 ...
- .net函数查询_特来电智能分析平台动态查询架构创新实践
一.业务背景及痛点 目前主流互联网智能分析平台中,数据查询作为基础的设施服务支撑着基础数据及业务分析的功能展现.随着数据量的增长,数据存储方式多元化,相对静态数据可能存储到关系型数据库中,订单类动态数 ...
- MySQL 高可用架构在业务层面的应用分析
MySQL 高可用架构在业务层面的应用分析 http://mp.weixin.qq.com/s?__biz=MzAxNjAzMTQyMA==&mid=208312443&idx=1&a ...
- 网络架构优化--云企业网典型场景分析for客户
简介: 网络架构优化--云企业网典型场景分析for客户 1. 背景描述 客户从传统的高速通道迁移到云企业网,加入云企业网的VPC,VBR默认全通,但是实际业务场景需要更严格的策略做选择性放通.此外,由 ...
- 山哥新作:架构师必备技能之业务分析
1 业务分析 业务分析是应用系统的思想和方法,把复杂的需求分解成简单的对象,找出这些对象的基本属性以及彼此之间的关系,系统分析也是系统开发中最重要.也是最困难的阶段,最终的架构设计也要依据业务分析的结 ...
- Dubbo源码分析系列之-整体架构设计
导语: 在了解一个框架的源码的时候,第一步要了解的就是源码的结构,接下来第二步需要了解的就是源码的架构,下面这张图在Dubbo官网上所展示的Dubbo的架构设计图.接下来就来详细的分析一下这张图. ...
最新文章
- 【仿去哪儿登录】UITextField输入时检查输入框是否为空
- 全国大学生智能汽车竞赛讯飞 -智慧餐厅技术报告 ——信号与系统课程论文
- C++学习笔记-----在重载的赋值运算函数中调用拷贝构造函数
- 【英语学习】【WOTD】largesse 释义/词源/示例
- B站举办2019年度UP主颁奖:破圈、多元、跨界成全年关键词
- 关于通用框架的一些想法
- 控制台模块python_04_python常用模块
- 软件测试安装包,安装包的测试
- 操作系统——概念、功能、特征及发展分类
- java计算器代码_java计算器源代码(新手入门级)
- Alink(1):Alink概述
- Pyramidal RoR for Image Classification
- 这套Github上40K+star面试笔记,可以帮你搞定95%以上的Java面试
- 2020高交会第二十二届中国国际高新技术成果交易会
- Statement与PreparedStatement
- 【机器人学】逆运动学
- Linux关机时执行指定脚本
- kernel网络之软中断
- 【运动规划】RRT快速搜索随机树 Rapidly Exploring Random Tree
- mldonkey设置!看图(转载)