Skip to content

Latest commit

 

History

History
executable file
·
141 lines (107 loc) · 10.9 KB

File metadata and controls

executable file
·
141 lines (107 loc) · 10.9 KB

Mesa for Android Container

Forked From Mesa - The 3D Graphics Library

English | 简体中文 | 繁體中文


一个适用于 Android 容器(PRoot、Chroot、LXC、Droidspaces 等)的 Mesa 构建,支持 Adreno GPU 的硬件加速。

特性

  • Mesa 26.0.0 及以上版本的 Freedreno 和 Turnip 驱动支持 Adreno 8xx GPU。
  • 在多个主流的 Linux 发行版的 ARM64 Docker 容器下分别编译,兼容性更好,以 Android 为宿主机的 PRoot、Chroot、LXC、Droidspaces 容器均可使用本项目编译的 Mesa 驱动。
  • 对于部分 Adreno 6xx/7xx/8xx GPU,OpenGL、OpenGL ES、Vulkan 均可使用 Freedreno 驱动,不再需要使用 Zink 进行图形 API 调用转换,极大地提高了 GPU 的利用效率。
  • 只编译与绝大部分 Android 设备相关的驱动,减小包体体积。

兼容性

这里只展示了经我和其他人实测后确认支持的 GPU 型号,不代表其他的 GPU 型号不支持。你可以在 freedreno_devices.py 文件中搜索你设备的 GPU 型号(例如,Adreno 725 可搜索725),若该型号有完整的设备定义,则它很可能受支持。欢迎在 Issues 中分享驱动在你的设备上的运行情况,这将帮助我们完善下面的这张表。

GPU OpenGL OpenGL ES Vulkan
Adreno 660 ✔️支持 ✔️支持 ✔️支持
Adreno 710/720/730/735/740/750 ✔️支持 ✔️支持 ✔️支持
Adreno 810/829/830/840 ✔️支持 ✔️支持 ✔️支持

实验性支持(by whitebelyash):Adreno 825

安装

本项目的 Releases 有两种形式的安装包,一种可以使用 Linux 发行版的软件包管理器安装,另一种只能直接解压来安装。推荐使用第一种安装包,若需要最新的 Mesa 特性(如 Adreno 8xx 的支持),则可以使用第二种。

若常规的 Release (标题不带turnip-前缀)的 Turnip 驱动不能正常运行,可以使用未打补丁的 Turnip 驱动(标题带turnip-前缀),直接覆盖安装即可。

PS: 本项目提到的“未打补丁”指的是没有应用 xMeM 的原始补丁,依然会应用一些必要的补丁(如更多的 GPU 支持)。

使用软件包管理器

根据使用的 Linux 发行版,前往 Releases 下载某个对应的 Release 的所有软件包,按照 Release 说明中的安装说明进行安装。以下为一些主流的 Linux 发行版对应的最新 Release:

Linux 发行版 最新 Release 未打补丁的 Turnip 驱动
Debian 13 25.0.7-2+deb13u1 turnip-25.0.7-2+deb13u1
Ubuntu 24.04 LTS 25.0.7-0ubuntu0.24.04.2 turnip-25.0.7-0ubuntu0.24.04.2
Fedora 43 25.2.7-4.fc43 turnip-25.2.7-4.fc43
Arch Linux 26.2.0-2 turnip-26.2.0-2

直接解压

Note

Releases 中.tar.gz格式的安装包只能覆盖原来的 Mesa 驱动,卸载时需要手动删除解压得到的文件,仅供测试使用。

目前“直接解压”方式支持以下 Linux 发行版:

Linux 发行版 安装包文件名后缀
Debian 13 debian_trixie_arm64
Ubuntu 24.04 LTS ubuntu_noble_arm64
Ubuntu 25.10 ubuntu_questing_arm64
Ubuntu 26.04 LTS ubuntu_resolute_arm64
Fedora 43 fedora_43_arm64
Arch Linux archlinux_arm64
Void Linux void_arm64
  1. 前往 Releases 下载.tar.gz格式的安装包。请注意文件名中的 Linux 发行版后缀,如debian_trixie_arm64,只能安装发行版匹配的安装包。对于 Adreno 7xx,一般先解压标准安装包(包含 Freedreno),再解压未打补丁的 Turnip 安装包。两者最新的 Release 如下:
标准安装包 未打补丁的 Turnip 安装包
26.2.0-devel-20260511 turnip-26.2.0-devel-20260511

