Repository navigation
GTA V on Xiaomi 17T Pro (MediaTek MT6993, Mali-G1-Ultra): working configuration #2173
JuliusPinsker
started this conversation in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
I have wanted to play GTA V on a phone since I was a teenager. GameNative is the app I would have tried to write myself, and this month it got me there on a Mali device. Thank you to everyone who works on it. Fork with the fixes, a release with all files and a step-by-step guide: https://github.com/JuliusPinsker/GameNative (release https://github.com/JuliusPinsker/GameNative/releases/tag/gta5-mali-g1-v1). Below is the configuration that works, with measurements, in case it helps the next Mali user. Prior art for Adreno: tarikbc/gtav-android, which saved me a lot of time.
Device and versions
Container
bcnEmulation=noneso DXVK passes BC formats to the wrapperDXVK_CONFIG=dxgi.maxDeviceMemory=1024;dxgi.maxSharedMemory=1024;dxgi.maxFrameRate=30GTA
settings.xml: borderless window at the container resolution, VSync off, texture quality normal or lower, everything else at minimum except shadows (ShadowQuality 0 freezes the game reliably).Results
What it took
dxgi.maxDeviceMemory, GPU memory grows to 5.4 GB and the game dies after about 8 minutes. The container setting does not reach DXVK today; the env line above does. Fix: Pass DXVK_CONFIG in the format DXVK parses #2170.vm.max_map_count65530). On kbase every GPU allocation is its own mapping. Two wrapper fixes keep GTA under 15k mappings: Free BCn staging buffers when their command buffer is begun again leegao/bionic-vulkan-wrapper#227 and Clear prefersDedicatedAllocation in memory requirements leegao/bionic-vulkan-wrapper#228.wrapper-gamenative(ASTC) needs a Present fix to start at all: Present: answer QueryCapabilities and accept NotifyMSC #2171. It ran stably, but at about 20 FPS, so I stayed on wrapper-leegao.Levers that did nothing or hurt
Measured with the benchmark; single-run spread is about ±1 FPS.
PROTON_NO_NTSYNC=1): 18.7 vs 49.9 FPS. Never turn it off.Pitfalls
SteamHost: not logged on) while the app itself stayed logged in. Excluding GameNative in the VPN's split tunnelling fixed it.settings.xmlto its defaults (800x600, VSync half). Check it before the next run.dinput8.dllin the game folder automatically (ModDllOverrides). Handy for Script Hook V, but move the files out when you want the plain game.DXVK_SHADER_DUMP_PATHon shared storage kills the game after a few hundred shaders; a path inside the prefix works.One more trap: container
LD_PRELOADSetting
LD_PRELOADin a container's environment variables replaces the preload list the bionic launcher builds (libandroid-sysvshm.so,libevshim.so,libgamenative_dns_v4mapped.so, libredirect).BionicProgramLauncherComponentbuildsLD_PRELOADfirst and then doesenvVars.putAll(this.envVars)with the container env, so the user value wins outright.Why it hurts. Anyone who preloads one extra library (I used mimalloc to cut allocator mappings) must copy the app's own entries into the container by hand. Those are absolute paths under
/data/app/~~<hash>/app.gamenative-<hash>/lib/arm64/, and the hash changes with every APK install. After the next update wine fails immediately:and the game dies at launch with no hint in the UI. Without the evshim entry the controller shim is missing as well.
Suggestion. Append the container's
LD_PRELOADafter the launcher's list (launcher:user), the same way the XR shim gets prepended. Replacing the whole list could stay available behind a separate switch for the rare user who needs it.🤖 Generated with Claude Code
All reactions