欢迎点击上方蓝色“泰晓科技”关注我们
原创作者:陈杰
本文图示了基于 DRM 还有 Wayland 的 Linux 图形栈。在这个图形栈中,App 将画好的 surface,通过 Wayland 协议提交给 Compositor。Compositor 将来自各个应用的 surface(s) 合成为一帧,通过 DRM 接口最终画在 Frame Buffer,如下图所示:
本文接下来自下而上,先介绍 Linux Kernel 的 DRM 子系统,而后步入 Userspace 来介绍:代入两个代表性的 GUI App,情景分析其渲染过程。
通常,GUI App 是通过图形控件库来布局和放置控件。对这类普通 GUI App 渲染过程分析,是为情景分析的第一章节。
随后分析了多媒体 App:它是进一步细分的一个情景,即 App 界面一部分内容,是多媒体。
伴随情景的细分,渲染过程会经由特定的一些软件栈,故而“花开两朵,各表一枝”。
1. 背景:DRM —— buffer management、Frame Buffer / plane、Kernel Mode Setting
Linux DRM 子系统,主要提供了以下功能:
操作 Frame Buffer / Plane 接口
Buffer 管理
模式设定(分辨率、色深、刷新率等)
图 2:Linux DRM 中的概念:Frame Buffer,Plane,CRTC,Encoder 以及 Connector
简单地理解, DRM 功能上相当于 HW Composer + gralloc,只不过 “接口” 是 Linux Kernel 导出的,而不是 HAL。
换句话说,HW Composer 和 gralloc 可以映射到 DRM 实现。事实上,一些平台的 Android BSP 正是这样做的。
下图对比了两者:<