Turnip Adreno (TM) 619 编译及使用问题讨论
现在该device上已经能够正常运行vkcube,vkcubepp,以及turnip zink模式下跑glxgears以及glmark2。值得注意的是跑vkcube已经没有dri3问题。boxwine直接使用turnip zink会出问题,现在的方式是linux deploy chroot 容器里直接通过turnip zink + vtest来运行wine。甜甜圈会比termux zink高,容器内vtest方式甜甜圈fps最高5,平均4fps。并且zink xlib不再是必要的。mesa官方的zink就能用,不用编译zink-xlib了。 如果使用xlib glxgears将变成白底的。 图1:官方zink,写专栏挂后台跑的,所以帧数低了,正常情况能到500多fps,下方zink-xlib的示例就是。
图2:zink-xlib
下面是编译教程: [1]准备: 你需要修改/etc/apt/sources.list,将deb-src前的#号干掉,然后sudo apt update,sudo apt-get build-dep mesa。为了编译armhf库你需要预先安装以下armhf库,启用armhf架构参考以前安装wine的教程里写的。 sudo apt update && sudo apt upgrade && sudo apt build-dep mesa && sudo apt install cmake git wget g++-arm-linux-gnueabihf zlib1g-dev:armhf libexpat1-dev:armhf libdrm-dev:armhf libx11-dev:armhf libxext-dev:armhf libxdamage-dev:armhf libxcb-glx0-dev:armhf libx11-xcb-dev:armhf libxcb-dri2-0-dev:armhf libxcb-dri3-dev:armhf libxcb-present-dev:armhf libxshmfence-dev:armhf libxxf86vm-dev:armhf libxrandr-dev:armhf libwayland-dev:armhf wayland-protocols:armhf libwayland-egl-backend-dev:armhf libxcb-shm0-dev:armhf pkg-config:armhf llvm-16:armhf [2]编译阶段 (1)编译arm64 mesa,源码请自行从mesa3d网站下载。 tar -xvf mesa-23.1.2.tar.xz cd mesa-23.1.2 mkdir b cd b meson .. -Dgallium-drivers=virgl,zink,swrast,d3d12 -Dvulkan-drivers=freedreno,swrast -Dglx=dri -Dplatforms=x11,wayland -Dbuildtype=release -Dllvm=enabled -Dxlib-lease=enabled -Dglx=dri -Dgles2=enabled -Dgallium-nine=true -Dgallium-opencl=icd -Dfreedreno-kmds=kgsl,msm sudo ninja install (2)交叉编译armhf架构的mesa nano cross.txt 写上以下内容后请保存并退出nano [binaries] c = 'arm-linux-gnueabihf-gcc' cpp = 'arm-linux-gnueabihf-g++' ar = 'arm-linux-gnueabihf-ar' strip = 'arm-linux-gnueabihf-strip' pkgconfig = 'arm-linux-gnueabihf-pkg-config' [host_machine] system = 'linux' cpu_family = 'arm' cpu = 'arm' endian = 'little' 退出nano后 meson build32 --cross-file=cross.txt --libdir=lib/arm-linux-gnueabihf -Dgallium-drivers=freedreno,zink,swrast -Dvulkan-drivers=freedreno -Dgallium-nine=true -Dfreedreno-kmds=kgsl,msm -Dglx=dri -Dxlib-lease=enabled -Dplatforms=x11,wayland sudo ninja -C build32/ install 安装完成后如果你想验证armhf架构的vulkan请这样 LIBGL_DRIVERS_PATH="/usr/local/lib/arm-linux-gnueabihf/dri/" VK_ICD_FILENAMES=/usr/local/share/vulkan/icd.d/freedreno_icd.aarch64.json MESA_VK_WSI_DEBUG=sw vkcubepp vkcube将正常运行,终端将获得以下输出 Selected GPU 0: Turnip Adreno (TM) 619, type: IntegratedGpu (3)编译mesa zink-xlib不是必要的,所以简单提及,这个不使用mesa3d官方源码,改而使用github Zink-Mesa-Xlib这个存储库的代码。 编译64位mesa zink-xlib指令为 meson build -Dgallium-va=disabled -Dgallium-drivers=virgl,zink,swrast -Ddri3=disabled -Dvulkan-drivers= -Dglx=xlib -Dplatforms=x11 -Dbuildtype=release &&sudo ninja -C build32/ 编译32位mesa zink-xlib指令为 meson build32 --cross-file=cross.txt --libdir=lib/arm-linux-gnueabihf -Dgallium-va=disabled -Dgallium-drivers=virgl,zink,swrast -Ddri3=disabled -Dvulkan-drivers= -Dglx=xlib -Dplatforms=x11 -Dbuildtype=release && ninja -C build32/ 由于只需要编译好的zink-xlib,所以不要安装,安装将破坏之前编译的mesa官方代码编译出来的文件,应该采用复制dll文件到对应文件夹的方式进行安装。 由于zink被编译成xlib,所以其产物为libGL.so.1.5.0,libGL.so.1.5,libGL.so.1三个so库。 zink-xlib将位于build和build32文件夹下的src/gallium/targets/libgl-xlib/目录下。 将其文件分别复制到/usr/local/lib/aarch64-linux-gnu/和/usr/local/lib/arm-linux-gnueabihf/下面即可。 [使用] 建议直接 LIBGL_DRIVERS_PATH="/usr/local/lib/aarch64-linux-gnu/dri/:/usr/local/lib/arm-linux-gnueabihf/dri/" VK_ICD_FILENAMES=/usr/local/share/vulkan/icd.d/freedreno_icd.aarch64.json MESA_VK_WSI_DEBUG=sw MESA_LOADER_DRIVER_OVERRIDE=zink glmark2 这样跑opengl程序 LIBGL_DRIVERS_PATH="/usr/local/lib/aarch64-linux-gnu/dri/:/usr/local/lib/arm-linux-gnueabihf/dri/" VK_ICD_FILENAMES=/usr/local/share/vulkan/icd.d/freedreno_icd.aarch64.json MESA_VK_WSI_DEBUG=sw vkcubepp 这样来跑vulkan程序。 设置为全局变量不推荐,哪样启动桌面,任务栏会消失的。 可以将以下变量设置为全局变量。 sudo nano /etc/profile export LIBGL_DRIVERS_PATH="/usr/local/lib/aarch64-linux-gnu/dri/:/usr/local/lib/arm-linux-gnueabihf/dri/" export VK_ICD_FILENAMES=/usr/local/share/vulkan/icd.d/freedreno_icd.aarch64 export MESA_VK_WSI_DEBUG=sw export MESA_LOADER_DRIVER_OVERRIDE=zink source /etc/profile 声明:本教程参考了 github项目Herick75/Pre-Compiled-Mesa-Turnip-Zink github项目Heasterian/Box86-64-on-SD845-mobian 并修改了部分编译代码和交叉配置文件。并不再使用zink-xlib,提供zink-xlib的编译指令只是为了方便linux deploy交流群群友参考,本文仅作讨论,勿作它用。 最后附上两张甜甜圈供大家对比。renderer和分数不同。容器内vtest分数比较高。 (1)chroot容器内turnip zink + vtest
(2)termux zink转发linux deploy