From 0219ff84b372c9d38aad4e40f448c20ec3d1588e Mon Sep 17 00:00:00 2001 From: lfdevs Date: Mon, 28 Sep 2026 12:22:36 +0800 Subject: [PATCH] enhance(main/mesa): Freedreno KGSL & Turnip for Termux native --- .../0007-use-mtx_t-operations-in-turnip.patch | 10 +-- .../mesa/0013-detect-sve-sve2-support.patch | 59 --------------- ...nofficial_support_adreno_710_720_722.patch | 74 ------------------- .../0017-preserve-egl-support-in-zink.patch | 40 ---------- ...le-general-layout-in-zink-for-turnip.patch | 22 ------ .../0022-fix-epoll-header-inclusion.patch | 24 ++++++ packages/mesa/build.sh | 41 ++++++++-- .../mesa/mesa-vulkan-icd-virtio.subpackage.sh | 7 -- 8 files changed, 64 insertions(+), 213 deletions(-) delete mode 100644 packages/mesa/0013-detect-sve-sve2-support.patch delete mode 100644 packages/mesa/0016-unofficial_support_adreno_710_720_722.patch delete mode 100644 packages/mesa/0017-preserve-egl-support-in-zink.patch delete mode 100644 packages/mesa/0018-disable-general-layout-in-zink-for-turnip.patch create mode 100644 packages/mesa/0022-fix-epoll-header-inclusion.patch delete mode 100644 packages/mesa/mesa-vulkan-icd-virtio.subpackage.sh diff --git a/packages/mesa/0007-use-mtx_t-operations-in-turnip.patch b/packages/mesa/0007-use-mtx_t-operations-in-turnip.patch index 5470749da8e..616dfed1a14 100644 --- a/packages/mesa/0007-use-mtx_t-operations-in-turnip.patch +++ b/packages/mesa/0007-use-mtx_t-operations-in-turnip.patch @@ -1,6 +1,6 @@ --- a/src/freedreno/vulkan/tu_shader.cc +++ b/src/freedreno/vulkan/tu_shader.cc -@@ -1980,10 +1980,10 @@ +@@ -2694,10 +2694,10 @@ tu_upload_shader(struct tu_device *dev, size += vpc_size; } @@ -13,7 +13,7 @@ if (result != VK_SUCCESS) return result; -@@ -2013,9 +2013,9 @@ +@@ -2727,9 +2727,9 @@ tu_upload_shader(struct tu_device *dev, result = tu_setup_pvtmem(dev, shader, &pvtmem_config, pvtmem_size, per_wave); if (result != VK_SUCCESS) { @@ -25,7 +25,7 @@ return result; } -@@ -2419,10 +2419,10 @@ +@@ -3531,10 +3531,10 @@ tu_empty_shader_create(struct tu_device *dev, if (!shader) return VK_ERROR_OUT_OF_HOST_MEMORY; @@ -38,9 +38,9 @@ if (result != VK_SUCCESS) { vk_free(&dev->vk.alloc, shader); -@@ -2528,9 +2528,9 @@ - { +@@ -3645,9 +3645,9 @@ tu_shader_destroy(struct tu_device *dev, tu_cs_finish(&shader->cs); + TU_RMV(resource_destroy, dev, &shader->bo); - pthread_mutex_lock(&dev->pipeline_mutex); + mtx_lock(&dev->pipeline_mutex); diff --git a/packages/mesa/0013-detect-sve-sve2-support.patch b/packages/mesa/0013-detect-sve-sve2-support.patch deleted file mode 100644 index a9d2a422e04..00000000000 --- a/packages/mesa/0013-detect-sve-sve2-support.patch +++ /dev/null @@ -1,59 +0,0 @@ -https://github.com/llvm/llvm-project/issues/114987 -https://github.com/termux/termux-packages/issues/24544 - ---- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp -+++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp -@@ -88,6 +88,23 @@ - #include "lp_bld_misc.h" - #include "lp_bld_debug.h" - -+#if __has_include() -+#include -+#define HAVE_SYS_AUXV 1 -+#ifndef AT_HWCAP -+#define AT_HWCAP 16 -+#endif -+#ifndef AT_HWCAP2 -+#define AT_HWCAP2 26 -+#endif -+#ifndef HWCAP_SVE -+#define HWCAP_SVE (1 << 22) -+#endif -+#ifndef HWCAP2_SVE2 -+#define HWCAP2_SVE2 (1 << 1) -+#endif -+#endif -+ - static void lp_run_atexit_for_destructors(void); - - namespace { -@@ -446,6 +463,29 @@ - MAttrs.push_back("-lasx"); - #endif - #endif -+ -+#if DETECT_ARCH_AARCH64 && defined(HAVE_SYS_AUXV) -+ // Guess SVE/SVE2 support on ARM64 -+ bool has_sve = getauxval(AT_HWCAP) & HWCAP_SVE; -+ bool has_sve2 = getauxval(AT_HWCAP2) & HWCAP2_SVE2; -+ MAttrs.push_back(has_sve ? "+sve" : "-sve"); -+ MAttrs.push_back(has_sve2 ? "+sve2" : "-sve2"); -+#endif -+ -+ // Allow adding extra MAttrs through envs -+ char *env_extra_mattrs = getenv("GALLIVM_EXTRA_MATTRS"); -+ if (env_extra_mattrs != NULL) { -+ char *dup = strdup(env_extra_mattrs); -+ if (dup != NULL) { -+ char *state; -+ char *token = strtok_r(dup, ",", &state); -+ while (token) { -+ MAttrs.push_back(token); -+ token = strtok_r(NULL, ",", &state); -+ } -+ free(dup); -+ } -+ } - } - - void diff --git a/packages/mesa/0016-unofficial_support_adreno_710_720_722.patch b/packages/mesa/0016-unofficial_support_adreno_710_720_722.patch deleted file mode 100644 index 068e6702115..00000000000 --- a/packages/mesa/0016-unofficial_support_adreno_710_720_722.patch +++ /dev/null @@ -1,74 +0,0 @@ -Created by, or sourced from, Vauzi-17 -https://github.com/Vauzi-17/710 -Upstream issue: -https://gitlab.freedesktop.org/mesa/mesa/-/issues/13036 - ---- a/src/freedreno/common/freedreno_devices.py -+++ b/src/freedreno/common/freedreno_devices.py -@@ -1149,6 +1149,66 @@ a740_raw_magic_regs = [ - [A6XXRegs.REG_A6XX_UCHE_UNKNOWN_0E12, 0], - ] - -+add_gpus([ -+ GPUId(chip_id=0x07010000, name="FD710"), -+ GPUId(chip_id=0xffff07010000, name="FD710"), -+ ], A6xxGPUInfo( -+ CHIP.A7XX, -+ [a7xx_base, a7xx_gen1], -+ num_ccu = 3, -+ tile_align_w = 64, -+ tile_align_h = 32, -+ tile_max_w = 1024, -+ tile_max_h = 1024, -+ num_vsc_pipes = 32, -+ cs_shared_mem_size = 32 * 1024, -+ wave_granularity = 2, -+ fibers_per_sp = 128 * 2 * 16, -+ highest_bank_bit = 16, -+ magic_regs = a730_magic_regs, -+ raw_magic_regs = a730_raw_magic_regs, -+ )) -+ -+add_gpus([ -+ GPUId(chip_id=0x43020000, name="FD720"), -+ GPUId(chip_id=0xffff43020000, name="FD720"), -+ ], A6xxGPUInfo( -+ CHIP.A7XX, -+ [a7xx_base, a7xx_gen1], -+ num_ccu = 3, -+ tile_align_w = 64, -+ tile_align_h = 32, -+ tile_max_w = 1024, -+ tile_max_h = 1024, -+ num_vsc_pipes = 32, -+ cs_shared_mem_size = 32 * 1024, -+ wave_granularity = 2, -+ fibers_per_sp = 128 * 2 * 16, -+ highest_bank_bit = 16, -+ magic_regs = a730_magic_regs, -+ raw_magic_regs = a730_raw_magic_regs, -+ )) -+ -+add_gpus([ -+ GPUId(chip_id=0x43020100, name="FD722"), -+ GPUId(chip_id=0xffff43020100, name="FD722"), -+ ], A6xxGPUInfo( -+ CHIP.A7XX, -+ [a7xx_base, a7xx_gen1], -+ num_ccu = 3, -+ tile_align_w = 64, -+ tile_align_h = 32, -+ tile_max_w = 1024, -+ tile_max_h = 1024, -+ num_vsc_pipes = 32, -+ cs_shared_mem_size = 32 * 1024, -+ wave_granularity = 2, -+ fibers_per_sp = 128 * 2 * 16, -+ highest_bank_bit = 16, -+ magic_regs = a730_magic_regs, -+ raw_magic_regs = a730_raw_magic_regs, -+ )) -+ - add_gpus([ - # These are named as Adreno730v3 or Adreno725v1. - GPUId(chip_id=0x07030002, name="FD725"), diff --git a/packages/mesa/0017-preserve-egl-support-in-zink.patch b/packages/mesa/0017-preserve-egl-support-in-zink.patch deleted file mode 100644 index 34a793c68ac..00000000000 --- a/packages/mesa/0017-preserve-egl-support-in-zink.patch +++ /dev/null @@ -1,40 +0,0 @@ -mesa upstream code 'thinks' that if 'x11_dri3_open()' -has a negative retval, then DRI3 EGL acceleration in Zink with the current settings -is impossible in all cases and it disables Zink and falls back to software rendering. - -However, Termux:X11 is a 3rd party edge case where, in actual testing, -for a very long time throughout the past year of mesa releases, -even if 'x11_dri3_open()' has a negative retval, -for some reason Zink+Tunip GPU acceleration still works if force-enabled -anytime that software rendering is not the initial default. - -This 'Termux-unaware' upstream mesa codepath that fails to 'understand' the true -capabilities of Zink+Turnip+Termux:X11 has gradually been building up in the background -for the last several months, but in this commit: -https://gitlab.freedesktop.org/mesa/mesa/-/commit/3294cad34159bd5317e3dfb0cb4e0ba5caca9f77 -the 'switch was flipped' to the new codepath, so to speak, locking vanilla mesa's EGL -support away from the Zink+Turnip+Termux:X11 codepath unless some kind of intervention -is performed, such as this patch. - ---- a/src/egl/drivers/dri2/platform_x11_dri3.c -+++ b/src/egl/drivers/dri2/platform_x11_dri3.c -@@ -535,7 +535,7 @@ dri3_x11_connect(struct dri2_egl_display *dri2_dpy, bool swrast) - _eglLog(_EGL_WARNING, "DRI3: Failed to initialize"); - } - -- return false; -+ return true; - } - - loader_get_user_preferred_fd(&dri2_dpy->fd_render_gpu, ---- a/src/egl/main/eglapi.c -+++ b/src/egl/main/eglapi.c -@@ -683,7 +683,7 @@ eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) - "Found 'LIBGL_ALWAYS_SOFTWARE' set, will use a CPU renderer"); - - const char *env = os_get_option("MESA_LOADER_DRIVER_OVERRIDE"); -- disp->Options.Zink = env && !strcmp(env, "zink"); -+ disp->Options.Zink = !env || !strcmp(env, "zink"); - - const char *gallium_hud_env = os_get_option("GALLIUM_HUD"); - disp->Options.GalliumHudWarn = diff --git a/packages/mesa/0018-disable-general-layout-in-zink-for-turnip.patch b/packages/mesa/0018-disable-general-layout-in-zink-for-turnip.patch deleted file mode 100644 index dc6d5eaa11b..00000000000 --- a/packages/mesa/0018-disable-general-layout-in-zink-for-turnip.patch +++ /dev/null @@ -1,22 +0,0 @@ -Partially reverts https://gitlab.freedesktop.org/mesa/mesa/-/commit/622612f67ea72298c3d85dfe53c5d54ee9f98527 -because that commit causes severe artifacts in Webrender in Firefox in Termux:X11 with GLX enabled and EGL -force-disabled in Zink in Turnip on Adreno devices, while using the about:config settings -gfx.webrender.all=true and gfx.x11-egl.force-disabled=true, -and doing this prevents the artifacts from occurring. - ---- a/src/gallium/drivers/zink/zink_screen.c -+++ b/src/gallium/drivers/zink/zink_screen.c -@@ -3044,10 +3044,12 @@ init_driver_workarounds(struct zink_screen *screen) - case VK_DRIVER_ID_MESA_LLVMPIPE: - case VK_DRIVER_ID_MESA_NVK: - case VK_DRIVER_ID_NVIDIA_PROPRIETARY: -- case VK_DRIVER_ID_MESA_TURNIP: - case VK_DRIVER_ID_QUALCOMM_PROPRIETARY: - screen->driver_workarounds.general_layout = true; - break; -+ case VK_DRIVER_ID_MESA_TURNIP: -+ screen->driver_workarounds.general_layout = false; -+ break; - default: - screen->driver_workarounds.general_layout = screen->info.have_KHR_unified_image_layouts; - break; diff --git a/packages/mesa/0022-fix-epoll-header-inclusion.patch b/packages/mesa/0022-fix-epoll-header-inclusion.patch new file mode 100644 index 00000000000..0c4c128dde5 --- /dev/null +++ b/packages/mesa/0022-fix-epoll-header-inclusion.patch @@ -0,0 +1,24 @@ +diff --git a/src/util/os_file.c b/src/util/os_file.c +index d3d3fb01580..ffffb6d4d06 100644 +--- a/src/util/os_file.c ++++ b/src/util/os_file.c +@@ -200,6 +200,10 @@ os_read_file(const char *filename, size_t *size) + return buf; + } + ++#if DETECT_OS_LINUX ++#include ++#endif ++ + #if (DETECT_OS_LINUX || DETECT_OS_FREEBSD) && ALLOW_KCMP + + #include +@@ -210,8 +214,6 @@ os_read_file(const char *filename, size_t *size) + #define KCMP_FILE 0 + #endif + +-#elif DETECT_OS_LINUX +-#include + #endif + + #if DETECT_OS_DRAGONFLY || DETECT_OS_FREEBSD diff --git a/packages/mesa/build.sh b/packages/mesa/build.sh index b556dd721c5..7533af8ccc3 100644 --- a/packages/mesa/build.sh +++ b/packages/mesa/build.sh @@ -3,10 +3,11 @@ TERMUX_PKG_DESCRIPTION="An open-source implementation of the OpenGL specificatio TERMUX_PKG_LICENSE="MIT" TERMUX_PKG_LICENSE_FILE="docs/license.rst" TERMUX_PKG_MAINTAINER="@termux" -TERMUX_PKG_VERSION="26.2.3" -TERMUX_PKG_SRCURL="https://archive.mesa3d.org/mesa-${TERMUX_PKG_VERSION}.tar.xz" -TERMUX_PKG_SHA256=1628058a8d2c0615975de5a15ab7bbb9638c50000b5bed9456ff423ea034a81f -TERMUX_PKG_AUTO_UPDATE=true +TERMUX_PKG_VERSION="26.3.0" +TERMUX_PKG_SRCURL=git+https://github.com/lfdevs/mesa-for-android-container.git +TERMUX_PKG_GIT_BRANCH=dev/adreno-main +_COMMIT=98f3d6229d61452cef80f8563af7c56ae599dc14 +TERMUX_PKG_AUTO_UPDATE=false TERMUX_PKG_DEPENDS="libandroid-shmem, libc++, libdrm, libglvnd, libllvm (<< $TERMUX_LLVM_NEXT_MAJOR_VERSION), libwayland, libx11, libxext, libxfixes, libxshmfence, libxxf86vm, ncurses, vulkan-loader, zlib, zstd" TERMUX_PKG_SUGGESTS="mesa-dev" TERMUX_PKG_BUILD_DEPENDS="libclc, libwayland-cross-scanner, libwayland-protocols, libxrandr, llvm, llvm-tools, mlir, spirv-tools, xorgproto" @@ -28,7 +29,6 @@ TERMUX_PKG_EXTRA_CONFIGURE_ARGS=" -Dllvm=enabled -Dshared-llvm=enabled -Dplatforms=x11,wayland --Dgallium-drivers=llvmpipe,softpipe,virgl,zink -Dgallium-rusticl=true -Dglvnd=enabled -Dxmlconfig=disabled @@ -137,6 +137,14 @@ termux_step_host_build() { } termux_step_post_get_source() { + if [ -n "${_COMMIT}" ]; then + # Ensure the requested commit is available when cloning shallow. + if git -C "$TERMUX_PKG_SRCDIR" rev-parse --is-shallow-repository | grep -q true; then + git -C "$TERMUX_PKG_SRCDIR" fetch --unshallow + fi + git -C "$TERMUX_PKG_SRCDIR" checkout "$_COMMIT" + fi + # Do not use meson wrap projects rm -rf subprojects } @@ -185,12 +193,15 @@ termux_step_pre_configure() { export PATH="${_WRAPPER_BIN}:${CARGO_HOME}/bin:${HOSTBUILD_ROOTFS}/usr/bin:${PATH}" export LD_LIBRARY_PATH="${HOSTBUILD_ROOTFS}/usr/lib/x86_64-linux-gnu" - local _vk_drivers="swrast,virtio" + local _vk_drivers="swrast" + local _opengl_drivers="llvmpipe,softpipe,virgl,zink" if [ $TERMUX_ARCH = "arm" ] || [ $TERMUX_ARCH = "aarch64" ]; then _vk_drivers+=",freedreno" + _opengl_drivers+=",freedreno" TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -Dfreedreno-kmds=msm,kgsl" fi TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -Dvulkan-drivers=$_vk_drivers" + TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -Dgallium-drivers=$_opengl_drivers" } termux_step_post_configure() { @@ -198,6 +209,24 @@ termux_step_post_configure() { } termux_step_post_make_install() { + # Avoid hard links + local f1 + for f1 in $TERMUX_PREFIX/lib/dri/*; do + if [ ! -f "${f1}" ]; then + continue + fi + local f2 + for f2 in $TERMUX_PREFIX/lib/dri/*; do + if [ -f "${f2}" ] && [ "${f1}" != "${f2}" ]; then + local s1=$(stat -c "%i" "${f1}") + local s2=$(stat -c "%i" "${f2}") + if [ "${s1}" = "${s2}" ]; then + ln -sfr "${f1}" "${f2}" + fi + fi + done + done + # Create symlinks ln -sf libEGL_mesa.so "${TERMUX_PREFIX}/lib/libEGL_mesa.so.0" ln -sf libGLX_mesa.so "${TERMUX_PREFIX}/lib/libGLX_mesa.so.0" diff --git a/packages/mesa/mesa-vulkan-icd-virtio.subpackage.sh b/packages/mesa/mesa-vulkan-icd-virtio.subpackage.sh deleted file mode 100644 index 0259ffe1658..00000000000 --- a/packages/mesa/mesa-vulkan-icd-virtio.subpackage.sh +++ /dev/null @@ -1,7 +0,0 @@ -TERMUX_SUBPKG_DESCRIPTION="Mesa's VirtIO Vulkan ICD" -TERMUX_SUBPKG_DEPEND_ON_PARENT=false -TERMUX_SUBPKG_DEPENDS="libandroid-shmem, zlib, zstd, libdrm, libxcb, libx11, libxshmfence, libwayland" -TERMUX_SUBPKG_INCLUDE=" -lib/libvulkan_virtio.so -share/vulkan/icd.d/virtio_icd.*.json -"