【架構分析】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架構:流程架構分析架構
- QQ架構分析架構
- hbase 的架構分析架構
- sqoop 架構分析OOP架構
- CRM業務架構分析架構
- MySQL基礎架構分析MySql架構
- ETL架構師之分析類架構
- SaaS業務架構:業務能力分析架構
- Spring Cloud雲服務架構 - HongHu雲架構程式碼結構分析SpringCloud架構
- 微博首席架構師楊衛華:新浪微博技術架構分析架構
- 新浪微博技術架構分析-微博首席架構師楊衛華架構
- 今日頭條技術架構分析架構
- MySQL高可用架構設計分析MySql架構
- Flutter框架分析(一)--架構總覽Flutter框架架構
- thrift原始碼分析-架構設計原始碼架構
- LNMP架構下的程式模型分析LNMP架構模型
- MQ系列9:高可用架構分析MQ架構
- 美顏SDK架構技術分析架構
- iOS 應用架構現狀分析iOS應用架構
- FFmpeg架構之I/O模組分析架構
- 金融分析平臺架構師招聘架構
- 完整社交APP需求分析原型設計整體架構前端後端架構APP原型架構前端後端
- tomcat架構分析及配置詳解Tomcat架構
- ==[圖]Spark系列(四)整體架構分析Spark架構
- jQuery原始碼分析系列 : 整體架構jQuery原始碼架構
- Oracle多租戶架構優勢分析Oracle架構
- 乾貨:軟體架構分析詳解架構
- Memcached 及 Redis 架構分析和比較Redis架構
- 大型WEB網站架構深入分析Web網站架構
- Twitter推薦引擎架構設計分析架構
- 微服務架構學習與思考(05):微服務架構適用場景分析微服務架構
- Spring Cloud雲服務架構 - HongHu雲架構common-service程式碼結構分析SpringCloud架構
- HongHu雲架構common-service程式碼結構分析架構
- 架構之:serverless架構架構Server
- 從劇情架構角度分析《妄想破綻》架構
- 深入Weex系列(八)之Weex SDK架構分析架構
- 架構與思維:分散式鎖方案分析架構分散式
- 快應用技術架構及業務分析架構