Skip to content

Using MESA Turnip GTK

mercurious edited this page Jun 30, 2026 · 3 revisions

Introducing the ETK Turnip GTK Driver for ROCKNIX

ETK ships its own build of the Mesa "Turnip" Vulkan driver for the Adreno 650 — the GTK (Gran-Turismo-tuned) fork — alongside ROCKNIX's stock driver. It's a small, surgical patch set on Mesa Turnip 26.1.3 aimed at exactly one job: making PS3 emulation (RPCS3) on the SM8250 hold together longer and feel smoother. On the rig it roughly doubles how long a Gran Turismo session runs before it crashes — without claiming to stop the crashes (it doesn't; see Limitations).

It's a real driver swap, not a config tweak: the on-device DRIVER tab binds the GTK .so over the stock one at boot, and you can flip back to stock anytime.

Simple Explanation

Stock Turnip is a general-purpose GPU driver — it has to be correct and fast for every app. RPCS3 driving an Adreno 650 hits the GPU in an unusual, punishing pattern (a tiled renderer doing depth-heavy resolves the chip wasn't built around), and stock Turnip eventually wedges on it — the infamous a6xx GPU hang.

The GTK fork is specialized for that pattern. It adds throttles and barriers that keep the GPU's command flow orderly through the moments that would otherwise wedge it. Measured on the live race ledger:

  • Median session roughly doubles (≈204s → ≈394s); the long-run ceiling (p90) more than doubles.
  • Time-to-crash +42% — when a crash does come, it comes much later.
  • Crash-rate drops (~73% → ~50% of sessions), and compile-storm "silent" crashes fade as your shader vault saturates.

Bonus: because the bound driver is ours (a fixed build), your shader vault survives ROCKNIX updates. On stock, every nightly re-fingerprints the driver and forces a full shader recompile ("spoilage"); the GTK fork's stable build-id keeps the cache valid across OS bumps.

Racing Metaphor: the limited-slip-differential

A limited-slip differential doesn't stop a drive wheel from losing grip — it meters torque between the wheels so you keep traction and put power down through the corner instead of lighting up one tire and spinning off.

The GTK driver works the same way on the GPU's command pipeline. Its tuning dials — the "LSD gears" (syncdraw, sddepth) — control how aggressively the GPU resolves depth and serializes work. They don't cure the a6xx hang (the "wheelspin"); they keep the frame pipeline gripping far longer before it breaks loose. Heavier gear = more grip, a little less speed (FPS). You pick the gear for the track.

How to use Turnip GTK

ETK Pitstop

Everything lives in the DRIVER tab of the on-device ETK Pitstop app:

  1. Pick the build. The DRIVER BUILD selector lists the catalog — stock (ROCKNIX's own Turnip) and the certified ETK fork (…gtk_0.2). Highlight one and confirm.
  2. Reboot to load. A Vulkan driver binds at boot, so the swap is reboot-gated — the selector marks your pick as selected; it becomes loaded after a cold boot. (Reboot on the device.) The Pitstop title bar shows the live driver so you can confirm what's actually running.
  3. Flip back anytime. Select stock and reboot to return to the OS driver — your safety rollback if a game misbehaves.

Fresh installs don't have to hunt for the driver: install.sh fetches the certified build from the GitHub release and SHA-256-verifies it before staging, so the catalog comes up as stock + the proven fork with nothing else to manage.

Turnip Dials

The same DRIVER tab exposes the TU_DEBUG dial ladder — these tune the loaded .so and take effect on the next game launch (no reboot). You don't need multiple driver builds to experiment; the dials are the tuning axis on the one build.

  • syncdraw — the heaviest LSD gear: serialize draw submission. Most stable, small FPS cost. The current shipping default.
  • sddepth — route depth passes to sysmem (the depth-resolve hazard is where the hang lives); roughly matches syncdraw on stability.
  • Isolation flags (nolrz, noubwc, sysmem, gmem) — diagnostic levers for narrowing a new symptom.

One change per soak. Swap a single dial, drive real laps, then read the ledger — every race is stamped with the exact dial set it ran under (TELEMETRY tab), so you get attributable data instead of one-run guesses. The crash noise floor on this title is huge; trust a few consistent runs, not a single clean one.

Technical Narrative

Features

  • Surgical fork of Mesa Turnip 26.1.3 for ROCKNIX (glibc/msm). One source, two non-interchangeable builds — this ROCKNIX build and a separate Android/kgsl build for the aPS3e fork (they can't cross; different ABIs).
  • DRIVER-tab build selector + dial ladder, reboot-gated, every session ledger-stamped with its tune_tag.
  • Roughly doubles GT playtime and pushes time-to-crash +42% later (idle-proof, crash-rows-only — the cleanly driver-attributable stat).
  • Vault longevity — decouples the shader-cache fingerprint from ROCKNIX nightlies, so OS updates stop spoiling the vault.
  • Certified catalog — only stock + the proven fork ship to the selector; experimental builds stay out of the user-facing list.

Limitations

ETK is honest about what this is: a managed mitigation, not a cure.

  • The a6xx GPU hang is reduced, not prevented. The dials push it far later and cut its frequency, but it still happens — you will still crash, just much less, and much later. The README hero chart shows the hang persisting on purpose.
  • GT5P "road flicker" is NOT ours. The track-surface shadow flicker is an upstream RPCS3 bug (#11912) — it reproduces on desktop RPCS3 too, so no driver or config lever fixes it.
  • DRM-spawn launch freeze (a black screen at game launch) is an emulation-side RPCS3 teardown deadlock, not a driver fault — clear it with R3 and relaunch.
  • No overclock. The SM8250 OPP table is hard-capped; the POWER tab pins governors and clocks but cannot raise them without a custom kernel.

Forensic Discovery

The fork is the end of a long instrument-then-fix hunt, not a guess. The a6xx hang was decoded from on-rig GPU redumps (hangrdcffdump) down to a specific depth/CCU-resolve wedge in the tiled renderer — a hardware-shaped hazard, not memory pressure or a config error (every RPCS3 render setting was ruled out first). The dial ladder (syncdraw/sddepth and the sd* "LSD gears") was built and A/B-tested against that exact mechanism on the ledger, and the G-INSTR instruments (the in-game JITTER/SLIP gauges and the frametime-jitter ledger metric) were added so the driver's effect could be seen and measured live rather than asserted.

The verdict was deliberately modest: across several attack axes, no accessible driver lever cured the hang — but several pushed it dramatically later. So ETK productized the mitigation (delay + reduce) and shipped it honestly, with the residual hang shown in the data rather than hidden. That's the ETK ethos: ship the tooling and the truth.


See also: Using the ROCKNIX Guide · ETK Pitstop App · Tested Games · ETK Screenshot Gallery

Clone this wiki locally