linux显示渲染框架笔记

libdrm:
libdrm.so.2.131.0:提供驱动层drm和kms的操作接口
libglvnd:

EGL: libEGL.so.1.1.0 EGL 调用转发入口,动态加载 libEGL_mesa.so / libEGL_nvidia.so 等厂商实现
GL: libGL.so.1.7.0 兼容壳 → 转发调用给 libGLdispatch + libGLX
GLDispatch: libGLdispatch.so.0.0.0 所有 GL 函数都经它查表跳转
GLESv1: libGLESv1_CM.so.1.2.0 OpenGL ES 1.x (固定管线)纯包装 → 调用 libGLdispatch
GLESv2: libGLESv2.so.2.1.0 OpenGL ES 2.0~3.2(可编程管线)纯包装 → 调用 libGLdispatch
GLX: libGLX.so.0.0.0 GLX 调度 → 按窗口 / 屏幕转给 libGLX_mesa.so 或 libGLX_nvidia.so
OpenGL: libOpenGL.so.0.0.0 精简包装 → 走 libGLdispatch
mesa:
EGL: libEGL.so.1.0.0 加载 DRI 驱动、管理上下文/表面、对接 X11/Wayland/GBM,
dri: libgallium_dri.so 软件渲染,被 libGL / libEGL 动态加载
va: libgallium_drv_video.so 软渲染 VA-API 视频加速实现
xa: libxatracker.so.2.5.0 为 X 服务器提供2D 加速 + 渲染
gbm: libgbm.so.1.0.0 Generic Buffer Management(通用缓冲区管理)无窗口系统(headless)、Wayland、KMS 必备底层库
glx: libGL.so.1.2.0 Mesa版OpenGL+GLX 实现
es1api: libGLESv1_CM.so.1.1.0 Mesa 对 OpenGL ES 1.x CM
es2api: libGLESv2.so.2.0.0 Mesa 对 OpenGL ES 2.0~3.2
glapi: libglapi.so.0.0.0 Mesa GL 调度表,生成所有 GL 函数入口点、维护分发表,libglvnd的libGLdispatch就是基于此代码发展而来
xserver
composite: liblibxserver_composite.a 实现窗口合成、离屏渲染、透明、窗口管理器特效
config: liblibxserver_config.a X Server 配置解析与管理
damageext: liblibxserver_damageext.a 跟踪窗口 / 画面哪部分发生变化,只重绘脏区域,大幅提升渲染效率,是 composite、render、present 等扩展的基础
dbe: liblibxserver_dbe.a Double-Buffer Extension 双缓冲扩展,现已基本被 Present + GL 替代,但仍兼容旧应用
dix: liblibxserver_dix.a X 协议主调度、窗口管理、资源管理、事件分发、连接管理
exa: liblibxserver_exa.a 旧一代 X 显卡 2D 加速框架(用于 XRender、文本、填充、复制),现已逐渐被 Glamor(OpenGL 加速 2D)取代
fb: liblibxserver_fb.a和liblibxserver_wfb.a 纯 CPU 绘制,所有显卡驱动的兜底实现,wide framebuffer,宽色深 / 格式兼容的软件渲染
glamor: libglamor.a 现代 X 服务器默认 2D 加速方案,替代了旧的 EXA/UXA,把 XRender、Composite、上传、混合等全部用 GL 着色器完成
glx: liblibglxvnd.a 和 liblibxserver_glx.a 管理 GL 上下文、与窗口绑定、交换缓冲
xfree86 : libxorg_common.a , libxorg_dri.a, libxorg_dri2.a, libxorg_i2c.a, libint10.solibxorg_loader.a , libxorg_modes.a, libxorg_os_support.a, libxorg_parser.a, libxorg_ramdac.a, libx86emu.a,libxorg_xkb.a
libxorgserver.so 暴露驱动符号表给动态库modesetting_drv.so使用xorg的内部接口
以下这些库都是Xorg运行时用内置 loader按需加载modules下的.so (fb/glx/exa/modesetting 等)
libshadowfb.so 影子帧缓冲, libvbe.so 显卡实模式BIOS , libvgahw.so 老式VGA兼容设备使用,,modesetting_drv.so 驱动, libexa.so 2D加速已过时, libfbdevhw.so 直接操作/dev/fb0,libfb.so 纯CPU实现2D绘图, libglx.so 实现GLX协议, libshadow.so轻量级影子缓冲辅助模块, libwfb.so 高色深、多像素格式软件帧缓冲
mi: liblibxserver_mi.a 设备无关渲染层,点、线、矩形、文本、填充、拷贝、剪裁等基础绘制
miext: liblibxserver_miext_damage.a, liblibxserver_miext_shadow.a和 liblibxserver_miext_sync.a 脏区域追踪,影子缓冲,同步扩展,栅栏、同步对象,防撕裂、控制帧率
os: liblibxlibc.a和 liblibxserver_os.a X Server 自身操作系统抽象层,线程、事件、套接字、内存分配、日志、定时器、信号
present: liblibxserver_present.a 实现画面同步、页翻转、vblank 同步、无撕裂更新
randr: liblibxserver_randr.a 分辨率切换、多显示器、旋转、镜像、热插拔、屏幕布局
record: liblibxserver_record.a 录制 / 拦截 X 协议流,用于自动化测试、远程桌面、录屏类工具
render: liblibxserver_render.a 抗锯齿、Alpha 混合、渐变、贴图、矢量图形
Xext: liblibxserver_xext.a和 liblibxserver_xext_vidmode.a X 通用扩展框架,所有扩展的基础
xfixes: liblibxserver_xfixes.a 修复 / 增强核心 X 协议短板
Xi: liblibxserver_xi.a和 liblibxserver_xi_stubs.a 输入设备扩展,支持多点触摸、数位板、游戏手柄、高精度鼠标
xkb: liblibxserver_xkb.a和 liblibxserver_xkb_stubs.a 现代键盘处理:布局、热键、组合键、键位映射、多国语言
整体框架
应用 ↔ 协议 ↔ DIX(核心)

