display
display都是上层call的drm-kms,创建plane(把dumb fb和crtc绑起来, disp_cbios_crtc_flip),有flip事件再call下来,重新绑一次。
drmModeSetCrtc 和 drmModePageFlip区别:drmModePageFlip()只会等到VSYNC到来后才会真正执行framebuffer切换动作,而drmModeSetCrtc()则会立即执行framebuffer切换动作
Xorg的config可以更改tearfree的初始设置,对于纯2d的桌面,默认不走flip而是走copyArea,直接调的drmModeSetCrtc,fb都没有改。
plane是kernel层的抽象,plane包含控制framebuffer的属性,硬件只有crtc和fb
双缓冲更新包括 framebuffer copy,然后更新dirty pixmap
问题?gnome-shell也是client但是同时也是window manager,注册client时是如何区分的呢?
xroot = RootWindow (xdisplay, number); 创建根window sprintf (buf, “WM_S%d”, number); wm_sn_atom = XInternAtom (xdisplay, buf, False); 这里应该是注册代码
drmModeSetCrtc 下面会call drm_atomic_commit commit_tail 到driver
psr: Panel Self Refresh, 屏幕静止时,显卡将数据发给显示面板,显示面板自己刷新。 需要显示器和GPU双方的支持。 i2c: 协议 用于ddc背光 和屏幕初始化。