Skip to content

Releases: bmdhacks/armsx2-turnip

Custom Turnip driver for ARMSX2 (Adreno 6xx/7xx) axfl2-002

Choose a tag to compare

@bmdhacks bmdhacks released this 04 Oct 23:54

The custom Turnip Vulkan driver built for ARMSX2, for Adreno 6xx and 7xx GPUs. New in this release: on the Adreno 610 (Snapdragon 662), the driver now renders large render passes directly in memory by default instead of splitting them into tiles. On a Black (PS2) frame replay the GPU time per frame goes from 50.4 to 23.1 ms, and in the live game from 53.0 to 26.0 ms, with identical pixels. Every other Adreno part, including the 650 and all of 7xx, behaves as in axfl2-001.

Everything in axfl2-001 is still here, including the Adreno 7xx in-pass read fix. That 7xx speedup needs ARMSX2 master from commit 5a5c24bc46 on. Older ARMSX2 builds work with this driver, but on Adreno 7xx they run at their old speed.

The 610 timings were measured on a ROCKNIX Snapdragon 662 handheld. The Android pack is the same source and passed its load checks, but has not been run on an Android Adreno 610 device.

This one release carries both builds of the same source:

  • turnip-axfl2-002-android.zip: driver pack for the Android app (Android 10 and up).
  • turnip-axfl2-002-aarch64.tar.gz: driver for ARM Linux (ROCKNIX), with Wayland presentation.

In ARMSX2 on Android: Settings → GPU driver → ARMSX2 · turnip → this row. The emulog's GS banner then reads Mesa 26.3.0-devel (git-axfl2-002).

On ROCKNIX: unpack to /storage/turnip/ (it must land at /storage/turnip/axfl2-002), then either run turnip/axfl2-002/run-with-turnip.sh, or point VK_DRIVER_FILES at freedreno_icd.aarch64.json. The banner then reads Mesa 26.3.0-devel (git-axfl2-002).

Technical details

Source armsx2/main at the tagged commit 4cb172e0 (axfl2-001 + one commit)
Driver reports Mesa 26.3.0-devel (git-axfl2-002)
Adreno 610 default autotune algorithm PREFER_SYSMEM (was BANDWIDTH); TU_AUTOTUNE_ALGO still overrides it
Android libvulkan_freedreno.so sha256 69978b89d52e34148445bb307a8d85005c78ad50449fa3faf8de3788f8d5c318
ROCKNIX libvulkan_freedreno.so sha256 a6f7b6ee1a17d22fa53739b000a6838b45c4e21b4b570889cce270efedac6709

Not upstreamed, by design; see README.ARMSX2.md.

Superseded: ROCKNIX image build only (axfl1-011)

Choose a tag to compare

@bmdhacks bmdhacks released this 25 Sep 00:32

Superseded by axfl2-002 — use that one. This release stays only because the ROCKNIX image downloads its Linux tarball by URL; its Android pack has been removed so the app lists one driver.

The custom Turnip Vulkan driver built for ARMSX2, for Adreno 6xx and 7xx GPUs. It replaces axfl1-010 and wins back the time that release lost each time a game switches graphics pipelines, so games like Sly Cooper run as fast as they did on the older 26.1.2-based driver. Everything axfl1-010 brought stays: the newer Mesa, the stencil buffer on Adreno 6xx, and the fix for the games that used to hang.

This one release carries both builds of the same source:

  • turnip-axfl1-011-android.zip: driver pack for the Android app (Android 10 and up).
  • turnip-axfl1-011-aarch64.tar.gz: driver for ARM Linux (ROCKNIX), with Wayland presentation.

In ARMSX2 on Android: Settings → GPU driver → ARMSX2 · turnip → this row. The emulog's GS banner then reads Mesa 26.3.0-devel (git-axfl1-011).

On ROCKNIX: unpack to /storage/turnip/ (it must land at /storage/turnip/axfl1-011), then either run turnip/axfl1-011/run-with-turnip.sh, or point VK_DRIVER_FILES at freedreno_icd.aarch64.json. The banner then reads Mesa 26.3.0-devel (git-axfl1-011).

Technical details

Measured on an Adreno 650 (Snapdragon 865), GS-thread CPU time per frame against axfl1-010: Sly 3 −2.0%, Sly 1 −1.6%, Shadow of the Colossus −1.2%, OutRun 2006 −0.8%, Call of Duty 2 −0.3%. Pictures are byte-identical to axfl1-010 on every dump we compared, at 1x and 2x, and a 2,733-case Vulkan conformance subset gives the same result case for case.

What changed: on every pipeline bind, Mesa copies the pipeline's dynamic state into the command buffer and compares each value to decide what to re-emit. Consecutive pipelines almost always share most of that state, so this build skips a group of states whenever its bytes already match. The result, including which states are marked for re-emission, is bit for bit the same as before.

Source armsx2/main at the tagged commit 11166800 (upstream Mesa e3a986f0167 + ARMSX2 commits)
Driver reports Mesa 26.3.0-devel (git-axfl1-011)
Android libvulkan_freedreno.so sha256 f486de3d6ca285e787823184cb1cf0c89b62255395a42e204ada616b538e1972
ROCKNIX libvulkan_freedreno.so sha256 802e46dba26ee3dc4ef2a89c8d6f504223afc7e5f01c2fe39fbe838061004a2a

Not upstreamed, by design; see README.ARMSX2.md.