作者:
网络
日期:
2009-07-01
|
http://www.linuxgraphics.cn/xwindow/some_concepts_of_xorg.html
今天看到一篇不错的英文文章,解释了xorg实现里的一些概念,也解决了我的一些疑惑。概括并解释一下。 期待已久的DRI2被排除出了Xorg 7.4版本了,为什么呢? 是为了给GEM取代TTM让路,而DRI2的实现目前依赖于TTM。 目前的Xserver渲染架构严重落后于时代,自Xfree时代遗留的问题在Xorg里也未得到足够的重视,所以现在到了革新的时候。2D加速,3D加速等都依赖于一个好的内存和执行管理器,这也是最难的部分。目前的xorg驱动都实现了各自的存储管理,提供DRI1接口,并负责modesetting。 GPU Memory manger位于内核中,并为用户空间的程序提供一套操作API。由各个不同的显卡硬件抽象出相同的操作,大家共享这部分代码,剩下的与具体硬件相关的部分由各个显卡分别实现。老的TTM管理器API复杂,而且不适合现代显卡架构,于是Intel提出了GEM来取代之,目前GEM里只包含Intel自己的硬件相关部分,ATI驱动的一个分支也实现了对GEM的支持。GEM目前已经进入2.6.28版本的内核。 Kernel mode setting:内核也做一部分modesetting的工作,比如系统引导的时候显示的信息,这些都是内核提前做了mode setting,而我们在进入X前,加载xorg驱动模块的时候,xorg驱动再做一次modesetting,重置显示设定,所以会有屏幕闪烁的情况出现。现在的kernel mode setting就是要把这部分功能移到内核里,完全由内核做mode setting。Fedora 9/10已经实现了这个功能,所以从启动内核到进入X不会有闪烁,一切都很平滑,并且可以做很多eye candy的东西。目前KMS还未进入内核,最早也要等到2.6.29版本了。 DRI2是下一代的Direct Rendering Infrastructure,具有重定向(redirect) direct rendering功能。在当前,一个程序如果使用了 OpenGL 窗口,显示内容是直接写到framebuffer里的。这会跟使用了composite 功能的窗口管理器WM冲突,这是为什么Google Earth在compiz下支离破碎的原因。而通过DRI2, OpenGL 窗口内容先被重定向的offscreen memory里,然后由WM负责输出,就不再会有冲突。而DRI2是基于老的TTM设计的,需要针对GEM作修改。 2D加速方面,EXA 将要取代老的XAA,但EXA也只是xorg server全面转向 OpenGL 前的一个临时解决方案。XAA不对大量常用2D操作作加速,并且对XRender的加速也支持不够。Intel又提出了 UXA来取代EXA,当前UXA提供和EXA同样的API,但是利用了新的GEM管理器。 Redhat的一个大牛不满X架构的严重老化,另起炉灶设计一个全新的X server,代号Wayland,目前还不实用,拭目以待吧。 针对GEM修改后的DRI2预计会伴随Xserver 1.6于09年初发布,同时还将释出RandR 1.3。而Xorg 7.5预计09年四月发布,届时将会伴随Xserver 1.7。至于kernel mode setting,Ubuntu开发者将于下月召开的会议上讨论是否用Fedora的Plymouth替换Usplash,如果在9.04版里引入 Plymouth,我们就能用上KMS。Mesa 7.2不支持GEM,git版本的似乎也不行,估计要到7.3/7.4才会支持。 Reference: |