Linux 图形新闻
Linux 中的图形堆栈包含许多不同的项目,在本文中,我们将了解 X.org、Wayland 和 Cairo 的当前开发情况。
在过去的十年中,Linux 图形经历了两个方面的主要发展。首先是从 2D 系统渲染转变为今天的硬件加速 3D 系统合成。其次是将图形支持从 X 大规模迁移到内核级别,在那里它可以最大限度地利用硬件功能。近年来,前者暴露了 X.org 设计上的局限性,而后者使得从 X 独立重新实现图形堆栈变得更加容易。
因此,现在既有更换 X 的动机,也有手段,这导致了一些尝试这样做的工作。Wayland 正在缓慢但稳步地变得有用,而 Canonical 的 Mir 工作正在提供一个可靠的新挑战。然而,最近 X.org 已经开始开发 DRI3,这表明这个历史悠久的项目尚未准备好退出舞台。
稳定版本- xorg-server:1.14.2 于 2013 年 6 月 25 日发布。
- wayland 1.2.0 和 weston 1.2.0 于 2013 年 7 月 12 日发布。
- cairo:1.12.14 于 2013 年 2 月 10 日发布,目前正在准备可能即将到来的 1.12.16 版本。
总的来说,X.org 目前处于维护状态,尽管在边缘领域正在进行一些有趣的开发工作。
本月特别值得注意的是,Keith Packard 一直在开发 Present,这是一个 X 服务器扩展,可以更干净地处理合成场景中的重定向视频。它为应用程序在屏幕上显示视觉效果提供了更直接的路径。这补充了最近为新的 DRI3 扩展所做的开发工作。有关这项新技术的更详细检查,请参见下文。
Peter Hutterer 引入了一个新的库 libevdev,它封装了内核 evdev 接口,并为 ioctl、SYN_DROPPED 事件和设备位检查提供了抽象。这项工作的目标是为 X.org、weston 和 evtest 建立一个共享代码库。libevdev 至今已发布两个版本,目前版本为 0.2。
Nouveau 和 Radeon 驱动程序添加了多屏幕反向 optimus 支持。此功能允许由集成 GPU(通常是 Intel)进行渲染,并通过连接到独立 GPU(例如 Radeon 或 NVIDIA 显卡)的显示器显示。
除了这些主要工作之外,还有通常的错误修复和代码库清理更改。特别值得注意的是,Peter Hutterer 提出了大量输入补丁,以将触摸修复程序向后移植到 xserver 1.13,以修复抓取处理、光标引用计数、竞争条件和其他问题。Egbert Eich 还从 OpenSUSE 集成了驱动程序和键盘修复程序,Thomas Klausner 从 NetBSD 集成了驱动程序和键盘修复程序。
由于 X.org 已经存在很长时间了,因此一直在努力删除过时的代码,以帮助清理代码库。本月删除的死代码包括删除 CRAY 支持和废弃 libxkbui。
DRI3 和 Present 扩展Wayland 和其他正在开发的最新显示技术的主要卖点之一是,它们为 X.org 在多缓冲区窗口合成方面的局限性提供了更好的解决方案。X.org 早于当今无处不在的 3D 功能图形硬件,其原始设计并未考虑合成。值得称赞的是 X11 的模块化灵活性,可以通过 DRI2 和 composite 扩展添加合成,但是,这种方案一直让开发人员感到有点像事后添加,并且与直接渲染客户端(如游戏和电影播放器)配合不佳。
然而,最近 X.org 的一项开发有望通过 DRI3 和 Present 扩展来改变这一点。
DRI3 扩展允许应用程序直接通过内核缓冲区渲染到 Pixmap 中,有效地将此图形缓冲区管理移出 X 并移入应用程序。
Present 扩展处理将像素从 DRI3 扩展创建的 DRI pixmap 移动到可以显示的 X 可绘制对象。应用程序在准备好后备缓冲区后调用 PresentRegion。服务器捕获此请求并构造一个事件,供合成器将图像正确放置在屏幕上。合成管理器接收此事件并将 pixmap 裁剪为窗口的形状和变换。然后,它根据需要将变换后的 pixmap 与其他应用程序 pixmap 组合(从而处理多窗口半透明、模糊等),并生成另一个 PresentRegion 请求,以将结果映射到根窗口。此外,合成管理器还知道窗口正在哪个监视器上绘制,因此它可以将更新同步到该监视器 CRTC 的刷新率。然后应用程序会收到其 PresentRegion 操作已完成的通知,因此它可以处理清理并继续下一个周期。
这种新方法旨在最大限度地减少应用程序在合成环境中显示其内容所需的复制操作次数。目标是在不产生撕裂或其他显示伪影的情况下实现此目的。
通过为 OpenGL 提供完整的直接渲染解决方案,DRI3 和 Present 扩展为应用程序提供了 Wayland 承诺的关键优势,而无需更换 X。这些扩展的初始实现已经完成,但尚未登陆 Xserver 存储库。如果它很快登陆,我们可能会在计划于 9 月或 10 月发布的 Xserver 1.15 中看到此功能;否则,它将需要等到明年春季的 1.16 版本。目前,该功能可通过 Keith Packard 的 freedesktop.org git 分支获得。
Wayland 开发关于 Wayland 项目的一个常见误解是它旨在字面上替换 X。更准确的看法是,它是一个技术孵化器,用于验证设计概念。该项目产生两个组件:Wayland 协议和 Weston 显示服务器。Wayland 协议被认为是该项目的主要产品,Weston 是一个参考实现,它希望其他项目在开发自己的 Wayland 兼容技术时研究或重用它。Weston 包还包括一个示例 shell 和几个示例客户端应用程序。
本月发布了 Wayland 和 Weston 的 1.2.0 版本。由于核心 API 和实现已在 1.0.0 中稳定下来,因此 1.1.0 和 1.2.0 版本的开发主要集中在添加后端、完善代码库、改进输入处理以及充实利用 Wayland 架构的辅助功能。
1.2.0 中添加的新功能之一是新的 subsurface 协议扩展。这允许客户端使用多个 Wayland surface 创建其窗口,例如视频播放器,它可能由窗口装饰、视频播放器、字幕层和画中画组成。每个图形缓冲区可以是不同的类型,具有自己的颜色空间。
颜色管理在此版本中变得更加灵活,因为它现在允许在带有从 weston.ini 读取的配置文件的简单 CMS 插件与与 colord 的集成之间进行选择。后者允许使用 gnome-color-manager 或 colord-kde 等工具运行时调整颜色配置文件。
添加了多座位功能,以允许使用 udev 规则定义键盘和鼠标对。这些“座位”中的每一个都可以(可选)限制为特定的输出监视器。
包含了一个新的示例客户端,演示了如何在客户端之间共享缓冲区。典型的用例是具有用于视频播放的嵌入式客户端插件的 Web 浏览器。出于安全目的,Wayland 在客户端之间施加了比 X 通常更严格的边界,因此这演示了如何使一个客户端充当另一个客户端的合成器(以嵌套方式)。
本月的几项工作集中在改进 shell 上。提出了 xdg_shell 协议,该协议将建立一个标准 API,具有诸如调整窗口大小或移动窗口、设置窗口状态(瞬态、最大化等)和设置窗口名称之类的功能。提出了包含来自 Raspberry Pi 技术演示的 shell 功能;拉入了一些修复程序,其他项目被认为更具装饰性,并且超出了 Weston 的范围。
Jason Ekstrand 提出了 libwayland 的语言绑定,例如,用 Java 编写客户端。如果它向更广泛的程序员开放 Wayland 客户端开发,这可能是一项重要的新功能。
除了 Wayland 核心开发之外,还开始出现在其他项目中添加 Wayland 兼容性的努力。Sam Spilsbury 宣布将 XBMC 媒体中心的概念验证端口移植到 Weston 中运行,使用 SDL 2.0。KDE 和 GNOME 桌面环境项目都已声明打算添加 Wayland 支持;Enlightenment 项目已经在 Wayland 上运行,并计划实现独立的 Wayland 合成器。
Cairo 开发Cairo 开发本月相当平静。该树正在为 1.12.16 版本稳定,尽管尚未宣布日期或发布计划。
本月大约有十几个补丁专注于测试套件修复和清理。特别是,添加了对识别冗余参考图像的支持;这用于从代码库中删除一堆不需要的文件。
此外,Henry Song 登陆了三个补丁来修复模板缓冲区问题。Behdad Estfahbod 登陆了一些从 FreeType 加载彩色字形的准备工作。
最终想法看看 X.org 的 DRI3 / Present 扩展是否会满足 Linux 发行版的图形需求,或者 Wayland 的采用是否会随着其技术的成熟而加速,这将是一件有趣的事情。或者,也许,将核心图形技术从 X.org 迁移到 Linux 内核将不可避免地导致合成器和新的图形项目的寒武纪爆发。Wayland 和 Mir 是否会成为取代 X 的唯一竞争者,或者它们是否仅仅为未来的项目铺平了道路?Wayland 协议是否具有足够的吸引力来防止碎片化,或者我们是否注定会看到许多建立在 Linux 内核之上的专用显示技术?
即将到来的活动- Linux Plumber's Conference:9 月 18 日至 20 日,路易斯安那州新奥尔良。图形和显示微型会议正在安排中。
- X.org 开发者大会:XDC2013 - 9 月 23 日至 25 日,俄勒冈州波特兰
- LibreGraphics Meeting:LGM2014 - 2014 年 4 月 2 日至 5 日:德国莱比锡