Repository navigation
Experimental build based on Mesa (main branch).
Not officially supported — do not report issues to Mesa upstream.
Support
- Need help? https://t.me/vauzi_17
Changes in v4.5
- Synced with the latest Mesa main branch
Driver Variants
- Regular / Universal (
Turnip-710-720-722-v4.5.zip):
Universal build based directly on upstream Mesa for broad compatibility across different emulators and native applications. - Switch (
Turnip-710-720-722-v4.5-sw.zip):
Specifically tuned and optimized for Nintendo Switch emulators (Eden, etc.) on Adreno 7xx and 8xx. - Winlator (
Turnip-710-720-722-v4.5-win.zip):
Specifically tuned and optimized for Winlator and Windows/DirectX emulation environments on Android.
Environment Configuration (default_env.conf) (Optional)
Download: default_env.conf
File Placement
Save the downloaded default_env.conf file to:
- Per-App Storage:
/sdcard/Android/data/<package_name>/files/default_env.conf- Eden:
/sdcard/Android/data/<package_name>/files/default_env.conf - Winlator:
/sdcard/Android/data/com.winlator/files/default_env.conf
- Eden:
- Global Fallback:
/sdcard/default_env.conf
Note: Settings already active by default in the driver are commented out with
#. You only need to remove the#or adjust the value if you want to override the driver's default behavior.
Build Info
| Mesa | 27.0.0-devel |
| Mesa commit | 02f13375231b (2026-10-24) |
| Vulkan | 1.4.363 |
| Android NDK | r29 |
| Build date | 2026-10-25 |
Applied Patches
Regular / Universal (Upstream)
01-u_gralloc-always-use-ubwc-detection.patch— u_gralloc: always use the UBWC detection path
Switch (SW)
01-u_gralloc-always-use-ubwc-detection.patch— u_gralloc: always use the UBWC detection path02-tu-lrz-reuse-dont-care-in-sysmem.patch— tu/lrz: reuse LRZ state for DONT_CARE depth when rendering in sysmem06-a8xx-cube-coord-sanitize.patch— ir3: Sanitize cube map directions on A8XX07-a8xx-kgsl-ib-vbo-alias.patch— tu/kgsl: Fetch A8XX command streams through a virtual BO08-tu-kgsl-cache-retired-a8xx-ib-storage.patch— tu/kgsl: Cache retired A8XX IB storage09-tu-ir3-subgroup-half-warp.patch— tu,ir3: Support a required subgroup size of half a wave11-wn-fix-a8xx-dev-info.py— Idempotent fixup for freedreno_dev_info.h and tu_cmd_buffer.cc12-wn-apply-a8xx-gpus.py— WN-Turnip A8xx GPU support applicator for freedreno_devices.py14-wn-apply-a7xx-gen2-ubwc-hint.py— WN-Turnip A7xx_gen2 UI-corruption fix for FD740 / Adreno X1-8515-wn-add-aimapper-gralloc.py— Add the IMapper5 stable-C gralloc backend (SP-HAL loaded) to Mesa16-wn-add-ubwc-swapchain-usage.py— Request UBWC-compressed swapchain buffers on Adreno17-wn-apply-perf-variant.py— Apply aggressive autotune and variant-specific GPU clock forcing for performance18-wn-a8xx-shared-mem.py— Robust equivalent of whitebelyash/mesa-unified turnip/gen8 commit20-default-env.py— Built-in default environment variables for Turnip with app override support30-tu-z-mutable.py— Turnip-Z port: keep MUTABLE_FORMAT images tiled (and UBWC) on all GPUs31-tu-z-lrz-rescue.py— Turnip-Z port: LRZ rescue on in-render-pass depth clears32-tu-z-texfast.py— Turnip-Z port: cheaper texture sampling33-tu-z-bgra-swap.py— Turnip-Z port: real color swap for B8G8R8A8 on tiled images36-tu-z-sysmem-only.py— Turnip-Z port: force sysmem rendering, and keep the bin-restore preamble37-tu-z-bgra-companion.py— Turnip-Z port: BGRA8 companion changes with multi-mode color swap support40-fd710-blob.py— FD710: consolidated hardware property and register tuning from Adreno 710 blob analysis (V@0615)48-a8xx-lrz-color-mask.py— A8xx: Emit GRAS_LRZ_COLOR_COMP_MASK (0x810c) in blend dynamic state50-fd720-blob.py— FD720: register tuning from Adreno 720 blob analysis (V@0676)51-fd810-blob.py— FD810: unified Adreno 810 hardware tuning from Vulkan blob trace analysis (V@0800.74)52-a8xx-resolve-cr-cntl.py— A8XX: Emit REG_A8XX_RB_RESOLVE_CR_CNTL=1 in preamble magic registers53-a8xx-lrz-bidir-disable.py— A8XX: Set FORCE_BI_DIR_LRZ_DISABLE in sysmem and disabled LRZ render passes54-a8xx-sp-hysteresis.py— A8XX: Initialize Shader Processor hysteresis thresholds in context preamble55-tu-lrz-dir-change-no-invalidate.py— Preserve LRZ state across draws on depth compare-op direction change56-fd722-blob.py— FD722: register tuning and hardware properties for Adreno 722 from Qualcomm blob analysis (chip_id 0x43020100)60-tu-sysmem-wfi-relax.py— Relax subpass slice wait from WFI to WAIT_FOR_ME in sysmem mode61-tu-lrz-fs-sideeffects-no-invalidate.py— Preserve LRZ state across draws when fragment shader has side effects62-tu-draw-state-skip-identical.py— Avoid redundant dynamic draw state packet emission63-ir3-sched-prefer-lower-live.py— Prioritize instructions with lower live register effect during pressure growth65-tu-z-shader-cache.py— Turnip-Z port: optional on-disk shader cache for Android emulators
Winlator / Windows (WIN)
01-u_gralloc-always-use-ubwc-detection.patch— u_gralloc: always use the UBWC detection path02-tu-lrz-reuse-dont-care-in-sysmem.patch— tu/lrz: reuse LRZ state for DONT_CARE depth when rendering in sysmem06-a8xx-cube-coord-sanitize.patch— ir3: Sanitize cube map directions on A8XX07-a8xx-kgsl-ib-vbo-alias.patch— tu/kgsl: Fetch A8XX command streams through a virtual BO08-tu-kgsl-cache-retired-a8xx-ib-storage.patch— tu/kgsl: Cache retired A8XX IB storage09-tu-ir3-subgroup-half-warp.patch— tu,ir3: Support a required subgroup size of half a wave11-wn-fix-a8xx-dev-info.py— Idempotent fixup for freedreno_dev_info.h and tu_cmd_buffer.cc12-wn-apply-a8xx-gpus.py— WN-Turnip A8xx GPU support applicator for freedreno_devices.py14-wn-apply-a7xx-gen2-ubwc-hint.py— WN-Turnip A7xx_gen2 UI-corruption fix for FD740 / Adreno X1-8515-wn-add-aimapper-gralloc.py— Add the IMapper5 stable-C gralloc backend (SP-HAL loaded) to Mesa16-wn-add-ubwc-swapchain-usage.py— Request UBWC-compressed swapchain buffers on Adreno17-wn-apply-perf-variant.py— Apply aggressive autotune and variant-specific GPU clock forcing for performance18-wn-a8xx-shared-mem.py— Robust equivalent of whitebelyash/mesa-unified turnip/gen8 commit20-default-env.py— Built-in default environment variables for Turnip with app override support32-tu-z-texfast.py— Turnip-Z port: cheaper texture sampling40-fd710-blob.py— FD710: consolidated hardware property and register tuning from Adreno 710 blob analysis (V@0615)48-a8xx-lrz-color-mask.py— A8xx: Emit GRAS_LRZ_COLOR_COMP_MASK (0x810c) in blend dynamic state50-fd720-blob.py— FD720: register tuning from Adreno 720 blob analysis (V@0676)51-fd810-blob.py— FD810: unified Adreno 810 hardware tuning from Vulkan blob trace analysis (V@0800.74)56-fd722-blob.py— FD722: register tuning and hardware properties for Adreno 722 from Qualcomm blob analysis (chip_id 0x43020100)60-tu-sysmem-wfi-relax.py— Relax subpass slice wait from WFI to WAIT_FOR_ME in sysmem mode61-tu-lrz-fs-sideeffects-no-invalidate.py— Preserve LRZ state across draws when fragment shader has side effects62-tu-draw-state-skip-identical.py— Avoid redundant dynamic draw state packet emission63-ir3-sched-prefer-lower-live.py— Prioritize instructions with lower live register effect during pressure growth7c14092ffb50622f78f9c466d92f2a6c0fce71a7.patch— ir3: Only prefetch UBO descriptorsec5a9a6d86133c45d3e42bd3583ba3ad9572c3a2.patch— ir3: Remove texture descriptor prefetch supporttu-sample-shading-gate.patch— tu: only force per-sample interpolation for shaders that use it
Upstream Freedreno Changes Since 4.4-exp
38 commits under src/freedreno, grouped by commit title.
A7xx (1)
73c57838dafreedreno/ci: lower the a702 job timeouts
Turnip (tu) (17)
8aa6218125tu: Restore old predicated binning workaround for a630_sqe.fwe14789a70etu: Report unsigned and mixed 4x8 dot acceleration with dp4accf0bc8697b5tu: Mark signed 4x8 integer dot products as acceleratedfe3e563cebtu: Set prefer_gmem for Sweet Surrender VR7e29b87af3tu: Prefer GMEM on Beat Saber64245a20b7tu: Add back float16 3D path for multisampled copiesa1e9f88842tu/kgsl: Fix BDA capture/replay failures due to deferred VA freesa799b0bacatu: Apply tu_enable_ssbo_emulation workaround to all UE5 games69f1f21f02tu: upload draw_id_offset through driver_params UBO9a7372e8f7tu: split VS driver params constants setup and emissionfd5a6795e3tu: rename skip_vfd to indirect in struct tu_vs_params7638039f12tu: Split large indirect count draws on A8xx14656cee8ctu: Split large indirect draws on A8xxcadc7e42fbtu/a6xx: Invalidate shared consts before disabling themaf60682ce5tu: modify hull shader programming4f6314dc9ctu: Drop reference taken with get_vis_stream_patchpoint_cs()761d5c8a54tu/a6xx: Set correct value for GRAS_MODE_CNTL
Compiler (ir3) (11)
ed2b00fa28ir3: assemble the block copy between global memory and local42177b5f4fir3: decode the block copy between global memory and local8d2fe6ed62ir3: implement global atomics on a5xxfe46ccc999ir3: implement global load/store for a5xxae42351705ir3: move the ldg/stg offset handling to a headerb8141939d2ir3: print the half prefix on local and private load/store05950e40bfir3: reserve image dimensions for read-write images on a5xx07fd8b3603ir3: keep a5xx shaders below the descriptor window in the constant file7656cf464dir3: do not let full-register writes reset half-register delays before a6xx29db4909d4ir3/ra: fix DOUBLE_ONLY register limit unit1ae1558b89ir3: lower draw_id to use draw_id_offset
Other (9)
02f1337523mesa: don't read past the name when matching a resource without its [0]ca442f8209freedreno/a5xx: swap components when storing to an image724b21ef16freedreno/a5xx: let half arithmetic overflow to infinity07f52057cafreedreno/a5xx: decompose strips and fans in the D3D order for the first-vertex conventione5c0aa8e52freedreno/a5xx: keep hardware-binned bins below 1024 rows57fea5146fci/lava: uprev lava-job-submitterd1337cf9f7freedreno/ci: reenable dEQP UBO tests0e8f40efb0freedreno: Fixup incorrectly copied A6XX_TPL1_DBG_ECO_CNTL for A650d1526c1885freedreno/devices: Add the Adreno 829 msm chip id
GPU Support
Supports all GPUs currently supported by Mesa, including Adreno 6xx, 7xx, and 8xx series.
For the complete and up-to-date device list, see:
https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/freedreno/common/freedreno_devices.py
Notes
- Graphics issues may still occur depending on the game or emulator.
- Performance and compatibility vary by device, firmware, emulator version, and game.
- Recommended memory mode: sysmem (
TU_DEBUG=sysmem). - Experimental build.
Credits
Special thanks to whitebelyash, Leb-Sun, Max Jividen (MaxsTechReview), Alex Sanz (AlexSanz0902), Dhruv Mark Collins, Hugo223, and StevenMX