Note

对于 Adreno 8XX (尤其是 830 & 840),现在应该不再需要安装未打补丁的 Turnip 驱动了。标准安装包中打了补丁的 Turnip 驱动应该能正常运行。

若需要尽可能新的 Mesa 上游特性,可以使用Turnip 每周构建turnip-weekly

turnip-weekly可以与标准安装包(Release 标题不带turnip-前缀)搭配使用,也可以单独使用 (通常兼容性更好)。单独使用时,需要将环境变量MESA_LOADER_DRIVER_OVERRIDE的值由kgsl改为zink

Note

turnip-weekly由 GitHub Actions 每周定时拉取上游主线代码进行构建,且不经测试直接发布,所以可能会出现各种问题。这些问题通常是由于上游还未开发完成某个特性,需要等待上游将该特性开发完毕才能解决。所以当使用turnip-weekly遇到问题时,可以更换为其他版本的驱动,或者等待下周的构建。

  1. 直接将安装包解压到根目录。
sudo tar -zxvf mesa-for-android-container_26.0.0-devel-xxxxxxxx_debian_trixie_arm64.tar.gz -C /
sudo tar -zxvf turnip_26.0.0-devel-xxxxxxxx_debian_trixie_arm64.tar.gz -C /
  1. 刷新动态链接器缓存。
sudo ldconfig

卸载可参考以下命令:

# 复制这条命令输出的文件列表
tar tf mesa-for-android-container_26.0.0-devel-xxxxxxxx_debian_trixie_arm64.tar.gz | grep -v '/$' | tr '\n' ' ' ; echo
cd /
# 替换 <file-list> 为实际的文件列表
sudo rm <file-list>
# 重新安装发行版维护的 Mesa 驱动
# Debian 或 Ubuntu:
sudo apt update
sudo apt install --reinstall libegl-mesa0 libgbm1 libgl1-mesa-dri libglx-mesa0 mesa-libgallium mesa-vulkan-drivers
# Fedora:
sudo dnf reinstall mesa-filesystem mesa-libglapi mesa-libgbm mesa-libEGL mesa-libGL mesa-vulkan-drivers mesa-dri-drivers mesa-libOpenCL
# Arch Linux:
sudo pacman -S mesa mesa-docs opencl-mesa vulkan-freedreno vulkan-mesa-implicit-layers vulkan-mesa-layers

使用

在运行特定程序时指定环境变量MESA_LOADER_DRIVER_OVERRIDETU_DEBUG,如:

MESA_LOADER_DRIVER_OVERRIDE=kgsl TU_DEBUG=noconform glmark2

或者将其添加到/etc/environment文件中以便在开启容器时自动加载:

MESA_LOADER_DRIVER_OVERRIDE=kgsl
TU_DEBUG=noconform

开发

如果你是开发者,想要构建本项目的驱动或贡献代码,请参阅开发文档

基准测试

详细的测试结果:benchmark-result

设备 型号 SoC GPU glmark2 glmark2-es2 vkmark
Redmi K40 Pro M2012K11G 高通骁龙 888 Adreno 660 842 771 1170
Xiaomi Pad 6 Pro 23046RP50C 高通骁龙 8+ Gen 1 Adreno 730 1169 1143 263
REDMI K80 Pro 24122RKC7C 高通骁龙 8 Elite Adreno 830 3081 3083 308
Xiaomi 17 Pro Max 2509FPN0BC 高通骁龙 8 Elite Gen 5 Adreno 840 2947 2901 未测试
OnePlus 15 PLK110 高通骁龙 8 Elite Gen 5 Adreno 840 3574 3621 未测试

PS: Xiaomi 17 Pro Max 执行基准测试时连接了电源,性能有折损,正常情况下实际分数会更高。

感谢

  • Lucas Fryzek:Mesa Freedreno 驱动的 KGSL 后端代码的作者。
  • xMeM:将 Freedreno 驱动的 KGSL 后端移植到了 Termux:X11。
  • Robert Kirkman:整合并完善了 xMeM 的补丁。
  • Rob Clark:为 Adreno Gen8 架构(包含 Adreno 840)引入了 Freedreno (包含 Turnip)支持。
  • whitebelyash:为 Adreno 825 添加实验性支持。
  • Termux 维护团队及贡献者:为 Mesa 驱动在 Termux 上的正常运行开发了一系列的补丁。