显示模块流程介绍名词解析
一、显示逻辑
-
Surface Manager(Surfaceflinger)
** Surfaceflinger 是用户空间中ramework下libraries 中负责显示相关的一个模块
** 当系统同时执行多个应用程序时,Surfaceflinger 负责管理显示,主要包括显示的叠加和显示的渲染
** 其中显示的叠加,MTK 架构按照一定的原则和算法,主要用到GPU 和 OVL 模块的overlay 功能来做2D/3D 绘图的显示合成 -
HWC
** 基于DDP OVL 硬件做HW Overlay 功能 -
GPU (Graphic Processing Unit )
** aspecialized electronic circuit designed to accelerate the image processing, frame buffer rendering for output to a display.
** 一种专用电子电路,旨在加速图像处理、帧缓冲区渲染以输出到显示器 -
FrameBuffer
** 基于Linux Frame buffer 模型的MTK Framebuffer 实作,主要来管理frame buffer。 -
DDP(Display Data Path)
** MTK Display Hardware Controller,包括OVL, DMA, Color Processor,BLS, DSI/DBI/DPI Controller
二、显示数据流
- Display 大致的流程说明
** APP(包括WMS)会把数据透过Surface送到SF(surfaceflinger)
** SF 按照一定规则,通过GPU/HWC把多个Surface合成,并设定到DDP OVL 的对应layer
*** MTK OVL 一般有4 layer(可能不同平台会有差异,目前基本都是4 layer),每个layer 都可以设定一个对应的图层,然后OVL 把这写图层合成后送给DDP 的下一级Module
*** 某些情况下(比如总的图层超过4个,OVL 无法处理等各种case) ,会使用GPU 去做2D/3D 的图层合成到frame buffer
** SF/HWC 最后把GPU合成图层以及需要OVL 合成的图层,设定到OVL 的HW Register,并trigger HW Engine
** MTK DDP 就会把合成的数据像管道一样流向LCM module,最后Panel 显示相关的画面
三、显示数据路径 DDP
1.rotator
图像旋转,支持多个方向旋转,也支持局部旋转
2.scaler
图像缩放,水平垂直方向缩放
3.color engine
图像颜色处理,PQ处理,改变亮度色坐标等
4. OVL:Overlay
从内存中或者前级模块的输出通过透明度、区域设置、等叠加,输出为一个显存
数据输入:direct link scaler format,YUV or RGB;memory source format.可以直接从上级模块SCL or PQ,也可以直接从memory输入
5.WDMA(write DMA)
模块负责数据写入DRAM中
6.RDMA(read DMA)
模块负责从DRAM中将数据写入显示模块,如DSI、DPI、DBI
CMDQ:即command queue,由于Display的driver中涉及大量的寄存器读写操作,如果全部用CPU读写,会占用大量的CPU资源。所以 MTK使用一个硬件来负责此项工作,cmdq就是辅佐这个硬件工作的软件架构。Display把需要读、写、和轮询硬件寄存器的一连串命令,打包成命令队列交给cmdq,cmdq会单独去启一个线程做这些事情。cmdq的实现依赖gce和IPI中断。
VBLANK:场消隐;对于cmd屏来说,te信号就是vblank的标志;对于vdo屏来说,FRAME_DONE中断标志就是vblank。
FENCE:内存同步机制,也就是我们经常说的in-fence(使能状态),out-fence(完成状态);
DRM/KMS: Direct Rendering Manager / Kernel Mode Setting,内核显示框架。mtk最新的代码都是基于此架构来实现;