Repository navigation
Releases: OpenPort-Labs/mw2-android
Release list
MW2 Android v0.0.2 (Snapdragon & Vulkan 1.0 Update)
Modern Warfare 2 Android — Release v0.0.2 (Snapdragon & Vulkan 1.0 Update)
Version 0.0.2 brings comprehensive fixes for Qualcomm Snapdragon (Adreno) chips, lowers the hardware compatibility floor to Vulkan 1.0, introduces ARM64 Prime-core CPU thread affinity, implements TBDR mobile tile-rendering optimizations, and adds an offline mod directory overlay (mods/).
🎮 What's New in v0.0.2
⚡ Qualcomm Snapdragon (Adreno) Fixes
- Black Terrain, Skybox & Flicker Resolution:
- Automatically identifies Adreno GPUs (
vendorID == 0x5143) and routes BC compressed textures through software SIMD decoding to prevent Adreno's 1-bit alpha sampling hardware bug. - Representation-safe texture uploads and restaging: guarantees format consistency and validates payload byte size against image metadata, fixing black screens, flickering foliage, and missing geometry.
- Option
MW2_FORCE_BC_HW=1provided for users running custom clean Mesa Turnip drivers.
- Automatically identifies Adreno GPUs (
- Snapdragon Prime-Core Thread Affinity:
- Automatically detects ARM big.LITTLE / tri-cluster architectures (Snapdragon 865 through 8 Gen 3).
- Pinned main game loop to the Prime Core (Cortex-X1/X2/X3/X4), recorder/dispatch thread to Performance Cores, and background tasks to Efficiency Cores via Bionic
sched_setaffinity.
📱 Vulkan 1.0 Mobile Support
- Lowered Manifest Feature Requirement:
- Decreased
android.hardware.vulkan.versionrequirement from0x401000(1.1) to0x400000(1.0). - Clean feature decoupling: dynamic rendering and extended dynamic state are dynamically negotiated, with automatic fallback to classic Vulkan 1.0 render passes and negative-viewport maintenance extensions.
- Decreased
- TBDR Mobile RenderPass Optimization:
- Configured
VK_ATTACHMENT_STORE_OP_DONT_CAREon stencil and temporary depth attachments to prevent GPU tile-memory thrashing on mobile SoCs.
- Configured
🧩 VFS Mod Directory Overlay
- Offline Bots & Loose Asset Support:
- Transparent virtual filesystem overlay via
MW2_MOD_DIRor<GameRoot>/mods/. - Enables loading offline Bot Warfare GSC mods, custom scripts, localized language files, and loose assets without repacking
.ffFastFiles.
- Transparent virtual filesystem overlay via
🛡️ Hardened Tooling & Asset Ingestion
- XDVDFS Disc Extractor (
tools/xdvdfs.py):- Added strict sector bounds validation against total image size.
- Prevented infinite recursion and directory loops.
- Sanitized filenames against path traversal (
.., slashes) and enforced destination containment. - Added truncated read detection.
- Asset Fetching (
tools/fetch_asset.py):- Fixed order-of-operations bug where files were unlinked prior to reading header bytes.
- Added zip-bomb resource limits (capped total unpacked bytes to 15 GiB and maximum entry count to 50,000).
🔄 Upstream Engine Synchronization
- Merged upstream FOV slider support and frame arena write-combining optimization.
- Added network and security notices for LAN / matchmaking.
📦 Requirements
- OS: Android 8.0 (Oreo) or higher (API 26+)
- Architecture:
arm64-v8a(64-bit ARM) - GPU: Vulkan 1.0 or higher (Snapdragon / Adreno 600+, Dimensity / Mali-G57+, Exynos / Xclipse, Tensor)
- RAM: Minimum 4 GB, Recommended 6 GB+
- Storage: ~7 GB free internal storage for game data
- Game Files: An unmodified Xbox 360 Modern Warfare 2 disc image (
.iso)
📥 Installation Guide
- Download and install
app-campaign-release.apkfrom the Assets below. - Transfer your legal Modern Warfare 2 Xbox 360 disc image (
.iso) to your Android device (e.g.Downloadsfolder). - Open the MW2 launcher on your phone.
- Tap Select ISO / Install Game, choose your
.isofile, and wait for extraction. - Tap Launch Campaign and enjoy 60 FPS native Modern Warfare 2!
MW2 Android v0.0.1 (Initial Release)
Modern Warfare 2 Android — Release v0.0.1 (Alpha)
Initial release of the native Modern Warfare 2 (2009) recompilation port for Android ARM64 devices (com.mw2.recomp.sp).
This project statically recompiles the original Xbox 360 PowerPC executable (default.xex) into native 64-bit ARM machine code (libmw2.so), featuring an integrated Android launcher, XDVDFS disc installer, Vulkan rendering backend, and low-latency AAudio subsystem.
🎮 What's Included in v0.0.1
🚀 Core Engine & Native Runtime
- Native ARM64 Execution: Powered by XenonRecomp static PowerPC recompiler, running without CPU emulation overhead.
- Vulkan Renderer Backend:
- Full Vulkan 1.1 legacy fallback path for widespread mobile SoC compatibility (Adreno & Mali).
- High-performance shader translator converting Xenos microcode to SPIR-V.
- Dedicated application-level shader cache with start-up prewarming to eliminate in-game shader compilation stutter.
- Audio Subsystem:
- Low-latency AAudio native sink at 48 kHz stereo with linear sample interpolation.
- Smooth APU mixer scheduling with burst-free catch-up logic and zero real-time heap allocations.
- Input & Controls:
- Virtual on-screen touch overlay with multi-touch support.
- Full physical gamepad support (Bluetooth / USB-C controllers: Xbox, DualShock/DualSense, generic HID).
🛡️ Stability & Security Hardening (Deep Audit Fixes)
This release incorporates all fixes from our comprehensive security and stability source audit:
- GPU Pipeline Stability (Mali-G68 / Dimensity & Exynos):
- Bypassed persistent
VkPipelineCacheon Arm Mali GPUs to eliminate documented driver cache deadlocks during monolithic pipeline compilation. - Injected static dummy viewports and scissors to prevent mobile driver null-pointer dereferences under dynamic state configurations.
- Configured null
pColorBlendStateon depth-only subpasses (colourFormat == VK_FORMAT_UNDEFINED) complying with Vulkan specifications. - Restored
depthControlandmodeCntlin legacy Vulkan 1.1 shader cache prewarming keys. - Synchronized all
VkPipelineCacheaccesses across draw pipeline compilation, library linking, and cache saving.
- Bypassed persistent
- Storage & Path Traversal Prevention:
- Sanitized custom GPU driver imports in
DriverStore.kt, strictly rejecting dot-segment traversal (.and..) and enforcing canonical storage containment. - Staged driver replacement transactionally to eliminate risks of app data loss.
- Sanitized custom GPU driver imports in
- Hardened XDVDFS Disc Extraction:
- Guaranteed
imageSize_initialization prior to partition probing inlauncher/disc.cpp, supporting all standard and non-zero partition disc layouts. - Bounded allocation constraints on directory metadata (32 MB cap) and verified entry boundaries against image bounds.
- Sanitized extracted filenames against path traversal components (
/,\,..). - Added 3-point sample chunk integrity validation (header, middle, and tail) before skipping existing matching-size assets.
- Guaranteed
- Installer Safety:
- Aborts extraction immediately if target device storage is insufficient.
- Verifies exact stream copy byte counts to prevent corrupted or truncated source files.
📦 Requirements
- OS: Android 8.0 (Oreo) or higher (API 26+)
- Architecture:
arm64-v8a(64-bit ARM) - GPU: Vulkan 1.1 compatible (Adreno 600+, Mali-G57/G68/G77/G78+, Immortalis)
- RAM: Minimum 4 GB, Recommended 6 GB+
- Storage: ~7 GB free internal storage for game data
- Game Files: An unmodified Xbox 360 Modern Warfare 2 disc image (
.iso)
📥 Installation Guide
- Download and install
app-campaign-release.apkfrom the Assets below. - Transfer your legal Modern Warfare 2 Xbox 360 disc image (
.iso) to your Android device (e.g.Downloadsfolder). - Open the MW2 launcher on your phone.
- Tap Select ISO / Install Game, choose your
.isofile, and wait for the extraction to finish. - Tap Launch Campaign and enjoy!