Skip to content

Bannerlator 3.0.9

Choose a tag to compare

@github-actions github-actions released this 09 Sep 23:51
· 113 commits to main since this release

Bannerlator

3.0.9  app-side update

Bannerlator 3.0.9

Run Windows apps and games on Android — no PC and no root required.

3.0.9 is the frame-generation release. Bannerlator's own frame generation, Win-FG Native, now runs inside Bannerlator's own compositor — which means it finally works, needs nothing bought and nothing imported, and is measured at an exact 2× on real hardware. Its source is now public and MIT-licensed. Alongside it, LSFG Native gets three fixes: the smear on switch-on is gone, the switch-on stall is halved, and two freeze paths are closed. Plus: move an installed Steam game between internal storage and the SD card, save backups that no longer lose your progress to an account-id mismatch, preset editing from the screens where you actually need it — and a new set of compatibility layers that stops controllers dying part-way through a game.

⚠️ Frame generation is still young. Win-FG Native is proven on Adreno 750 but has had limited testing beyond it. It is off by default and starts off every launch; if it misbehaves, leave it off.

📘 New to LSFG Native? Read the plain-language guide: LSFG Native Made Simple — why Max FPS × multiplier has to fit your screen's refresh rate, why a steady base matters, a live checker to try your own numbers, a cheat sheet and real-world fixes. Opens in any browser. The same rule applies to Win-FG Native, which always runs at 2×.

What's New — everything since 3.0.8

🎞️ Win-FG Native — frame generation with nothing to buy

Bannerlator has had its own clean-room frame generation for a while. It was generating frames correctly and then losing them. Running as a layer inside the game, each generated frame reached the compositor as a separate buffer under the same window, and only the newest survived — so the in-game counter read 2× while the panel still showed 1×. That is why the numbers never matched what people saw.

It now runs inside Bannerlator's own compositor, where there is no hop left for a frame to be dropped in.

Before (as a layer inside the game) Now (Win-FG Native)
Measured result 84 → 105 fps — about 25% of a doubling 45 → 90 fps — an exact 2×
Time to switch on ~124 ms (LSFG Native takes ~2.2 s)

Measured on an AYANEO Pocket FIT (Adreno 750) by the system's own frame counter — not an in-app HUD, which cannot see frames added after the game submits them.

  • Nothing to buy, nothing to import. No Lossless.dll, no purchase, no setup. Pick Win-FG Native (built in) in the frame-generation dropdown and turn it on.
  • On or Off, at 2×. Deliberate: the engine recalculates motion for every generated frame, so higher multipliers cost more here than they do on LSFG Native. It runs at its Performance preset.
  • It switches on almost instantly, because its shaders are compiled into the app rather than read out of a file at runtime.
  • Camera-pan correction and flow smoothing are on by default and engage on their own — the two passes that stop the picture melting during fast pans.

The source is now open. Win-FG Native is MIT-licensed, with shader-by-shader provenance, an engineering log and a contributor guide:

https://github.com/The412Banner/win-fg

ℹ️ Why this project exists. Bannerlator once bundled a frame-generation layer later found to embed shaders derived from proprietary Lossless Scaling work, which cannot be redistributed. That layer was removed and rebuilt from scratch. Every shader in Win-FG Native is written from published algorithms — its motion estimation is our MIT adaptation of AMD FidelityFX FSR3 optical flow, its synthesis is written from first principles — and every shader source cites the paper it implements. No proprietary code or weights are bundled. That is also why the two engines sit side by side: LSFG Native runs your own legally-owned Lossless.dll, while Win-FG Native is entirely Bannerlator's own and needs nothing.

🩹 LSFG Native — three fixes

  • No more smear when you switch it on. Every single time frame generation started, the first invented frame was blended against a stale picture — a brief warp, right at the moment you turned it on. The engine now spends one frame catching up before it starts. Same on resume after any stutter longer than a quarter second.
  • The switch-on freeze is roughly halved — 4.8 seconds down to 2.25. The 25-shader pipeline was being built twice: once at the most expensive setting possible, because the engine had not yet been told how large the game actually renders, and again a frame later at the correct one. Now it is told first, and builds once.
  • Two freeze paths closed. Both could leave the picture locked while sound and vibration carried on as normal.

All three confirmed on device, by log: one priming line per switch-on, one shader-chain build at the right resolution, and no error paths hit.

💾 Save backups now carry the emulator's account id

A save could back up and restore perfectly and the game would still offer only New Game.

Cracked games name their save folder after an account id that lives in the container — and a rebuilt container rolls a new one, so the game looks in an empty folder next to a perfect save. Backups now include that id, so a restore brings the account with it.

  • Applies to every per-game backup path, including the automatic one on game exit.
  • Restoring decides for itself only when it is safe to: no id in the container, or an id that already matches. When the container runs a different account it asks first and shows you both — because that id is shared by every game in the container, and taking the backup's would orphan the others.
  • Fixes a crash where two overlapping backup roots produced a duplicate entry and killed the backup outright.

💽 Move an installed Steam game between internal storage and the SD card

From the game's ⋮ menu. Verified file by file; a round trip comes back byte-perfect, and the game launches from the card afterwards — including through a secure Steam session.

🎛️ Preset editing where you need it

The six preset actions — add, edit, duplicate, delete, export, import — are now on the Container screen and on a game's own settings, not just App Settings. No more backing all the way out to change one value.

  • Edits are scoped to where you make them. A change in a game's settings stays with that game; one in the container stays with the container. Same three tiers the app already used to decide which preset applies, extended to what is inside it.
  • A ✎ CUSTOM badge marks a preset carrying local changes, and Reset at any level drops the local copy and follows the level above.

