Automated, bleeding-edge builds of the Mesa Turnip Vulkan driver — compiled directly from the latest upstream Mesa commits and packaged for AdrenoTools-compatible apps on Qualcomm Adreno GPUs.
Turnip is the open-source Mesa Vulkan driver for Qualcomm Adreno GPUs — developed as part of the Mesa project and maintained by the Freedreno community. Unlike the proprietary Qualcomm driver, Turnip is fully open-source and often ships fixes and feature support ahead of official Qualcomm releases.
This repo automatically builds Turnip from the absolute latest commit on mesa/main — no waiting for official Mesa releases. A Mesa upstream watcher polls for new commits every hour and triggers a fresh build automatically whenever mesa/main advances. The result is an AdrenoTools-compatible ZIP you can drop straight into any compatible app (BannerHub/BCI, Winlator, etc.) to get the most up-to-date driver available.
Each release ships three driver ZIPs — pick the one matching your GPU.
Download latest → · Full build history →
Pure Mesa main, no source patches. Compatible with Adreno 600–700 series GPUs (Snapdragon 600–800 series, including 7 Gen and 8 Gen 1–3).
Injects hardware-specific GPU entries and magic registers for Adreno 710, 720, and 722 on top of Mesa main via a710-720.py — based on community research by Vauzi-17. No upstream Mesa support exists for these GPUs yet. Early results are promising. Recommended: force sysmem mode via TU_DEBUG=sysmem until GMEM is confirmed stable. Winlator users: set WRAPPER_BLIT=1.
Targets Adreno 800-series (Snapdragon 8 Elite — A810, A825, A829, A830). Built from Mesa main with the following patches on top:
| Patch | What it does |
|---|---|
tu8_kgsl_26.patch |
9 commits from whitebelyash/mesa-tu8: UBWC gralloc detection, disable_gmem GPU property, A8xx magic regs, A810/A825/A829/A830 GPU configs, gmem cache fixes |
fix_a8xx_dev_info.py |
Re-adds disable_gmem to freedreno_dev_info.h and tu_cmd_buffer.cc — safeguard if the patch hunk drifts on a new Mesa commit |
apply_a8xx_gpus.py |
Ensures A810/A825/A829 GPU entries are present in freedreno_devices.py — safeguard if the patch hunk drifts on a new Mesa commit |
Use at your own risk.
| Workflow | Trigger | What it builds |
|---|---|---|
| Build Turnip (Combined) | Auto (mesa-watcher) or manual | Standard + A8xx + A710/A720/A722 in parallel; published as a single tagged release |
| Build Turnip A8xx (Experimental) | Manual | Standalone A8xx test build — faster iteration outside the release cycle |
| Build Turnip (Perf 6xx/7xx) | Manual | A6xx/A7xx only, compiled with -O3 + ThinLTO for performance testing |
- BannerHub / BCI: Component Manager → Add New Component → select the ZIP
- AdrenoTools-compatible apps (Winlator, etc.): load the ZIP in GPU driver settings
| Mesa version | 26.3.0 |
| Vulkan version | Vulkan 1.4.359 |
| Commit | 00e42c5 |
| Commit date | 2026-08-21 |
| Commit title | nvk: add a nvk_video_enabled() helper |
| Build date | 20260821 |
| Release | v26.3.0-20260821-r17 |
| Tag | Date | Commit | Description | Vulkan |
|---|---|---|---|---|
| v26.3.0-20260821-r17 | 2026-08-21 | 00e42c5 |
nvk: add a nvk_video_enabled() helper | Vulkan 1.4.359 |
| v26.3.0-20260821-r16 | 2026-08-21 | 355091f |
intel/brw: Add support to TANH instruction in Gfx 35 | Vulkan 1.4.359 |
| v26.3.0-20260821-r15 | 2026-08-21 | 4bd7d5b |
anv: don't forget to hash render pass color attachments | Vulkan 1.4.359 |
| v26.3.0-20260821-r14 | 2026-08-21 | bdcb5ca |
ethosu: Cache encoded weights within a subgraph | Vulkan 1.4.359 |
| v26.3.0-20260821-r13 | 2026-08-21 | 216b4e5 |
ac/rdp: expose elf_gfxip_level enum and conversion helper in the header | Vulkan 1.4.359 |
| v26.3.0-20260821-r12 | 2026-08-21 | e7b3fda |
zink/ci: fix wrongly identified failures on POLARIS10/NAVI10 | Vulkan 1.4.359 |
| v26.3.0-20260821-r11 | 2026-08-21 | 973858c |
radv: set radv_force_exclusive_image for few native Vulkan games | Vulkan 1.4.359 |
| v26.3.0-20260821-r10 | 2026-08-21 | 497f31e |
nir/opt_shared_vars_to_subgroup: detect loads that stay within subgroups | Vulkan 1.4.359 |
| v26.3.0-20260821-r9 | 2026-08-21 | d7a796e |
radv/ci: raise back the lockup timeout to the previous level | Vulkan 1.4.359 |
| v26.3.0-20260821-r8 | 2026-08-21 | 75bd6b2 |
etnaviv: Emit TFB_COMMAND after the TFB buffer state | Vulkan 1.4.359 |
| v26.3.0-20260821-r7 | 2026-08-21 | d945492 |
va: Set a reasonable minimum size for coded buffer | Vulkan 1.4.359 |
| v26.3.0-20260821-r6 | 2026-08-21 | 88c960b |
nvk: Advertise VK_KHR_device_address_commands | Vulkan 1.4.359 |
| v26.3.0-20260821-r5 | 2026-08-21 | 5ecf1f7 |
vulkan: fix strict aliasing violations with vk_foreach_struct | Vulkan 1.4.359 |
| v26.3.0-20260821-r4 | 2026-08-21 | 0a42d05 |
anv: Fix ASTC emulation sync in CopyMemoryToImage | Vulkan 1.4.359 |
| v26.3.0-20260821-r3 | 2026-08-21 | ae07c23 |
radv: remove unnecessary radv_write_data() | Vulkan 1.4.359 |
| v26.3.0-20260821-r2 | 2026-08-21 | d2e56df |
nak: add iadd3 ineg with constant rules | Vulkan 1.4.359 |
| v26.3.0-20260821 | 2026-08-21 | bde9b9b |
intel/dev: Enable NVL-S/U PCI IDs (without FORCE_PROBE) | Vulkan 1.4.359 |
| v26.3.0-20260820-r17 | 2026-08-20 | bb3fef5 |
jay: bump JAY_PARTITION_BLOCKS | Vulkan 1.4.359 |
| v26.3.0-20260820-r16 | 2026-08-20 | dbda147 |
panfrost/mid: Disable mediump lowering entirely | Vulkan 1.4.359 |
Tags follow the format v{mesa-version}-{YYYYMMDD}:
| Tag | Meaning |
|---|---|
v26.2.0-20260427 |
First build of the day |
v26.2.0-20260427-r2 |
Second build of the same day |
v26.2.0-20260427-r3 |
Third build of the same day |
The -r counter starts fresh each day. Multiple builds on the same day happen when Mesa receives more than one commit within 24 hours — each new upstream commit triggers a new build.
You can fork this repo and get fully automated builds running with minimal setup — no custom secrets or external accounts required. All CI uses the built-in GITHUB_TOKEN.
After forking:
-
Enable Actions — GitHub disables Actions on forks by default. Go to Settings → Actions → General and set it to Allow all actions.
-
Enable write permissions for Actions — Under Settings → Actions → General → Workflow permissions, select Read and write permissions. This is required for the watcher to commit hash files, update the README, and trigger builds.
-
Reset state files — The repo ships with state files that track upstream positions. Reset them so your fork starts clean:
mesa_hash.txt— clear or delete (watcher records the current Mesa HEAD here; a stale value skips the first build trigger)steven_last_tag.txt— clear or delete (same, for the StevenMXZ release watcher)perf_build_number.txt— set to1(incremented and committed by the perf build workflow; leaving it at the current value just means your first perf build gets a higher number, which is harmless but confusing)
-
Keep the branch named
A8xx— The README auto-update step inturnip_build_combined.ymlhasA8xxhardcoded in four places (git fetch/checkout/pull/push origin A8xx). If you rename the branch, that step will fail and your README won't auto-update. Either keep the branch asA8xxor do a find-and-replace in.github/workflows/turnip_build_combined.ymlto match your branch name. -
Update cosmetic repo references (optional) — A few strings in the workflows reference the original repo: patch links in release note bodies and
"author"inmeta.json. Search forThe412Bannerin.github/workflows/and update to your own username/repo if desired. These don't affect build functionality. -
Kick off your first build — GitHub Actions schedules don't fire automatically on forks until the repo sees some activity. Manually trigger either:
- Mesa Upstream Watcher → Run workflow — records the current Mesa HEAD and fires a combined build if it's new
- Build Turnip (Combined) → Run workflow — builds and publishes a release immediately without waiting for the watcher
Once those steps are done, the watcher polls Mesa upstream every hour and triggers a fresh build automatically — no further maintenance needed.
This project wouldn't exist without the hard work and dedication of these community members. A huge thank you to each of them for sharing their knowledge, publishing their work openly, and being available to help — they're the reason any of this is possible.
| Mesa / Freedreno | The open-source project that Turnip is part of — without Mesa and the Freedreno community's ongoing development, none of this exists. |
| whitebelyash | Author of the mesa-tu8 A8xx patchset — the foundation of our A8xx driver variant. His research into A810/A825/A829/A830 GPU enablement, KGSL support, and UBWC fixes made Snapdragon 8 Elite Turnip support possible. |
| Vauzi | Author of the A710/A720/A722 GPU enablement work — hardware-specific magic registers, tuned GPU properties, and chip ID research that our experimental 710/720/722 test build is built on. |
| bylaws | Creator of libadrenotools — the driver loading framework that makes all of this usable on Android without root. Without libadrenotools, custom Turnip builds would have no delivery mechanism. |
| Kimchi | Maintainer of AdrenoToolsDrivers — one of the most well-established and trusted custom driver repositories in the Android GPU community, built on top of libadrenotools. |
| StevenMXZ | For his ongoing Turnip builds and releases that the community relies on, and for making his work openly available for others to build upon. |
Also thanks to anyone I forgot and not listed — the Android GPU community is full of people whose contributions quietly make things work, and they deserve recognition too.
Join our Discord: https://discord.gg/n8S4G2WZQ4
