Skip to content

Bannerlator 3.1.0

Latest

Choose a tag to compare

@github-actions github-actions released this 11 Sep 01:12
· 28 commits to main since this release

Bannerlator

3.1.0  app-side update

Bannerlator 3.1.0

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

3.1.0 brings the Steam Controller to Bannerlator. Out of the box a Steam Controller acts as a keyboard and mouse, so Android never sees a gamepad — Bannerlator now talks to it directly, the way Steam does: a real controller in games, with your bindings, remappable back buttons and a trackpad mouse. Frame generation now fits your screen by itself and warns you when your numbers can't work. Plus a sharper upscaling mode, SGSR HQ, per-game texture filtering, and new containers that start at a screen size matching your panel.

⚠️ Steam Controller support is new and opt-in. It has been tested on the 2026 Steam Controller over Bluetooth and over a USB cable, on one phone. The wireless puck is supported but not tested yet. It is off by default — and while it is off, nothing about your other controllers changes.

📘 New to LSFG Native? Read the plain-language guide: LSFG Native Made Simple — now updated for 3.1.0. 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.9

🎮 Steam Controller support

A Steam Controller speaks Valve's own protocol. Without Steam running, it pretends to be a keyboard and mouse ("lizard mode"), so Android never reports a gamepad and games never got one. Bannerlator now opens it directly through SDL3's Steam Controller driver — the same code Valve maintains for Steam on Linux — switches lizard mode off, and reads it as a full controller.

Turn it on: Input Controls → Device → Steam Controller → Steam Controller support: On. Pair the controller in Android's Bluetooth settings first, or connect it by USB. If Android asks for Nearby devices, allow it. Works with the 2026 Steam Controller, and the original one over Bluetooth.

  • A real gamepad in games — sticks, triggers, buttons and D-pad arrive as an Xbox controller, with a player slot of its own and rumble. Player pins, on-screen-controls priority, the in-game Players list and Reset Input work exactly as they do for any controller.
  • Your bindings apply — it follows your controls profile's Default / Any Controller bindings, so a button you bound to Space or a mouse click works on the Steam Controller too.
  • Extra buttons — map the four back buttons (L4, L5, R4, R5) and the button between the trackpads to any gamepad button, a mouse click or any keyboard key.
  • Trackpad mouse — the right trackpad moves the mouse and clicking it left-clicks. Pick Left, Both (the left trackpad then clicks right, so you have both buttons) or Off.
  • Test it — the Input Controls → Test dialog detects it with its own picture, counts all 18 inputs, and Identify makes it buzz.
  • Other controllers are untouched. Bannerlator only opens Valve controllers this way; everything else still goes through Android as before.

⚠️ Tested by one community tester, TAR, on a 2026 Steam Controller over Bluetooth (OnePlus 15, Adreno 840), across six test builds: in-game play, bindings, the extra buttons, both trackpad modes and the Test dialog. A USB cable has since been tested too, and works — the first time, Android will ask you to allow access. The wireless puck goes through the same driver but has not been tried yet. Not done yet: the controller's gyro, a second use for the left trackpad (scroll wheel / D-pad), and the Steam button as the Xbox Guide button.

🎞️ Frame generation that fits your screen

For LSFG Native and Win-FG Native.

  • It warns you when your numbers can't work. When Max FPS × multiplier is higher than your screen's refresh rate, the generated frames queue up and arrive late — stutter and input lag instead of smoothness. The side menu now says so, with your numbers, and offers a one-tap Set Max FPS to N; for LSFG Native it also suggests a multiplier that fits. The Max FPS hint now says what the limiter actually does under each engine.
  • The screen fits itself. With Auto (match FPS) on, the display switches to exactly Max FPS × multiplier — 30 × 2 → 60 Hz — or, if your screen doesn't have that rate, the closest one above it (50 × 2 → 120 Hz), never below. It changes once per change you make, never with the live frame rate. When the fit is exact, the game is paced a hair under the cap so a frame can never get stuck in the queue.
  • Auto (match FPS) turns on while frame generation runs, whatever it is set to otherwise, and the side menu tells you. Turn it off and that game remembers; other games from the same container still get it. When frame generation stops, your saved setting comes back.
  • It tells you why it can't run, instead of doing nothing. If your Renderer Driver lacks Vulkan 1.3 (LSFG Native needs it), Lossless.dll is missing, or the renderer isn't Vulkan, you get a plain reason with the fix — "set Renderer Driver to a Turnip driver, then relaunch the game" — and the multiplier buttons grey out. Prompted by a community report from an Adreno 710.
  • The "?" help is current. Frame Generation, the FPS Limiter and Present Mode now describe the two engines that exist.

Tested on an AYANEO Pocket FIT (Adreno 750, 144 Hz) with LSFG Native in DiRT Showdown: 30 × 2 → 60 Hz, 45 × 2 → 90 Hz, 36 × 4 → 144 Hz, and 60 × 4 stays at 144 Hz with the warning. Auto switching itself on, and the per-game opt-out, were tested on the same device. The can't-run message was only checked to stay quiet on a working driver; it hasn't been seen on a failing one yet. A 60 / 120 Hz phone, and Win-FG Native with the screen fit, are untested.

