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](https://the412banner.github.io/Bannerlator/lsfg-native-guide.html)** — 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**.)*
---
🙏 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](https://github.com/libsdl-org/SDL)** (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: - **Input** — **[SDL3](https://github.com/libsdl-org/SDL)** (zlib) for the Steam Controller. - **Upscaling** — **SGSR 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 generation** — **[Win-FG Native](https://github.com/The412Banner/win-fg)** (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). - **Graphics** — **DXVK** (Philip Rebohle & contributors), **VKD3D-Proton** (Hans-Kristian Arntzen & contributors), **Mesa / Turnip** (the Freedreno & Mesa teams). - **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, 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.*