核心定义
GLX
X11 专属 OpenGL 窗口层
- 全称:OpenGL Extension to X Window System
- 定位:只为 X11 而生,老旧传统方案
- 作用:给 X11 窗口提供 OpenGL 上下文、帧缓冲交换、渲染对接
- 仅限:OpenGL 1.x~4.x,不支持 Vulkan
EGL
跨平台标准图形上下文管理层
- 全称:Embedded Graphics Library
- 定位:Khronos 通用标准,现代统一接口
- 作用:统一管理「显示设备、渲染表面、上下文、API 绑定」
- 支持:OpenGL / OpenGL ES / Vulkan / OpenVG
- 多后端:X11 / Wayland / DRM-KMS / GBM / FBDEV / Android
WSI
Vulkan 专属窗口系统集成层
- 全称:Window System Integration
- 定位:Vulkan 标准配套组件,Vulkan 专用
- 作用:专门解决 Vulkan 和窗口系统的对接(窗口表面、全屏、交换链)
- 等价关系:
- OpenGL 阵营 → 用 GLX / EGL
- Vulkan 阵营 → 统一用WSI
GBM
Linux 通用显存缓冲区管理器,EGL/DRM/Compositor 底层必备,分配 GPU Buffer。
DRM/KMS
内核层:显卡驱动、模式设置、页翻转、GPU 指令提交、权限、显存管理。
核心差异一览
| 项目 | GLX | EGL | WSI |
|---|---|---|---|
| 归属协议 | X11 扩展 | Khronos 标准 | Vulkan 标准 |
| 绑定 API | 仅 OpenGL | GL/GLES/Vulkan | 仅 Vulkan |
| 适用窗口 | 只 X11 | X11/Wayland/DRM/ 无头 | X11/Wayland/DRM |
| 无头渲染 | 不支持 | 原生支持 (DRM/GBM) | 原生支持 |
| 生态状态 | 淘汰、遗留 | 现代主流 | 必需标配 |
| Mesa 载体 | libGLX_mesa.so | libEGL.so + egl_*.so | Mesa Vulkan ICD 内置 |
分层架构
1. X11 老旧栈(GLX 路线)
App OpenGL ↓ libGL.so (GLX) ↓ Xorg X11 服务 ↓ DRI 驱动 (*_dri.so) ↓ DRM 内核2. 现代通用栈(EGL 路线,OpenGL/GLES)
App GLES/OpenGL ↓ libEGL.so ↓ EGL后端插件:egl_wayland.so / egl_drm.so / egl_x11.so ↓ GBM + DRI ↓ DRM/KMS3. Vulkan 专属栈(WSI 路线)
App Vulkan ↓ Vulkan Loader (libvulkan.so) ↓ WSI 模块(X11/Wayland/DRM 实现) ↓ Mesa Vulkan ICD (amd_icd / intel_icd / lavapipe) ↓ DRM/KMS关键结论:
- OpenGL 老程序 = GLX
- OpenGL ES / 现代 OpenGL / 无头渲染 = EGL
- 只要是 Vulkan = 必走 WSI
Vulkan 永远走 WSI,和 GLX/EGL 无关
App(Vulkan) ↓ libvulkan.so (Loader) ↓ WSI 模块:x11_wsi / wayland_wsi / drm_wsi ↓ Mesa Vulkan ICD (amd_icd / intel_icd / lavapipe) ↓ GBM ↓ DRM/KMS ↓ GPUWSI = Vulkan 专属「窗口 + 交换链」层,对标 EGL
Mesa 对应真实文件
1. GLX 相关文件
/usr/lib/libGL.so /usr/lib/libGLX_mesa.so # Mesa GLX 实现2. EGL 相关文件
/usr/lib/libEGL.so /usr/lib/egl/ ├─ egl_x11.so # EGL 对接 X11 ├─ egl_wayland.so # EGL 对接 Wayland └─ egl_drm.so # EGL 对接 DRM/GBM 无头3. WSI 相关文件
无独立系统库,内置在 Mesa Vulkan 驱动中:
- Mesa 内部实现:
x11_wsi/wayland_wsi/drm_wsi - ICD 入口:
/usr/share/vulkan/icd.d/*.json
# GLX libGL.so、libGLX_mesa.so # EGL libEGL.so egl_x11.so / egl_wayland.so / egl_drm.so # GBM libgbm.so # DRI 驱动 /usr/lib/dri/*.dri.so # Vulkan WSI+ICD /usr/share/vulkan/icd.d/*.json总览层级(从上到下)
应用层 ↓ 窗口适配层 👉 GLX / EGL / WSI ↓ 缓冲管理层 👉 GBM ↓ 用户态驱动 👉 Mesa DRI / Vulkan ICD ↓ 内核图形子系统 👉 DRM/KMS ↓ GPU 硬件无头 / 容器 / 离线渲染 【EGL+DRM】
无 X11、无 Wayland,纯后台渲染
App ↓ libEGL.so ↓ egl_drm.so // 关键:直接绑定DRM ↓ GBM(帧缓冲/显存管理) ↓ DRI 驱动 ↓ DRM 内核 ↓ GPU容器、云渲染、AI 绘图、服务端刚需
纯软件渲染(CPU)
App → GLX/EGL/WSI → llvmpipe_dri.so → 无DRM硬件依赖 → CPU关键场景选型
Xorg 桌面老游戏→ 走 GLX
Wayland 桌面、Qt/GTK 现代 GUI、嵌入式→ 走 EGL
服务器无桌面、容器离线渲染、AI 绘图→ EGL + DRM/GBM
所有 Vulkan 游戏 / 应用→ 强制 WSI,和 GLX/EGL 无关
EGL & WSI 底层共用依赖
二者底层最终都会落到:GBM + DRM/KMS + DRI 驱动
这也是 Linux 图形栈无头渲染、容器 GPU 直通、虚拟化的核心底座。
EGL支持vulkan
EGL 可以支持 Vulkan,但不是 Vulkan 的原生 / 首选方式;Vulkan 标准自带 WSI,EGL 主要用于跨 API 互操作与特定平台适配。
- EGL:Khronos 标准,为OpenGL/GLES设计的窗口 / 上下文管理层;扩展后可支持 Vulkan。
- WSI:Vulkan 原生标准组件,Vulkan 专用,等价于 “Vulkan 版 EGL”。
EGL 能 “对接” Vulkan(互操作 / 缓冲共享),但不能 “替代” WSI;标准 Vulkan 开发永远走 WSI,EGL 是补充方案。
EGL 对 Vulkan 的支持(两种场景)
1)EGL 不能替代 WSI(常规 Vulkan 开发)
- Vulkan 程序默认直接用 WSI(X11/Wayland/DRM)创建窗口表面、交换链,不走 EGL。
- 原因:Vulkan 把 “设备枚举、上下文、窗口集成” 都纳入核心,不需要 EGL 做中间层。
2)EGL 支持 Vulkan 的真实场景(扩展 / 互操作)
EGL 通过KHR/EXT 扩展支持 Vulkan,主要用于:
- EGLImage 互操作:EGL 创建 / 管理的
EGLImage,可导出为 VulkanVkImage(如EGL_KHR_vulkan_image),实现 GL/Vulkan 共享纹理 / 帧缓冲。 - 安卓 / 嵌入式平台:部分驱动(如 Qualcomm)支持用 EGL 创建 Vulkan 兼容表面,但非标准、不通用。
- 无头渲染 / GBM:EGL+DRM/GBM 可分配 Vulkan 可用的 DMA-BUF 缓冲,用于离屏渲染。
关键区别(EGL vs WSI for Vulkan)
| 维度 | EGL(带扩展) | WSI(Vulkan 原生) |
|---|---|---|
| 标准状态 | 扩展支持,非必需 | 核心标配,强制使用 |
| 适用场景 | GL/Vulkan 互操作、安卓定制 | 所有标准 Vulkan 应用 |
| 窗口表面创建 | 间接(需扩展) | 原生直接(vkCreateWindowSurface) |
| 生态与驱动 | 部分平台支持 | 全平台(Mesa/AMD/Intel/NVIDIA) |
| 性能 | 略高(多一层封装) | 最优(无中间层) |
Mesa 中的文件与实现
- EGL:
libEGL.so+egl_drm.so/egl_wayland.so/egl_x11.so(含 Vulkan 扩展实现)。 - WSI:内置在 Mesa Vulkan ICD(
amd_icd.so/intel_icd.so/lavapipe.so),无独立库。
总结
- GLX:X11 古董,OpenGL 专用,逐步废弃。
- EGL:图形通用底座,统一窗口 + 离屏,替代 GLX。
- WSI:Vulkan 专属窗口适配层,Vulkan 世界的「EGL」。
- EGL 必依赖 GBM + DRM
- Wayland 合成器 100% 依赖 GBM
- Vulkan WSI 底层同样依赖 GBM/DRM
- GLX 不依赖 EGL,EGL 完全替代 GLX
- 所有 Linux 硬件加速,最终收口到 DRM 内核