现在,DRI2已经被移出Xorg 7.4了。这引来了一大堆抱怨,为什么不照现在的样子发布它,这样我们就有了最新可用的东西了。
大家要明白的第一件事是,当前Xserver渲染体系已经相当残旧了,在Xfree时期就没有任何工作让它保持更新,而在Xorg开始时,主要的目标是分离不同的部分以允许异步发布。
所以,现在不是在一块代码,而是在几块代码上进行改进。这包括2D加速,内存管理,3D加速和2D模式设置。他们同时进行以加快实现的速度。
但问题是所有这些或多或少依赖于恰当的内存管理机制。这也是最难做的事情。
现在,让我们看看今日的Xorg是如何工作的。每一个Xorg驱动实现各自的内存管理,并且在其有3D加速时提供DRI1功能。此外,它也负责模式设置。但它不是最早的,内核已经包含了一些初始模式设置,这样它能在启动时输出消息。而Xorg驱动会在装载时重新复位硬件。
内核模式设置
为了消除模式设置代码的冗余,这部分代码将被移到内核,这样硬件便只需设置一次。但模式设置需要调用内存管理,然而这还没被很好地实现。
内存管理器
这里的构想是在驱动之间共享尽量多的代码,并且给用户空间提供一个通用接口(新的内存管理器将包含在内核中)。所以一个内存管理器由一组API, 一份公共的代码,和一个硬件特定部分组成。第一份提案是来自Tungsten Graphics的TTM。TTM有着非常复杂的API,许多开发者认为这并不能适应新的显卡。公用的代码已经写成,一些驱动如noveau开始采用它。 但接着Intel引入GEM,它具有更简单的API并且更适合现代显卡。虽然现在GEM仅包含Intel特定的代码,其他开发者已开始采用它。ATI驱动 的一个分支提供了一个跟GEM类似的API。虽然它还没有稳定的API,但它更类似于GEM而不是TTM。
3D加速
DRI2是对直接渲染设施(DRI)的重构,它被用来实现重定向直接渲染。当前,当一个应用程序想绘制一个OpenGL窗口,它直接访问屏幕缓 存。在DRI2里,它将会被重定向到离屏缓存,这样合成管理器便可以做出精美的视觉效果。这显然依赖于一个稳定的内存管理API,所以当GEM引入时它不 得不做相应改变,因为DRI2是在TTM首先被实现后才设计出来的。
2D加速
在2D加速领域,EXA被认为是目标。但Intel接着再次引入UXA,但它跟EXA没什么不同。它提供了跟EXA一样的API,但从新的GEM内存管理器中获得好处。赋予它一个新的名字是因为大部分旧代码都被丢弃了。这个工作很可能也会被其它驱动使用。
希望这篇文章有助于理清Xorg当前的状况。就像你看到的,改变内存管理器意味着改变所有其他东西。因此,先正确实现它是最重要的。
阅读(2583) | 评论(0) | 转发(0) |