扩展:RandR / Composite / Render / GLX / Present / Xi / XKB

2D 加速:Glamor(OpenGL) → EXA → fb/mi(软件兜底)

硬件驱动:modesetting + DRI2/3 + KMS/GBM
如xrandr的调用过程
xrandr 命令行工具
↓ (链接 libXrandr.so)
libXrandr.so (客户端库,封装 RandR 协议)
↓ (X11 协议请求:RRGetOutputInfo / RRSetCrtcConfig 等)
Xorg 服务器(接收协议)
↓ (分发到扩展)
liblibxserver_randr.a (X Server 端 RandR 扩展实现)
↓ (调用 DDX 驱动层)
modesetting_drv.so / 显卡驱动 → DRM/KMS → 内核

相关推荐
DeeplyMind15 天前
05 - AMDGPU中的VRAM管理器
drm·amdgpu·drm_buddy·ttm
DeeplyMind19 天前
04 - 核心数据结构详解
drm·drm_buddy·vram
DeeplyMind21 天前
03 - DRM子系统与AMDGPU架构
drm·drm_buddy·vram分配
永不复还3 个月前
linux 使用Xcb监听键盘鼠标输入
linux·x11·xcb
永不复还3 个月前
linux 使用X11监听键盘鼠标输入
linux·x11
DeeplyMind3 个月前
Linux DRM 内存管理子系统的概念关系理解:gem、ttm、drm_buddy
drm·tm·drm_buddy
DeeplyMind3 个月前
第7章:DRM内核调试技术:7.1 DRM DebugFS的使用
linux·驱动开发·drm·debugfs·drm debugfs
DeeplyMind4 个月前
linux drm子系统技术分析目录表
linux·驱动开发·drm
Ankie Wan4 个月前
weston的历史和X11显示服务器的区别
x11·weston·x11显示服务器