2017年1月3日 星期二

Mesa 和 Linux graphic stack 簡介

前陣子提到 PRIME 技術,今天把更多相關知識補齊。

以下大多是從[1]這篇文章所做的摘要。

graphic stack 的「演化」


  • 2D: 透過 X server 來控制硬體(螢幕上畫圖等,rendering)。參考下面的「X window 架構」
  • 3D: 使用 OpenGL 實作的應用程式透過 X server 來控制硬體、rendering。這叫 indirect rendering (相對於 direct rendering 的一個詞彙)。參考下面的 「GLX 架構」
  • 3D + DRI (Direct Rendering Infrastructure): 使用 OpenGL 實作的應用程式透過 X server 來控制硬體、rendering。

X window 架構


  • X client 控制資料運算、X server 控制硬體。(注意一台 ssh server 是透過 X client 和某處的 X server 溝通,不要混淆了一般的 server 詞彙涵義和 X server 的「server」)
  • X client 透過 X11 protocol 和 X server 溝通,實作是 Xlib。
  • X server 透過 DDX (device-dependent X) driver 和硬體溝通。


GLX 架構 / Indirecting Rendering


  • Hardware --> OpenGL --> OpenGL API --> libGL.so--> OpenGL application,但這條路在中間還有 X server 的時候會不通,因此用 GLX 來串連。
  • OpenGL application --> GLX --> X server --> GLX driver --> kernel
  • 效率會因為多一層要通過 X server 就會比較差,因此有 DRI 架構

DRI 架構

  • 上面的 in-directing rendering 效率較差,因此試試 directing rendering
  • Hardware --> kernel (DRM) --> OpenGL DRI driver --> OpenGL / libGL.so --> OpenGL application
  • DRM 可以說是 DRI 在 kernel 面向的實作,包括有給 userspace 呼叫的 API

MESA


有了上面的概念之後,就可以理解 Mesa 在 graphic stack 中扮演的角色了。Mesa 包括:
  • 包/利用 libGL
  • 基於 DRI/DRM 架構
  • Mesa 面向的 GLX;原則上還是讓 X 去控制原本 X server 已經在控制的東西,例如圖形內容;Mesa 本身只是想要同步好 X server 已經在控制的內容和透過 DRI 進出的資料與運算。





[1] https://blogs.igalia.com/itoral/2014/07/

沒有留言:

張貼留言