Summary
The Android renderer currently targets Adreno GPUs only. The working path bundles Mesa Turnip (via libadrenotools) to get Vulkan 1.3 + BCn texture support. Turnip is a Qualcomm/Adreno-only driver (Mesa freedreno), so it does nothing on non-Adreno devices — notably Samsung Exynos (Xclipse) and ARM Mali. On those GPUs the stock driver does not expose BC/DXT texture compression, and the game's textures are BCn-compressed DDS, so they cannot be sampled → the game can't render correctly.
This issue tracks adding a non-Adreno fallback so Exynos/Mali devices can run the port.
Why the current path doesn't cover non-Adreno
- Turnip is Adreno-only. It cannot load on Xclipse (AMD RDNA-based) or Mali.
- Stock non-Adreno drivers lack
textureCompressionBC. The game ships thousands of BC1/BC2/BC3 (DXT1/3/5) DDS textures (~2.7 GB of assets); without BCn support the GPU can't sample them.
- DXVK has no software BCn decode (established in the Phase 0 research), so the translation layer can't paper over it.
Evidence (on-device profiling)
- Galaxy S22 (Exynos, SM-S908B) = Samsung Xclipse 920 (AMD RDNA2): reports Vulkan 1.3 but
textureCompressionBC = FALSE. Not Adreno → no Turnip. Renderer path unusable as-is.
- For contrast, the working device is a Tab S7+ (Snapdragon 865, Adreno 650) where the stock driver also lacks BCn, but Turnip provides it — an option not available on Xclipse/Mali.
Approach (from Phase 0 research)
The renderer chain (D3D8→DXVK→Vulkan) is fixed by determinism, so the fix is asset-side: transcode the BCn textures into a format the target GPU supports, at extract/push time (offline, on the PC), not at runtime. Two options:
- DXT → uncompressed RGBA8 — universally supported, simplest, but 4–8× larger on disk/VRAM (BC1 is 4 bpp, BC2/3 are 8 bpp vs 32 bpp RGBA8). Memory pressure is already a concern on mobile.
- DXT → ASTC or ETC2 — Xclipse and Mali support these natively; keeps textures compressed (reasonable size), but requires transcoding to a mobile format and the engine/DXVK accepting non-DXT textures for these assets.
Both require:
- A transcode step in the asset pipeline (extend
scripts/build/android/push-assets-android.sh or an offline pre-pass) that rewrites the .big/DDS textures.
- Possibly engine texture-loader changes to accept the transcoded format on non-Adreno devices, and a device-capability check to pick Turnip (Adreno) vs. transcoded assets (non-Adreno) at boot.
Scope / effort
Large. New asset-transcode pipeline + device-capability branching + on-device validation on an Xclipse (and ideally a Mali) device. Does not touch the working Adreno/Turnip path.
References
Impact
Unlocks the large non-Adreno Android market (Samsung Exynos/Xclipse, MediaTek/Mali). Not required for Adreno devices, which work today. Best tackled as its own project once the Adreno path is polished.
Summary
The Android renderer currently targets Adreno GPUs only. The working path bundles Mesa Turnip (via libadrenotools) to get Vulkan 1.3 + BCn texture support. Turnip is a Qualcomm/Adreno-only driver (Mesa
freedreno), so it does nothing on non-Adreno devices — notably Samsung Exynos (Xclipse) and ARM Mali. On those GPUs the stock driver does not expose BC/DXT texture compression, and the game's textures are BCn-compressed DDS, so they cannot be sampled → the game can't render correctly.This issue tracks adding a non-Adreno fallback so Exynos/Mali devices can run the port.
Why the current path doesn't cover non-Adreno
textureCompressionBC. The game ships thousands of BC1/BC2/BC3 (DXT1/3/5) DDS textures (~2.7 GB of assets); without BCn support the GPU can't sample them.Evidence (on-device profiling)
textureCompressionBC = FALSE. Not Adreno → no Turnip. Renderer path unusable as-is.Approach (from Phase 0 research)
The renderer chain (D3D8→DXVK→Vulkan) is fixed by determinism, so the fix is asset-side: transcode the BCn textures into a format the target GPU supports, at extract/push time (offline, on the PC), not at runtime. Two options:
Both require:
scripts/build/android/push-assets-android.shor an offline pre-pass) that rewrites the.big/DDS textures.Scope / effort
Large. New asset-transcode pipeline + device-capability branching + on-device validation on an Xclipse (and ideally a Mali) device. Does not touch the working Adreno/Turnip path.
References
docs/WORKDIR/planning/ANDROID_RENDERER_RESEARCH_2026-07.md— §3 BCn support matrix, §5 route decision (require-turnipfor Adreno; asset-transcode noted as the non-Adreno fallback).feature/android-phase3-renderer.Impact
Unlocks the large non-Adreno Android market (Samsung Exynos/Xclipse, MediaTek/Mali). Not required for Adreno devices, which work today. Best tackled as its own project once the Adreno path is polished.