【架構分析】MESA (EGL/GLES)架構分析
目錄
Gallium3D- eglCreateContext時序圖
背景介紹
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 架構
早期的MESA架構中,vendor DRI driver(比如上圖的intel i915 顯示卡驅動)和mesa 庫耦合比較緊密,跨平臺移植較為困難
Gallium3D 架構
Intel i915 Backend
MESA演進為Gallium3D架構後,可以通過Gallium模組+不同平臺相關的Backend實現,進一步分割了Vendor HW driver 模組以及與平臺視窗系統有關的WinSys 模組(軟體架構設計模式仁者見仁,是不是搞的更復雜了。。。)
VirtIO-GPU Backend
Gallium3D架構由於backend模組獨立(即Vendor HW driver 模組以及與平臺視窗系統有關的WinSys 模組獨立),所以Gallium3D可以選擇不同的backend,比如上圖某個Hypervisor虛擬機器的方案商可以通過採用MESA-Gallium3D + virtIO-GPU backend在Guest VM中實現虛擬GPU了功能,在Host VM中通過libvirglrenderer 來替Guest VM的應用響應3D GPU的繪圖命令
核心資料結構層次關係
MESA的核心資料結構很多很複雜,上圖列舉了一些核心資料結構主要強調了它們的層次關係,即上層使用下層的抽象結構(比如 函式指標呼叫),下層為上次做具體的實現(比如具體的函式實現),雖然是C程式碼但設計理念基本上與C++的繼承類似
MESA 核心函式呼叫時序
非Gallium3D架構
eglGetDisplay呼叫時序
eglInitialize呼叫時序
eglCreateContext呼叫時序
eglCreateWindowSurface呼叫時序
eglMakeCurrent呼叫時序
eglSwapBuffers呼叫時序
glFlush呼叫時序
Gallium3D架構
Gallium3D-eglInitialize 時序圖
Gallium3D- eglCreateContext時序圖
Gallium3D- glFlush時序圖
從上面的幾個Gallium3D的時序圖可以看出,對比非Gallium3D架構,Vendor和平臺相關的實現移到了HW Vendor Driver和WinSys 模組的具體實現中,libmesa_dri_drivers 面向Gallium3D提供的介面實現EGL和GLES的呼叫,實現了API OS HW的三層分割
相關文章
- SaaS架構:流程架構分析架構
- sqoop 架構分析OOP架構
- hbase 的架構分析架構
- MySQL基礎架構分析MySql架構
- thrift原始碼分析-架構設計原始碼架構
- LNMP架構下的程式模型分析LNMP架構模型
- MySQL高可用架構設計分析MySql架構
- 今日頭條技術架構分析架構
- tomcat架構分析及配置詳解Tomcat架構
- MQ系列9:高可用架構分析MQ架構
- 美顏SDK架構技術分析架構
- Flutter框架分析(一)--架構總覽Flutter框架架構
- HongHu雲架構common-service程式碼結構分析架構
- jQuery原始碼分析系列 : 整體架構jQuery原始碼架構
- 乾貨:軟體架構分析詳解架構
- Twitter推薦引擎架構設計分析架構
- Kubernetes 下零信任安全架構分析架構
- SaaS業務架構:業務能力分析架構
- ==[圖]Spark系列(四)整體架構分析Spark架構
- RPC框架整體架構設計分析RPC框架架構
- Oracle多租戶架構優勢分析Oracle架構
- hadoop 原始碼分析HDFS架構演進Hadoop原始碼架構
- NVIDIA安培架構下MIG技術分析架構
- 微服務架構學習與思考(05):微服務架構適用場景分析微服務架構
- 深入Weex系列(八)之Weex SDK架構分析架構
- 以 RAIDs 分析作為架構驅動力AI架構
- 分析阿里前端-自動化架構思路-react阿里前端架構React
- 精講Redis服務架構分析與搭建Redis架構
- NUMA架構介紹及優缺點分析架構
- ET框架6.0分析一、ECS架構框架架構
- 從劇情架構角度分析《妄想破綻》架構
- 精盡 MyBatis 原始碼分析 - 整體架構MyBatis原始碼架構
- Spring security (一)架構框架-Component、Service、Filter分析Spring架構框架Filter
- 原始碼分析三:OkHttp(1)—總體架構原始碼HTTP架構
- 雲原生架構實施路線圖分析架構
- 架構與思維:分散式鎖方案分析架構分散式
- 分散式搜尋引擎Elasticsearch的架構分析分散式Elasticsearch架構
- (六)整合spring cloud雲服務架構 - 企業雲架構common-service程式碼結構分析SpringCloud架構