🖼️ SGSR HQ — a sharper upscaling mode

A new option next to SGSR in the in-game Scaling mode picker, on both the Vulkan and OpenGL renderers. Same single pass and sharpness slider as SGSR, but it follows the direction of edges, so diagonal lines come out cleaner — at about the same cost. It is a port of Qualcomm's edge-direction variant of Snapdragon Game Super Resolution. Your existing SGSR choice is unchanged.

Tested on an Adreno 750 (Vulkan) through repeated mode switches in one session, with no instability. The difference is real but subtle.

🧵 Per-game texture filtering

A new Texture filtering section in the DXVK / VEGAS settings, for a container or a single game:

  • Anisotropic filtering — Game default, 2×, 4×, 8× or 16×. Sharper textures on floors, roads and walls seen at an angle.
  • Texture sharpness — Game default, Auto, or −0.25 to −1.0. Auto matches your upscaling: rendering 720p on a 1080p screen sharpens by about −0.58, following AMD's FSR guidance, and does nothing when you aren't upscaling.

DirectX 9–11 games only (DXVK); nothing changes at Game default. The settings travel with community configs.

Tested in DiRT Showdown at 16× + Auto: DXVK's own log confirmed both settings, and detail in the distance came out measurably sharper.

📐 New containers start at a screen size that fits your panel

New containers used to start at 1280×720 on every device, so 4:3 and 16:10 screens were letterboxed from the first launch. The default now follows your screen's shape:

Your screen New containers start at
16:9 and wider (phones, most handhelds) 1280×720 — unchanged
16:10 and 3:2 1280×800
4:3 and squarer (Retroid Pocket, foldable inner screens) 1280×960 — new in the list

Existing containers and games are never changed, and a saved new-container default still wins.

⚠️ Not yet tested on a 4:3 or 16:10 device.

🔧 Smaller

  • "?" help for Screen Size, the in-game Scaling mode picker, Anisotropic filtering and Texture sharpness.
  • The LSFG Native guide is updated for 3.1.0 — Auto switching on during frame generation, the in-menu warning and fit, the driver check, and a new Auto switch in the live checker.

⚠️ 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 (tap to expand)

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.9 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.)

📜 Every change since 3.0.9 — 11 merged, oldest first
  • Add LSFG Native beginner guide (GitHub Pages) · 9c3143a7
  • Frame-gen over-limit warning + accurate Max FPS hint — feat/fg-over-limit-warning · 02330d9f
  • Fit the display to Max FPS x multiplier under native frame gen — feat/fg-vrr-match · f8036a56
  • Auto (match FPS) on when native frame gen starts, per-game opt-out — feat/fg-auto-refresh-optout · 7cfde0a0
  • Say why native frame gen can't run instead of failing silently — feat/fg-unavailable-notice · 4b2320ae
  • Frame Generation help and Present Mode note up to date — fix/fg-help-text · e4c8c15d
  • SGSR HQ scaling mode (SGSR 1 edge-direction) + Scaling mode help — feat/sgsr-quality-mode · 9c20bd42
  • Per-game anisotropic filtering + texture sharpness (with help) — feat/texture-filtering · 050ead70
  • New containers default to a screen size that fits the panel (with help) — feat/screen-size-by-aspect · 3ece26e8
  • Opt-in Steam Controller support via SDL3 — feat/steam-controller-sdl · c2acbbd1
  • LSFG Native guide updated for 3.1.0 — docs/lsfg-guide-3.1.0 · 4d49af0d

🙏 Credits (tap to expand)

Thanks to TAR for testing the Steam Controller support through six builds and shaping it along the way — the bindings fix, the remappable back buttons and button, the 18-input controller test and the left/both trackpad options all came from his reports.

The Steam Controller support is built on SDL3 (Sam Lantinga and the SDL contributors, zlib licence), whose Steam Controller driver does the talking to the controller; the official SDL 3.4.16 Android release is bundled unmodified. Thanks also to the community member whose Adreno 710 report led to the frame-generation "can't run" notice.

The frame-generation screen fit, the Steam Controller integration, SGSR HQ and texture filtering are original work by The412Banner, built on the projects below.

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

  • InputSDL3 (zlib) for the Steam Controller.
  • UpscalingSGSR HQ ports Qualcomm's Snapdragon Game Super Resolution edge-direction shader (BSD-3-Clause); texture sharpness Auto follows AMD FidelityFX FSR 1's mip-bias guidance.
  • 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, and the idea behind fitting new containers to the panel (GameNative #1730).

Steam and Steam Controller are trademarks 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.; Qualcomm and Snapdragon are trademarks of Qualcomm Incorporated; AMD and FidelityFX are trademarks of Advanced Micro Devices, 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.9; everything carries over.