📦 New compatibility layers — versionCode 6: controllers no longer die mid-game

All seven Proton / GE-Proton layers were rebuilt (proton-wine release build-bionic-layers-20260908-xinput, now the in-app catalog default). Each is its -5 build plus one fix. They install into a new -arm64ec-6 slot beside your existing layers, and any container on a -5 layer is offered Update layer → v6 on its card — games, saves and settings kept, and revertible from the container's ⋮ menu.

  • Controllers no longer stop working part-way through a game. Wine's XInput polls every controller from a single thread. One momentary wait failure — esync's ppoll returning try again, which happens on Android — made that thread exit for good, and XInput never read a controller again until the game was relaunched. The physical pad and the on-screen controls died together (they share that path) while touch kept working, the in-game drawer still showed the controller as connected, and Reset Input could not bring it back: it rebuilds the Android side, and the part that had died is inside Wine. The thread now rides out those momentary failures, re-checks which controllers are connected and carries on — and still stops if the failures never clear, rather than spinning. Every XInput version (1.1 – 1.4) is covered.
  • Nothing else changed versus -5. The Denuvo unwinder fix (Need for Speed Heat), DirectAudio v1.3.2, the EA Desktop networking and installer fixes, the font-handle cap, GE-Proton's game patches and the single 4 KB + 16 KB .wcp all carry over.

⚠️ Tested on device on one layer. The failure was reproduced, root-caused from the game's own Wine log and fixed on GE-Proton 11.0-6 (Titanfall 2, Adreno 750). The other six layers carry the identical fix — confirmed present in each built xinput1_3.dll — but have not been booted on a device. Layers outside this set (Proton 9, the older Nightlies Wine builds) do not have the fix.

🔧 Smaller

  • FEX_DISKCACHE is in the environment-variable picker, with help text.

⚠️ Carried over — still open

  • Win-FG Native has had limited device testing. It is proven on Adreno 750; other GPUs are unknown. It is off by default.
  • Cancelling a store download removes it from the list but does not yet stop the transfer engine underneath. Force-stop the app to be certain.
  • Origin-era EA titles ask for the EA sign-in on every launch, and EA counts every one. This is EA's server, not something a reinstall fixes.
  • Need for Speed (2015) does not run: its 2015-era Denuvo re-protects its own code thousands of times a second, which no Android emulation stack currently does fast enough.
  • Rockstar Games Launcher titles (GTA V Enhanced) are not supported: the launcher installs but its Social Club web UI never loads.
  • 64-bit titles launched directly by Steam can still crash at startup with the overlay-injection signature and fall back to an insecure start.
  • The Java Steam engine fallback is still present. Its removal has moved to a later release.

📦 Where to get Proton 9

The APK does not bundle Proton 9 — Wine installs from the in-app catalog on first run.

⚠️ A fresh install ships with no Wine at all. On first run, open Containers → the download icon and install a Proton before creating a container. Updating from 3.0.8 changes nothing — your existing containers and Wine installs are untouched.

Proton 9.0 arm64ec — not bundled, download it if you want it:

https://github.com/The412Banner/Nightlies/releases/download/Proton/wine/proton-9.0-arm64ec.wcp

66.7 MB · sha256 f8a99fed387f1b097009129dc49368c8f500927640a9d4c7a192d850b1b2068c
Install it via Containers → download icon → install the .wcp. It also appears in the in-app catalog. (Compiled as a wcp by Xnick417x.)


🙏 Credits

Win-FG Native is original work by The412Banner — a clean-room frame generator built from published algorithms after the previous bundled layer had to be removed for provenance reasons. Moving it host-side, diagnosing why its frames were being discarded, and the three LSFG Native fixes in this release are likewise original work. Its source, per-shader provenance and engineering log are public at The412Banner/win-fg under the MIT licence.

Thanks to the community testers who keep putting frame generation through real games on real hardware — the discarded-frames problem was only ever visible to someone watching an actual panel, not a counter.

Built on the work of many open-source projects and their communities:

  • Frame generationWin-FG Native (ours, MIT), whose motion estimation is an adaptation of AMD FidelityFX FSR3 optical flow (MIT); and Eden (native LSFG present path) with WinNative as the design reference for the LSFG engine.
  • Native Steam engine & SteamLite agent — derived from WinNative's GPL wnsteam client and wn-steam-launcher (hardened, extended and rebranded here); protocol groundwork from SteamKit2 (the SteamRE team).
  • Steam (fallback engine)JavaSteam (joshuatam's fork of SteamKit2) and Goldberg / gbe_fork (Detanup01 & contributors).
  • GraphicsDXVK (Philip Rebohle & contributors), VKD3D-Proton (Hans-Kristian Arntzen & contributors), Mesa / Turnip (the Freedreno & Mesa teams).
  • Containers, launch & runtimeWine (WineHQ) and Proton / GE-Proton (Valve & GloriousEggroll); box64 (ptitSeb) and FEXCore (the FEX-Emu team).
  • Audio — Android AAudio, driven by our own DirectAudio endpoint.
  • The app itselfWinlator (brunodev85) and its Cmod lineage; GameNative (GPL-3.0) for the Steam session-hardening and present paths.

Steam is a trademark of Valve Corporation; EA, EA Desktop, Origin and Need for Speed are trademarks of Electronic Arts Inc.; GOG is a trademark of GOG sp. z o.o.; Epic Games Store is a trademark of Epic Games, Inc.; Amazon is a trademark of Amazon.com, Inc.; Lossless Scaling is a trademark of its respective owner; other names are trademarks of their respective owners. Bannerlator is an independent project — not affiliated with or endorsed by any of them. Each component remains under its own license.


Entirely app-side — no ImageFS reinstall. Install over 3.0.8; everything carries over.