Bannerlator 3.0.6
Run Windows apps and games on Android — no PC and no root required.
3.0.6 is the frame-generation update. LSFG Native runs Lossless Scaling's frame generation inside Bannerlator's own compositor, on the Android side of the Wine boundary, so the extra frames are made at the last stop before your screen and none of them get lost on the way. Measured on device: a game capped at 30 fps shows 118–120 fps at the panel at 4×, with the game itself untouched. The older lsfg-vk engine is retired in its favour. GOG, Epic and Amazon each open on a storefront now, on the same layout as Steam.
⚠️ LSFG Native needs your ownLossless.dll. Bannerlator bundles no Lossless Scaling files. Own Lossless Scaling (THS, on Steam) and import itsLossless.dllunder Settings → Frame Generation — LSFG Native (Detect from the in-app Steam store, or import a copy). The shaders are extracted from your DLL on device and cached; the first launch after importing is slower while that happens.📱 Device support. LSFG Native needs a GPU that can run the chain (Vulkan 1.3 with the shader features it requires and a storage-capable swapchain format). In small community testing it has worked on Adreno 7xx and newer (the A7xx/A8xx families) and on some MediaTek Dimensity devices. On other GPUs it may report itself unsupported in-game, or engage but not keep up. Treat it as generally supported on Adreno A7xx-class hardware and up, and experimental elsewhere.
How to use it well: cap the game with the FPS limiter (30 is the proven starting point), pick 2×/3×/4× from the in-game drawer, and keep cap × multiplier under your panel's refresh rate — 30 × 4 = 120 on a 144 Hz screen. It works best when the game holds its cap with GPU to spare. Needs the Vulkan renderer. Every launch starts with frame generation off.
⚠️ Win-FG frame generation is still EXPERIMENTAL — unchanged in this release. It is off by default; if it misbehaves, leave it off. Its frame counter can read higher than what reaches the screen.
What's New — everything since 3.0.5
🎞️ LSFG Native — Lossless Scaling frame generation inside the compositor
- Where the frames are made changes everything. The previous engine (lsfg-vk) generated frames inside the game and sent them down the same long path as real frames — Wine, the X server, the compositor — and many were lost before they reached the screen, while the game's counter happily counted them. LSFG Native generates at the compositor, which owns the path to the screen. What it makes is what you see.
- Device-proven: DiRT Showdown on an Adreno 750, game locked at 30.0 fps → 89.8 fps at 3× and 119.8 fps at 4× measured at the swapchain, and 89 / 118 on the AYANEO system overlay, which is separate code and agreed to within about 1%. GPU load was lower than the same game running uncapped with no frame generation at all.
- It takes care of the settings for you while generating: the present mode is forced to FIFO (every frame gets its own refresh; Mailbox would keep only the newest), the FPS limiter is locked on (a steady capped game is what interpolation is built on; if you had no cap, 30 is used) and Auto refresh (VRR) is locked off. All three go back to how you had them the moment you turn it off.
- The HUD tells the truth. In-game HUDs count frames the game delivers, so they could never see frames added after it. Every HUD style now shows
30→120— the game's rate and what actually reaches the panel — whenever the two differ. The frame-generation drawer shows the same as real → shown (N×). - Your DLL, on your device. Nothing proprietary ships in the APK. The 25 shaders are read from your imported
Lossless.dllas data, translated to Vulkan on device, and cached; the DLL is never executed. - Runs the "performance" model. LSFG Native uses the same lighter model lsfg-vk's Performance mode used. On the test device it costs about 2 ms of GPU time per generated frame.
- Flow scale is live in the drawer, as before.
🎮 How to use LSFG Native
The short version: cap the game at a steady frame rate it can hold, then multiply — but never past your screen's refresh rate.
- Import your
Lossless.dllonce. Settings → Frame Generation — LSFG Native → Detect from Steam store (if you bought Lossless Scaling through the in-app store) or Import. You must own Lossless Scaling; nothing is bundled. - Set the container's Frame Generation engine to LSFG Native (container settings, or per game in the shortcut settings). The container must use the Vulkan renderer, on a GPU that can handle it — Adreno A7xx and up, and some Dimensity devices, in testing so far.
- In the game, cap the frame rate first. Open the in-game drawer → FPS Limiter → 30. The cap has to be one the game can hold all the time, with GPU to spare — that spare GPU is where the extra frames get made. 30 is the proven starting point; if your game already runs well above 30 uncapped, 30 is still the right cap for 4×. If it can't hold 30, lower the game's settings first.
- Turn on the multiplier. Drawer → Frame Generation → 2×, 3× or 4×. Rule: cap × multiplier must stay at or under your screen's refresh rate, ideally a little under. Every frame, real or generated, needs its own refresh; ask for more than the screen has and they queue up and the game stutters.
| Your screen | Good combinations | Too many |
|---|---|---|
| 60 Hz | 30 × 2 = 60 | 30 × 3 |
| 90 Hz | 30 × 3 = 90 | 30 × 4 |
| 120 Hz | 30 × 4 = 120 · 60 × 2 = 120 | 60 × 3 |
| 144 Hz | 30 × 4 = 120 · 36 × 4 = 144 (tight) · 48 × 3 = 144 (tight) · 72 × 2 = 144 (tight) | 60 × 3 · 60 × 4 |
- Let it handle the rest. While generating, Bannerlator forces FIFO present mode, locks the FPS limiter on and Auto refresh (VRR) off — that is the configuration it was proven in — and puts everything back when you turn it off. The HUD shows
30→120: the game's rate and what actually reaches your screen. - If it feels rough: either the game is not holding its cap (lower the cap or the settings) or cap × multiplier is over the refresh rate (drop one multiplier step). Flow scale is a quality knob for the motion estimate; leave it unless you see artifacts.
Every launch starts with frame generation off; turn it on from the drawer each session.
🅿️ lsfg-vk retired
- The in-game layer engine is off the menu. Containers or shortcuts still set to it run LSFG Native — same DLL, nothing to re-import. The Settings section that manages the DLL is now labelled for LSFG Native.
- Its code is parked, not deleted, in case it is ever wanted again.
🛒 GOG, Epic and Amazon are storefronts now
- Every store opens the way Steam does: a Store / Library / Profile shell (top tabs in portrait, a rail in landscape), and a Steam-style detail page for every game — hero art, name, one primary button with the download fill, a gear for the secondary actions, and pill tabs. Steam's own code was left untouched, so it cannot regress from this.
- GOG: a real catalog — trending, new releases, discounts and free games from GOG's public catalog, with search, mirrored to disk so it paints instantly and offline.
- Epic: store-first as well, on the same shared pieces; claiming happens in an in-app web view that shares the app's sign-in.
- Amazon Games: Amazon has no third-party catalog and Prime Gaming claims are web-only, so the Store tab is honest about it — a Prime Gaming card (Claim / Browse, in-app) plus rails cut from your own entitlements: ready to install, updates available, installed. New Amazon shortcuts get a proper 2:3 poster (from SteamGridDB) instead of a square icon, and an AMAZON badge on the Games tab — pre-existing Amazon shortcuts badge too.
⚠️ Carried over from 3.0.5 — still open
- Cancelling a Steam download removes it from the list but does not yet stop the transfer engine underneath. Force-stop the app to be certain it stopped.
- 64-bit titles launched directly by Steam can still crash at startup with the overlay-injection signature and fall back to an insecure start; 32-bit-launcher titles (CS:S, TF2, L4D2) are unaffected.
- The Java Steam engine fallback is still present. Its removal has moved again, 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.5 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
🙏 LSFG Native exists because of the Eden Team and camillelavey, whose native Lossless Scaling frame-generation present path in the Eden emulator (PR #4263, GPL-3.0) — the shader-resource map, the stage decomposition and the pacer — is what Bannerlator's implementation is ported from; and because of WinNative, whose native-side LSFG design and merged implementation were the reference ours was compared against, stage by stage. Thanks also to PancakeTAS (lsfg-vk) for the DXBC→SPIR-V translation approach the on-device shader step follows, to doitsujin for DXVK's dxbc compiler (Zlib) that performs it, and to THS for Lossless Scaling itself — the shaders remain yours, from your own copy.
Built on the work of many open-source projects and their communities:
- Native Steam engine & SteamLite agent — derived from WinNative's GPL
wnsteamclient andwn-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).
- Graphics & Frame Generation — Eden (native LSFG present path) and WinNative (design reference); DXVK (Philip Rebohle & contributors), VKD3D-Proton (Hans-Kristian Arntzen & contributors), Mesa / Turnip (the Freedreno & Mesa teams), and AMD FidelityFX (FSR).
- Containers, launch & runtime — Wine (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 itself — Winlator (brunodev85) and its Cmod lineage; GameNative (GPL-3.0) for the Steam session-hardening and present paths.
Steam is a trademark of Valve Corporation; Lossless Scaling is by THS; 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.5; everything carries over.
