前陣子提到 PRIME 技術,今天把更多相關知識補齊。
以下大多是從[1]這篇文章所做的摘要。
[1] https://blogs.igalia.com/itoral/2014/07/
以下大多是從[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/
沒有留言:
張貼留言