EXA,UXA, DRI, GEM, TTM
作者: gogoliu@China Linux Forum 翻译
日期: 2008-08
本文介绍了 Xorg 中的几个名词,非常有助于理清 Xorg 当前的状况。

引入

现在,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 当前的状况。就像你看到的,改变内存管理器意味着改变所有其他东西。因此,先正确实现它是最重要的。

SeeAlso

翻译: gogoliu @ China Linux Forum