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