# Bannerlator 3.1.4
Run Windows apps and games on Android โ no PC and no root required.
**3.1.4 makes OpenGL games several times faster, on every Wine version.** On X11, every OpenGL frame used to be finished on the GPU, copied back to the processor and redrawn as a picture. The new **Fast OpenGL** setting sends it straight to the screen through Vulkan instead, the same road DXVK games already take. It's on by default and picks the right method for your Wine version by itself, from Wine 9.5 to Proton 11, arm64ec and x86_64. Old DirectDraw and Direct3D 1โ7 games speed up too. 3.1.4 also makes Wayland easier and faster: one driver choice, no tap to start a game, and DirectX 12 no longer held back.
- **Fast OpenGL:** OpenGL on X11 about 4 to 5 times faster, DirectDraw about 2 times, on every Wine version. No freedreno, just your Turnip driver.
- **One OpenGL card** in container and game settings: Fast, Show FPS and Vsync off.
- **Wayland:** one driver choice through the new adapter, no tap to start, tear-safe zero-copy, DirectX 12 uncapped.
- **Sync selector** (esync, ntsync, fsync, wineserver), **Android games** in the Games tab, and Linux Steam client **offline mode**.
> ๐ **How did OpenGL get so much faster? Read the plain-language explainer: [Fast OpenGL โ OpenGL games now run 4 to 5 times faster](https://the412banner.github.io/Bannerlator/fast-opengl/)** โ why it was slow, what changed, which Wine versions get it, before-and-after screenshots and the fps for each one. No technical knowledge needed.
> โ
**Nothing to set up.** Fast OpenGL is on for every container and game, including the ones you already have. It needs a **Turnip** driver; with Qualcomm's own driver or the System driver it stays off. If one game ever misbehaves, turn it off for just that game: **game settings โ OpenGL โ Fast โ Off**.
> ๐ **New to LSFG Native? Read the plain-language guide: [LSFG Native Made Simple](https://the412banner.github.io/Bannerlator/lsfg-native-guide.html)** โ why Max FPS ร multiplier has to fit your screen's refresh rate, and what the numbers on the HUD mean.
# What's New โ everything since 3.1.3
## โก Fast OpenGL: OpenGL on X11 4 to 5 times faster, on every Wine version
On X11, Bannerlator's OpenGL used an old "draw into memory" route: for every frame, the processor waited for the GPU to finish, copied the picture back, and handed it to the X server as an image. The GPU and the processor took turns instead of working together.
Fast OpenGL sends each frame straight to the screen instead. **Zink**, which turns OpenGL into Vulkan, presents it through a Vulkan swapchain, exactly like DXVK games do. The app picks one of two methods for you:
- **Wine 11 / Proton 11 (arm64ec):** Wine's own EGL route, with a Mesa EGL library built for X11 that ships inside the app.
- **Every other Wine version** (Proton 10, Wine 9.5, every x86_64 layer and third-party layers): a new Mesa OpenGL library (GLX) that ships inside the app, and Bannerlator's X server now understands GLX, so it can hand frames to Vulkan instead of copying them.
Measured on the Pocket FIT, Fast OpenGL off โ on, same container, a minute apart:
| Wine version | Method | OpenGL test | DirectDraw test |
|---|---|---|---|
| Wine 11 / Proton 11.0-2 (arm64ec) | EGL | 364 โ **1239โ1455 fps** | 351 โ **1086 fps** |
| GE-Proton 10.0-34 (arm64ec) | GLX | 381 โ **1906 fps** | 587 โ **1300 fps** |
| Proton 11.0-2 (x86_64) | GLX | 390 โ **1502 fps** | 571 โ **1275 fps** |
| Wine 9.5 (x86-64) | GLX | 386 โ **1989 fps** | 601 โ **1148 fps** |
SGI's skyfly, a real OpenGL program, went from 706 to **2662 fps** on Wine 9.5. The Wine 11 DirectDraw figure is from the pre-release 2 tests, which ran with the GPU held at a lower clock.
- **Helps:** OpenGL games (Quake-engine games, Half-Life 1, KOTOR, Neverwinter Nights, Noita, Dominions 6 โฆ) and old DirectDraw / Direct3D 1โ7 games that run through WineD3D, **on X11**.
- **Doesn't change:** DXVK (Direct3D 8โ11), VKD3D (Direct3D 12) and Vulkan games, which already took the fast road. We checked all four Wine versions above with Fast OpenGL off and on: Vulkan, DirectX 11 and DirectX 12 stayed within 2%.
- **No freedreno.** Some apps make OpenGL fast by adding freedreno, a second, OpenGL-only driver. Fast OpenGL runs on the Turnip you already picked, so OpenGL, DirectX and Vulkan share one driver and its fixes.
- **Faster, not fast-forward:** more frames per second means smoother motion, not a faster game. A few very old games tie their speed to the frame rate; cap those with the FPS limiter.
- **The first game start after updating** copies the OpenGL libraries (about 24 MB) from the APK into the app's own folder, once. ImageFS isn't touched.
> โ
**Tested** on the Pocket FIT: the OpenGL and DirectDraw tests and SGI's skyfly and wave on all four Wine versions above, each checked by screenshot. The app picked the right method on each with nothing set by hand. โ ๏ธ A full commercial OpenGL game hasn't been run through the GLX method yet. Please report OpenGL games, with fps before and after.
## ๐ฆ One OpenGL card
Container settings (General) and each game's settings have one compact **OpenGL** card with a single **?**:
- **Fast**: the method above. On by default. Wayland is always on. Greyed out, with the reason, when the graphics driver can't do it.
- **Show FPS**: Mesa's own fps counter in the top-left corner of OpenGL games.
- **Vsync off**: lets OpenGL games run above the screen's refresh rate. Many older OpenGL games ask for vsync and otherwise lock to your refresh rate (144 fps on a 144 Hz screen).
In game settings each one is **Auto / On / Off**, where Auto follows the container. They apply when the game starts. Power users can force a method with `BANNER_X11_EGL=0` (off), `BANNER_X11_EGL=1` (EGL) or `BANNER_X11_GLX=1` (GLX) in the environment variables.
## ๐งฉ Wayland: one driver choice
Until now, Wayland needed two drivers: your normal one for the screen, and a separate Linux-style "Wayland driver" for the game. That second one had to come from a special build, and most community drivers didn't have one.
Bannerlator now ships a small **Wayland adapter**. It takes the ordinary AdrenoTools Turnip you already use on X11 and lets it draw Wayland games, so any community Turnip works.
- New containers and **New Container Defaults** start on it. Existing containers are left alone; to switch one, set **Advanced โ Wayland game driver โ Adapter (uses your graphics driver)**.
- On Wayland the container shows one **Graphics driver** pick. The game-driver choice moved under **Advanced**.
- If Qualcomm's own driver is picked on Wayland, the screen now uses a bundled Turnip automatically instead of failing.
- New game windows get keyboard focus by themselves, and when a window closes, focus moves to the next program window.
> โ
**Tested:** DiRT Showdown and the AIO Graphics Test on the adapter with the player's own Turnip (Pocket FIT, Adreno 750). โ ๏ธ Mali, Xclipse and PowerVR through the adapter are untested.
## ๐ Wayland: no more tapping the screen to start a game
Some games sat paused on a black or frozen screen until you tapped it. Bannerlator now brings the game's window to the front the same way X11 always has, through Wine's own helper inside the container (`winhandler.exe`).
> โ
**Tested:** DiRT Showdown starts on its own with no tap. X11 was re-checked and still works as before.
## ๐ผ๏ธ Wayland: zero-copy without half-drawn frames, and no 144 fps cap
- **Zero-copy** (game pictures straight to the screen, no copy) could show a picture before the GPU had finished drawing it. The adapter now waits until each picture is finished. โ
No torn frames and no speed lost in testing.
- **Every Wayland game was capped at the screen's refresh rate.** A compositor change meant for the Linux Steam client's gamescope held every frame until the screen let go of it. Wayland games are uncapped again: in the AIO test, Vulkan went from 144 to 529 fps and OpenGL from 144 to 262.
- **Old DirectDraw games no longer crash on Wayland.** Mesa's helper thread crashed outside Wine's view; Fast OpenGL turns that thread off. The DirectDraw test went from a crash to about 2,470 fps.
## ๐ DirectX 12: no longer held back
We found a bug in the Turnip driver's Adreno code. When a game only wanted to *check* "has the GPU finished yet?", the driver made it *wait* until the GPU had finished. DirectX 12 (through VKD3D-Proton) makes that check every frame, so the processor and the GPU took turns.
- **On Wayland,** the adapter answers those checks instantly, so this works with any Turnip you pick: a small DirectX 12 test went from about **600 fps to over 4,000**.
- **On X11,** the fix is inside the driver itself: [Banners-Turnip](https://github.com/The412Banner/Banners-Turnip/releases) **r4 and later**. Switch to a current driver to get it. The same DirectX 12 demo ran about **3.8ร faster on X11** and **5.9ร faster on Wayland** with the fixed driver.
- Heavier games gain less, because the GPU is usually the limit there. Processor-heavy DirectX 12 games, and games at high frame rates, gain the most.
## ๐ Sync selector
A row of pills under the compatibility layer: **esync**, **ntsync**, **fsync** or **wineserver**, per container and per game (games follow the container unless you change them). The app checks what each layer supports and greys out the rest. A **?** and glossary entries explain each one. The old WINEESYNC / WINEFSYNC environment-variable checkboxes are gone; existing settings carry over.
> ๐ฆ **ntsync and the other choices are built for the v9 Proton layers.** Get them from the in-app download catalog, or from the release: [Proton v9 layers โ GE-Proton 11.0-7.1 / 11.0-7 / 11.0-6 / 11.0-5 / 11.0-3 ยท Proton 11.0-2 / 11.0-1 ยท Proton-CachyOS ยท Proton 10.0-4 ยท GE-Proton 10.0-34 (arm64ec + x86_64)](https://github.com/The412Banner/proton-wine/releases/tag/build-bionic-layers-20260930-v9)
## ๐ฑ Android games in the Games tab
**+** now asks what you're adding first: a Windows game, a folder of games, or an **Android game**. Android games are picked from the apps on your phone, get a green **ANDROID** badge, and launch directly, with no container. They live in their own place, so deleting a container never removes them.
## ๐ง Linux Steam client
Ported from DroidDeck:
- **Offline mode** per entry (needs one online sign-in first).
- **Deck mode:** a working performance overlay (MangoHud) drawn correctly over Big Picture; Steam starts with `-steamos3` like SteamOS; a game that minimized itself behind the Steam menu comes back on Resume (gamescope p4).
- **Cleaner start and exit:** black loading and closing screens with the Steam art, the Steam client shuts down properly when you stop the session, and an interrupted runtime update repairs itself.
- **Smoother:** faster file lookups for the Steam client, gamescope realtime queues and Xalia off by default, and the Steam menu chord and double-Back timing tuned.
## ๐ง Smaller
- **Contents โ Installed โ โฎ โ Set as defaultโฆ** for drivers and components: set one for new containers, all existing containers, or their games, with Undo.
- **Compatibility layer cards show the installed versionCode** ("Installed ยท v9"), so two builds of the same layer can be told apart.
- **DirectAudio** can be picked on **GE-Proton 11.0-7 and 11.0-7.1** (it was greyed out).
- **Controllers:** pad input reaches games faster (the input wait drops from up to 16 ms to at most 2 ms), and the app asks Android for unbuffered input.
- **Exit reports** now say which process exited and why (signal or exit code), and keep its last 400 log lines.
- The Wayland slide deck gained a results slide.
## โ ๏ธ Carried over โ still open
- **Fast OpenGL:**
- **32-bit OpenGL games on older 32-bit-only Wine setups** aren't covered; the OpenGL libraries are 64-bit only. Those games run as before.
- **Games that draw OpenGL into child windows** haven't been tested on the GLX method; the X server's window-compositing support is basic. If one shows a black or frozen area, turn **Fast** off for that game.
- **Wayland:**
- **Noita on Wayland closed once** after a graphics-buffer error (Android's file-handle safety check stopped it). It hasn't happened again since.
- In the AIO Graphics Test's normal sweep, every API except Direct3D 11 is copied back to the processor to be shown inside the test's own window, which caps those rows around twice the screen refresh. That's the test, not the API: run each API on its own (`--cube --bench 15`) for real numbers.
- Mali, Xclipse and PowerVR through the adapter need testers.
- Everything listed as open in 3.1.3 is unchanged: the Linux Steam client items (FlatOut after Resume, Team Fortress 2 "insecure", Guide pressed twice after sleep, the proot patches' A/B), the Fusion HUD's GPU usage with **Lock GPU to max clock**, and BannerHub signing Steam out of SteamLite games.
๐ฆ 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. The Linux Steam client does not use these layers at all: its games run through Valve's own ARM64 Proton.
**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)
**Fast OpenGL** uses **Mesa** (EGL, GLX and Zink, by the Mesa team), built for X11 and Wayland in The412Banner's [Banners-Turnip](https://github.com/The412Banner/Banners-Turnip), and **Wine**'s EGL backend. The X server's GLX and Composite support is ported from **Pipetto-crypto**'s winlator_bionic (MIT, **BrunoSX**).
**The Wayland adapter** is The412Banner's [bionic-vulkan-wrapper](https://github.com/The412Banner/bionic-vulkan-wrapper) (`banner/wayland-wsi`), built on **Pipetto-crypto**'s bionic Vulkan wrapper (the wrapper-25 line), with Mesa's Wayland window-system code added.
**Bringing windows to the front** uses the same `winhandler.exe` request that Winlator and every Winlator fork already use on X11 (Winlator by **brunodev85**).
**The Turnip driver fix** (the "check, don't wait" bug) is The412Banner's, in [Banners-Turnip](https://github.com/The412Banner/Banners-Turnip), built on **Mesa / Turnip** by the Freedreno and Mesa teams, and documented in `docs/KGSL_ZERO_TIMEOUT_POLL.md` there.
**The Linux Steam client changes** are ported from **DroidDeck** (Droid-Deck/DroidDeck), including work that came there from **WinNative** (the input-latency change, WinNative #772, and the translucent-surface blending by maxjivi05).
**ntsync** in the Sync selector is GameNative's userspace ntsync (**Joshua Tam / joshuatam**, GameNative/ntsync-android), built into the v9 Proton layers.
Everything credited in 3.1.3 still applies:
- the Linux Steam client runtime (Valve, DroidDeck, WinNative, Armada, Termux proot, Arch Linux ARM, FEX-Emu);
- the bundled Wayland drivers (Vauzi-17, the WinNative development team, StevenMXZ, whitebelyash);
- DXVK, VKD3D-Proton, Wine, Proton / GE-Proton, box64, SteamKit2 and Wayland.
---
*Entirely app-side โ no ImageFS reinstall. Install over 3.1.3 or any 3.1.4 pre-release; everything carries over.*