Repository navigation
Releases
Swap2-Native 0.1.5-beta
Swap2-Native 0.1.5-beta
Zelda lighting and texture corrections, optional RAM savings using storage, and more resilient AV1 playback. Includes the runtime improvements tested locally in 0.1.4-beta, which was not published separately.
Lighting and textures
- Implemented NVN event/sync dependencies between GPU queues. A consumer can now wait for the queue that produces its lighting data, rather than reading it too early.
- Keep textures referenced by live texture-pool slots resident, including lightmaps accessed through shader-side handles.
- Fixed texture ownership when a game copies a texture object and finalizes the copy while the original remains in use.
- Preserved the earlier pending-upload, presentation-reference and fence-aware texture-lifetime protections.
- Present waits for its frame before taking the GPU queue lock.
Memory and video
- Shader-code pools use file backing in the app cache and avoid Vulkan placement until they actually supply GPU data.
- Added Game settings > Graphics > RAM saver (uses storage) for large eligible texture pools. Off by default; uses free storage and writes during area loads. Applies on the next launch.
- AV1 hardware-decoder initialization refusal or midstream failure now falls back to dav1d, with key-frame replay and duplicate-picture suppression.
- Reduced duplicate image allocations when a zero-shared allocation has only one owner, and improved release of redundant empty image-memory blocks.
Other runtime improvements since 0.1.3-beta
- Pending native graphics pipelines are waited for by default to preserve effects, rather than skipping their draws.
- Bounded shader-prewarm admission, with pauses under memory pressure or when a demanded pipeline is waiting.
- Less frequent background pipeline-cache saves, safer cache-file replacement and additional memory diagnostics.
- Diagnostic launcher commands now require the explicit Diagnostic commands (ADB) setting, off by default.
Thanks to moceure and the BananaNative contributors, EddizEge / AnkaNative, and the Lichii contributors for the upstream code and findings behind these adaptations. AV1 software decoding uses VideoLAN's dav1d. Licenses and attribution are included in the sources.
Update and validation
Install over your existing public Swap2-Native app; do not uninstall first. The package (com.swap2native) and original release signature are unchanged. Save-file hashes were checked before and after installation; prepared shaders were retained. No shader rebuild is required.
Android ARM64, Android 13 or newer. Version 0.1.5-beta, code 6.
On the POCO F7 Ultra, Zelda reached Link's house with visible wall/floor textures and scene lighting. Its opening movie played using hardware AV1. On-device native tests passed for queue scheduling, texture ownership/lifetimes and file-backed memory. A synthetic midstream AV1-failure test matched all 24 reference frames in order, timestamps and luma hashes.
Zelda remains experimental. Longer sessions, outdoor transitions, window artifacts and low-memory behavior need more testing. Memory pressure remains significant. No particular FPS gain, complete rendering fix or general crash-free gameplay is promised. Purple-glow shader issues remain separate. Please include your game/build, device, GPU driver and logs when reporting problems.
Downloads and corresponding sources
swap2-native-0.1.5-beta.apk: corrected, signed public release APK.swap2-native-0.1.5-beta-source.zip: corresponding working-tree sources, licenses and build instructions for this APK. Use this attached ZIP for the current sources. GitHub's automatic tag source archives refer to the existing public repository baseline, not this full working-tree snapshot.SHA256SUMS-0.1.5-beta.txt: APK and source ZIP checksums.
APK SHA-256: 1bdd42e97c79962d2c8fcae7e607bfdb974053a6d3360ead933253281f204565.
This is a beta pre-release. Game dumps, keys, signing credentials and proprietary Lossless Scaling files are not included.
Swap2-Native 0.1.3-beta
Swap2-Native 0.1.3-beta
Memory-management and texture-lifetime improvements, preparation recovery and a better fit for the preparation screen.
Memory and rendering
- Improved cleanup of textures belonging to finalized memory pools, while preserving presentation, capture and writeback references.
- Added memory-pressure checks for unused texture images, including during large allocation bursts within a frame. Images still in use by the GPU are retained.
- Fixed lifetime tracking for texture re-uploads: a texture receiving a pending copy must not be freed by cache cleanup before recording and GPU use finish.
- Enabled application-pool memory accounting by default, with explicit profile exceptions preserved. This lets the game's SDK release cached mapped blocks when its declared budget is full.
- Updated Zelda: Ocarina of Time's virtual-memory layout to an 8 GiB alias region. Existing supported builds receive a memory-only pack metadata update at launch, without rebuilding their shaders.
Resolution and preparation
- Added 540p (960x540) to resolution choices for compatible profiles. Games with fixed resolution mappings keep their supported sizes; Mario Kart World falls back to its verified 720p mapping when inheriting a global 540p choice. Zelda's separate scene-resolution setting remains separate.
- Fixed the preparation screen's placement around landscape display cutouts so the right edge, logo and buttons remain visible.
- Fixed preparation recovery when a shared job still points to another app variant's private pack folder. Missing rewritten code is rebuilt at the current app destination while completed shaders are reused. Donkey Kong Bananza completed preparation on the test phone with all 22,850 existing shaders retained.
Thanks to moceure and the BananaNative contributors for the upstream mechanisms and reference implementations used in this work.
Update
Install the APK over your existing public Swap2-Native app. The package (com.swap2native) and original release signature are unchanged; saves, history and prepared shaders are retained. Do not uninstall first.
Android ARM64, Android 13 or newer. Version name 0.1.3-beta, version code 4.
Validation and remaining limits
The release was built, signature-verified and installed over the existing public app on a POCO F7 Ultra. Android production-code tests passed for image ownership, pending-copy retention, memory-budget enforcement, release/retry behavior and allocation bursts. Profile migration tests also passed.
Zelda remains experimental. Earlier revisions still hit memory pressure or a native texture-copy crash. This APK includes the subsequent lifetime correction, but a matched long gameplay test has not established that all crashes or memory problems are resolved. No particular FPS improvement or complete rendering fix is promised. Please include your game/build, device, GPU driver and logs in bug reports.
This is a beta pre-release. Game dumps, keys and proprietary Lossless Scaling files are not supplied.
Downloads and corresponding sources
swap2-native-0.1.3-beta.apk: signed public release APK.swap2-native-0.1.3-beta-source.zip: corresponding working-tree sources and build instructions for this APK. Use this attached archive; GitHub's automatic tag source archives refer only to the existing public repository commit.SHA256SUMS-0.1.3-beta.txt: checksums for the APK and corresponding-source archive.
APK SHA-256: fd4b2487543384aafef3dd7b097d3788ed308cbdfef9b14fe447a0bdb4fc1c0c.
Swap2-Native 0.1.2-beta
Swap2-Native 0.1.2-beta
More graphics controls and selected improvements adapted from BananaNative 0.2.5, while retaining Swap2-Native's launcher, themes, tutorial and game-specific touch controls.
Graphics
- Choose nearest neighbor, bilinear, FSR 1 or the game's native upscaler, globally or per game. Switch scaling modes from the in-game panel.
- Adjust FSR output sharpness, including Off. This sharpens the final image when enlarging it to the screen.
- Keep the picture's proportions or stretch it to fill the screen, with matching touch coordinates. Takes effect at the next game start.
- Enable or disable background pipeline compilation. New effects may appear briefly late while a pipeline compiles, instead of blocking the frame.
- Select GPU timing per segment, per submission or the game profile's default. Takes effect at the next game start.
- Restore one game's settings without deleting saves, mods, shader caches or touch layouts.
Find these under Settings → Performance → Graphics, or Game settings → Graphics.
Preparation and runtime
- Document-picked, seekable local
.nupfiles can be used through persistent Android read permission without copying the full file into the app. Stream-only providers still require a local copy. - Expanded task/mesh shader extraction and updated Zelda: Ocarina of Time shader tables and pipeline-prewarm seeds.
- Imported memory-alias, texture-lifetime and memory-map-budget improvements, mesh pipeline prewarming, build-specific module selection and a Qualcomm driver-loading compatibility shim.
- Improved unexpected-exit diagnostics and log summaries.
Thanks to moceure and BananaNative contributors for the upstream work.
Update and testing
Install the APK over your existing public Swap2-Native installation. It uses the same com.swap2native package and original release signature; uninstalling first is unnecessary and can remove app data.
The release APK was built, signature-verified, installed over the previous public app on a POCO F7 Ultra, and the launcher opened. Graphics-policy tests and software-Vulkan scaling tests passed. Game-by-game rendering, performance and long-session stability still need testing; this release does not promise a particular FPS gain or resolve every Zelda rendering issue.
Dynamic-resolution controls, DK's decoupled 40/45 FPS modes, instanced draws, classic render passes and internal NDSR RCAS sharpening are not included. FSR sharpness in this release affects final output scaling.
This is a beta pre-release. Please include the game/build, device, GPU driver and logs with bug reports. Games, dumps, keys and proprietary Lossless Scaling files are not supplied.
Downloads and sources
swap2-native-0.1.2-beta.apk: signed public Android ARM64 APK (Android 13+).swap2-native-0.1.2-beta-source.zip: corresponding working-tree sources and build instructions. Use this archive for this APK; GitHub's automatic tag source archive is only the public repository snapshot.SHA256SUMS-0.1.2-beta.txt: SHA-256 checksums for the APK and corresponding-source archive.
APK SHA-256: 497001b685b0248bda5b17c20abcc2a302bcf977e896b2459432a0f6e9e2764a.
Swap2-Native 0.1.1-beta
Swap2-Native 0.1.1-beta
This beta adds an optional getting-started tutorial and improves NUP selection and import guidance.
What's new
- Four-step tutorial in English and Portuguese covering game files, file selection, preparation and common import problems.
- The guide appears once when starting with an empty library. Reopen it from the empty library, Add game, or Settings → About → Getting started.
- Short instructions before selecting a
.nup: select the file itself, finish downloading it, and browse Internal storage if Recent/Downloads cannot resolve it. No extraction is needed. - Import failures retain their diagnostic and offer Choose again or the guide.
NUP import fixes
- Enables the existing MediaStore path lookup for local files selected through supported Recent/Downloads providers.
- Removes obsolete uppercase-extension rejection from the import screen. The current reader accepts
.nup,.NUPand.Nup. - Local, readable files are still required. Renaming a ZIP, NSP, XCI or other format to
.nupdoes not convert it. The game and build must be supported by the app.
Updating
Install swap2-native-0.1.1-beta.apk over the previous public version. It uses the same package (com.swap2native) and signing certificate; no uninstall is required. Version code: 2.
This is the public app, separate from com.swap2native.test. Your own legally dumped games are required; no game files, keys or firmware are supplied.
Validation and known limitations
Android resources and Java compilation passed, along with two frontend tests and seven selected NUP reader/integrity tests. The tutorial was opened successfully in Portuguese on a POCO F7 Ultra using the test build. Complete import-flow and broader device testing remain ongoing.
The project is experimental. This update does not claim to resolve unsupported game builds, graphical issues, occasional exits or thermal throttling.
Source and integrity
The APK was built from a local working tree. Use the attached swap2-native-0.1.1-beta-source.zip for its corresponding source, including the tutorial and local fixes. The tag points to public baseline commit f4a6f28fc8048cb4f95178e8d43ff03d2a80f20e; GitHub's automatic source archives at that tag do not include those local changes. No existing branch history was rewritten.
APK SHA-256:
ecb1cbc464c3db53820ac0e1334942153d0cec29705e25e0d559095f0f49fcfb
Credits: Banana Native by moceure, nxnative by seedds, and the upstream projects credited in the source. The Android app is GPL-3.0-or-later as a whole; individual upstream files retain their respective licenses.
Swap2-Native 0.1.0 beta 1
Primeira beta pública do Swap2-Native. Jogos de Nintendo Switch 2 rodando nativamente em celulares Android: o código ARM64 do próprio jogo roda direto na CPU, os gráficos NVN2 são reproduzidos em Vulkan e os shaders são traduzidos para SPIR-V no próprio celular. Não é um emulador. Fork do Banana Native v0.1.1 (moceure), que por sua vez se baseia no nxnative (seedds).
Important
Experimental. Testado à mão em dois celulares (POCO F7 Ultra e RedMagic 11 Air, ambos Snapdragon 8 Elite / Adreno 830). Espere bugs, aquecimento e lentidão. Você precisa dos seus próprios jogos, extraídos do seu próprio console; este projeto não contém código, chaves nem arquivos de nenhum jogo.
Jogos
| Jogo | Versão | Estado no Android |
|---|---|---|
| The Legend of Zelda: Ocarina of Time | atualização v131072 | Chega ao gameplay. Abertura e título a 60 fps; casa do Link por volta de 30 fps (até ~38 fps com FSR 1 no lugar da rede de upscale do jogo); áreas abertas mais pesadas. Foco desta versão |
| Donkey Kong Bananza | atualização v458752 | Jogável, por volta de 30 fps no POCO F7 Ultra com Turnip |
| Mario Kart World | 1.8.0 | Em desenvolvimento, ainda não jogável |
| Pokémon Pokopia | atualização v655360 | Experimental: abertura e primeira cena |
Como usar
- Instale o APK abaixo e abra o Swap2-Native; permita acesso a todos os arquivos.
- Copie o seu jogo (pasta do dump ou arquivo
.nup) para/sdcard/Switch2/Games. - Toque em Jogar. Na primeira vez o app prepara o jogo (reescreve o código e traduz os shaders); deixe o celular carregando. O Zelda tem ~42 mil shaders e é o que mais demora. Dá para pular a tradução importando um zip de shaders exportado de outro celular (⋯ › Importar shaders…).
- Opcional: Configurações › Driver da GPU (driver do sistema ou Turnip) e Verificação de prontidão.
Detalhes no README.
Problemas conhecidos
- Aquecimento: o celular chega a reduzir o clock depois de alguns minutos em áreas abertas do Zelda; a resolução de 720p com FSR 1 (Configurações do jogo › Gráficos) ajuda.
- Zelda: alguns textos da interface faltando e um fechamento ocasional do processo.
- Só celulares Snapdragon (Adreno) com 12-16 GB de RAM foram testados.
First public beta of Swap2-Native. Nintendo Switch 2 games running natively on Android phones: the game's own ARM64 code runs on the CPU, its NVN2 graphics are replayed on Vulkan, and its shaders are translated to SPIR-V on the phone. Not an emulator. Forked from Banana Native v0.1.1 (moceure), built on nxnative (seedds).
- Games: Zelda: Ocarina of Time (update v131072) reaches gameplay, title at 60 fps, Link's house about 30 fps; Donkey Kong Bananza (v458752) plays at about 30 fps; Mario Kart World 1.8.0 and Pokémon Pokopia are in bring-up.
- Tested on: POCO F7 Ultra and RedMagic 11 Air (Snapdragon 8 Elite, Adreno 830).
- You need your own legally dumped games (folder or
.nup) in/sdcard/Switch2/Games. No game code, keys or assets are included. - Install the APK, allow All files access, tap Play: the first run prepares the game on the phone.
Nintendo Switch, The Legend of Zelda, Mario Kart, Donkey Kong and Pokémon are trademarks of their owners; this project is not affiliated with or endorsed by Nintendo. The APK as a whole is distributed under GPL-3.0-or-later (see NOTICE.md).