历时两年,Asahi Linux 宣布推出第一个公开的 Apple Silicon GPU 驱动程序版本。目前尚处在 alpha 阶段,“但它已经足够好,可以运行流畅的桌面体验和一些游戏”。
根据介绍,此版本为所有当前的 Apple M 系列系统提供 work-in-progress OpenGL 2.1 和 OpenGL ES 2.0 支持;其足以满足 GNOME 和 KDE 等桌面环境的硬件加速,以及较老的 3D 游戏 (如 Quake3 和 Neverball) 等的运行,可以在 4K 条件下以每秒 60 帧的速度运行上述所有的游戏。但值得注意的是,这些驱动程序尚未通过 OpenGL (ES) 一致性测试,所以可能会存在一些 bug。
开发团队表示,他们下一步的计划是支持更多应用。虽然 OpenGL (ES) 2 对某些应用来说已经足够了,但新的应用(尤其是游戏)需要更多的 OpenGL 功能。OpenGL (ES) 3 带来了大量的新功能,如 multiple render targets、multisampling 和 transform feedback。关于这些功能的工作正在进行中,但它们都需要大量的额外开发工作,而且都需要在 OpenGL (ES) 3.0 问世之前完成。
此外,Vulkan 相关的工作也在计划当中。虽然现在只提供 OpenGL,但开发团队在设计时已经考虑到了 Vulkan;其为 OpenGL 所做的大部分工作都将重新用于 Vulkan。不过按照估计,开发团队将优先推出 OpenGL 2 驱动而不是 Vulkan 1.0 驱动。原因在于 OpenGL 使用范围更广,因此优先支持 OpenGL 更有意义。
Asahi Linux 开发团队的工作内容包括有:
- 用于映射内存和提交内存映射工作的内核驱动程序
- 一个用户空间驱动程序,用于将 OpenGL 和 Vulkan 调用转换为图形内存中的硬件特定数据结构
- 将 GLSL 等着色编程语言翻译成硬件指令集的编译器
团队成员间进行了分工合作:由 Alyssa Rosenzweig 编写 OpenGL 驱动和编译器、Asahi Lina 编写内核驱动程序并帮助开发 OpenGL、Dougall Johnson 与 Alyssa 一起进行指令集的逆向工程,以及 Ella Stanforth 研究 Vulkan 驱动程序,重用内核驱动、编译器和一些与 OpenGL 驱动共享的代码。
“当然,仅凭我们自己是不可能在两年内构建一个 OpenGL 驱动的。感谢自由和开源软件的力量,我们站在了 FOSS 巨头的肩膀上”。
编译器实现了一个“NIR”后端、内核驱动程序使用了 Linux 内核的“直接渲染管理器 (DRM)”子系统来以最小化 boilerplate;OpenGL 驱动程序在 Mesa 内部实现了“Gallium3D”API,“通过 Mesa 和 Gallium3D,我们受益于 30 年的 OpenGL 驱动程序开发,以及将 OpenGL 转换为更简单的 Gallium3D 的通用代码。感谢 NIR、Mesa 和 Gallium3D 令人难以置信的工程设计,我们的逆向工程师团队可以专注于剩下的东西:Apple 硬件”。
由于驱动程序尚处于开发中,因此仍存在许多已知问题,官方提供了一份如何报告 bug 的快速指南。用户可定期更新软件包以获得更新和错误修复,更多详情可查看公告。