Two display backends, one handheld
X11 is the mature path every Bannerlator game has used until now. Wayland is a second backend that runs Windows games through a compositor Bannerlator carries itself. This deck compares the two as they stand after pre-release 9, lists what shipped, shows the measured zero-copy result, real HDR and games on a TV, and is honest about what is left.
Most numbers and claims here come from one device, an AYANEO Pocket FIT with an Adreno 750. The OpenGL fix for phones with no display device and real HDR were also proven on an Adreno 840 phone. Games on a TV were proven on the Pocket FIT with HDR TVs.
Where a frame goes
The zero-copy row is real since pre-release 2, behind the BANNER_WAYLAND_ZERO_COPY=1 flag: the game's driver builds its swapchain on Android gralloc buffers and the compositor passes them to the display hardware untouched.
Two drivers on Wayland
The game renders on a Turnip built into the Proton layer (Linux build, KGSL backend, Wayland WSI). The compositor uses whatever Android Turnip you pick under Compositor driver. The stock "System" driver cannot import the game's frames, so it is never a valid compositor pick; since pre-release 7 a Wayland container fills in a Turnip that can.
One driver on X11
The picked Android Turnip renders the game and the X server hands the result to libwinlator. No X server exists on the Wayland side, which is where the future gains come from and also why keyboard, clipboard and pointer capture had to be built from scratch.
Frame rate today
With the default copy path Wayland is not a frame-rate win. Vulkan and D3D12 sit about 20 percent behind X11 because the compositor copies every frame once; the DXVK paths are within a few percent; The OpenGL row is not a native OpenGL result: the AIO test draws that row through a Vulkan swapchain on Wayland. Native OpenGL games render on Wayland since pre-release 6. At hundreds of frames per second one copy shows up hard. In a GPU-bound game at 40 to 60 fps the same copy costs well under half a millisecond, a few percent either way. Half-Life 2 sits at the 144 Hz cap on both. Pre-release 9's compositor work (phase 1) lifted the copy path on this device against pre-release 8: Vulkan +9%, D3D12 +12%, DirectDraw +20%, D3D11 +3.5%, with higher 1% lows on every API.
| Zero-copy, measured (pre-release 2) | Zero-copy on | Copy path |
|---|---|---|
| Game frame rate, cap and vsync removed | 185 fps | 187 fps |
| Frames on screen (144 Hz panel) | 134.5 | 134.0 |
| GPU busy | 78.6 % | 82.6 % |
| GPU clock | 944 MHz | 1000 MHz |
| Power draw | 16.29 W | 16.78 W |
| Frames presented without a copy | 133 of 134 per second | none |
Half-Life 2, same scripted intro scene, two 60-second passes per mode alternating, GPU and battery sampled once a second. Frame rate did not move because the game is CPU-bound under FEX on this device; the compositor's GPU work did go away. A frame-rate gain needs a GPU-bound game or a large panel.
What each backend can do right now
| Capability | X11 | Wayland |
|---|---|---|
| Vulkan, OpenGL, D3D12 to DirectDraw, switching in one session | Yes | Yes, proven with all eight in one launch |
| Mouse-look and pointer capture | Yes, cursor-warp based | Yes, as a protocol: pointer constraints and relative motion |
| Keyboard | Yes | Yes since this release. Two root causes fixed, see slide 9 |
| Clipboard with Android | Yes | Yes, text both ways |
| Soft keyboard on a text field | Manual toggle | Opens by itself when a field takes focus |
| Fullscreen modes and screen alignment | Yes | Yes, live from the drawer, touch mapped to match |
| FPS cap, HOME and back, swapchain rebuilds | Yes | Yes, fixed this release |
| Driver for the game | Any Android Turnip you install | Eight Turnips built into the Proton, or an imported Linux driver |
| Frame generation (LSFG Native, Win-FG Native) | Yes | Yes since pre-release 3, armed from the drawer. Half-Life 2 at 30 fps shown at 60, 90 and 120 fps |
| Scaling modes and screen effects (SGSR, FSR, NIS, CAS, the HDR look, Looks, CRT and the rest) | Yes | Yes since pre-release 3, live from the drawer, a 13-pass Vulkan chain in the compositor |
| Zero-copy toggle and display backend row in the drawer | Native Rendering | Yes, and since pre-release 4 it switches live mid-game |
| Screen effects without giving up the hardware-composed path | No, X11 always composites itself | Yes since pre-release 5, the chain draws into the game's display layer |
| Match the panel rate to the game (and to frame generation) | Yes | Yes, fixed on Wayland in pre-release 5, including the game's own layer |
| Render scale (supersampling) | Yes | Not used |
| Keyboard layouts other than US | Yes | Yes since pre-release 2, xkb data bundled in the layer |
| Drag-and-drop, image clipboard | Partly | No, text only |
| Window icons and decorations | Yes | Missing, cosmetic |
| Game on its own hardware layer, no copy | Impossible, the X server sits in between | Working behind a flag, measured above |
| Real HDR output (HDR10) on an HDR screen | No, X11 has no HDR at all | Yes since pre-release 8, opt-in on HDR screens, frame generation included. Proven on an Adreno 840 phone and on HDR TVs; engine helpers for Unreal and RE Engine games since pre-release 9, see slide 6 |
| Play a game on a TV or monitor | Play on TV exists but is switched off in current builds | Yes since pre-release 9: launch the session on the external screen (in HDR when it supports it), companion screen on the handheld, pause and hand back on unplug |
| GPU name spoof for games | Yes | Yes since pre-release 9, through a generated DXVK config that every DXVK version reads |
Everything since 3.1.1
TV, speed and spoof (pre-release 9)
- A TV tab launches a game straight onto an external screen, HDR included, with a companion screen on the handheld. Touching the handheld no longer freezes it, and pulling the cable hands the game back.
- Compositor phase 1: +9% Vulkan, +12% D3D12, +20% DirectDraw on the copy path. A GPU name spoof gear that really reaches DXVK.
- HDR helpers for Unreal and RE Engine games. v16 layer: UBWC buffers, Windows' HDR monitor answer and Wine's own AMD AGS library.
Real HDR (pre-release 8)
- An HDR output (HDR10) setting and a live drawer switch: the game's 10-bit HDR frames reach the display as HDR10, on screens that report it.
- HDR stays on with screen effects, windowed games and frame generation (60 shown at 120, every frame HDR). The HUD shows the HDR state on its own line.
- v11 layer: games see the screen's real brightness instead of a made-up 1,499 nits. The Fusion HUD starts top-right, and the frame generation picker works on Wayland.
Setup that just works (pre-release 7)
- A new container keeps what you chose: Wayland, the Wayland game driver, drivers, DXVK and VKD3D versions, and deleted env vars stay deleted.
- The compositor driver fills itself in with a Turnip that can import the game's frames, so no black screen from a blank field.
- No Wine Mono download prompt on a new container or after a layer update. Control Panel opens again in the XP desktop (v8 layer).
OpenGL on Wayland (pre-releases 6 and 7)
- Native OpenGL games render for the first time: buffer sharing moved to protocol version 4 and the layer stopped steering OpenGL into a software renderer it does not contain.
- v9 layer: OpenGL also draws on phones that hide their display device from apps (retail Adreno 830/840 phones showed black with sound); proven on an Adreno 840 phone.
- OpenGL safe mode, on by default, stops OpenGL games vanishing a few seconds in (Mesa's threaded helper faults; Wine hides the crash).
- The HUD names what really renders: an OpenGL game reads OpenGL, not DXVK. Cards read Vulkan (Wayland) or Vulkan (X11).
Wayland backend
- Per container, with a per-game override: container default, force X11, force Wayland.
- Only offered on a Proton that ships winewayland and its Wayland Turnip. Anything else falls back to X11 with a notice.
- Settings tell the truth on Wayland: greyed controls show the reason, live ones apply.
Pointer lock
- Pointer constraints and relative motion implemented in the compositor.
- Touch drags, captured mouse and stick-as-mouse arrive as relative motion.
- Half-Life 2 at 144 fps with touch mouse-look, full turn-around included.
Keyboard, clipboard, IME
- Keyboard works on Wayland for the first time.
- Copy in a Windows program, paste on Android, and back.
- Soft keyboard opens when a Windows text field takes focus.
Screen and compositor
- Off, Fit, Stretch, Fill and Integer modes plus alignment, with matching touch mapping.
- No black frame on swapchain rebuild, exact FPS cap, resume after HOME, recovery on surface loss.
- HUD sampling moved off the compositor thread.
Eight bundled drivers
- Auto by GPU, plain, Vauzi a7xx, WinNative Balanced and Performance, gen8, SMXZ, WHITE, upstream.
- Imported Linux drivers accepted as a zip.
- Each pick verified to load its own driver.
Zero-copy and compressed buffers
- Zero-copy toggle in the drawer, or BANNER_WAYLAND_ZERO_COPY=1: the game's own frames go to the display hardware, no compositor copy. Measured on slide 3.
- Compressed (UBWC) game buffers accepted by default, BANNER_WAYLAND_UBWC=0 to force linear.
- First-launch size and desktop-close bugs fixed; odd shortcut names no longer crash.
Two display layers (pre-release 5)
- Screen effects draw straight into the game's display layer, so a Look or a scaling mode no longer costs the game its hardware-composed path.
- A window above a fullscreen game gets its own layer while the game keeps presenting copy-free underneath. Two layers is a deliberate cap. Since pre-release 7 that layer is only raised where the display can compose it: on a handheld that rotates and scales the game, the window is drawn the old way and hardware composition holds all session.
- Refresh-rate matching now reaches Wayland: a 60 cap runs the panel at 60, even with zero-copy on.
The live zero-copy switch (pre-release 4)
- Flip zero-copy on or off in the drawer while the game runs: the compositor tells the game's driver to rebuild its swapchain, and the game moves onto or off its own display layer.
- Proven on Half-Life 2: off, on, off, on with the frame rate flat and the picture never black.
- Needs the v6 layer, because the game driver lives inside it. Mixed old and new versions fall back safely.
The drawer on Wayland (pre-release 3)
- Every scaling mode and screen effect live, in X11's order, as a Vulkan chain in the compositor.
- LSFG Native and Win-FG Native frame generation, armed from the drawer. Effects or frame generation on means the copy path; zero-copy resumes when both are off.
- Task Manager shows the display backend and both drivers; HUD FPS fixed under zero-copy on GPUs whose frames bypass the compositor.
Real HDR on Wayland
On an HDR screen, highlights can go brighter than normal white and colours reach further. X11 has no way to do this at all. On Wayland the game's 10-bit HDR frames go straight to the display hardware, tagged so the phone shows them as HDR.
- God of War on an Adreno 840 Galaxy Z Fold 8 Ultra: 10-bit BT.2020 PQ frames on the game's own display layer, with no copy. Headroom rose from 1.0 to about 2.3 to 3.2 times normal white while the phone was cool.
- The drawer's HDR switch, screen effects and windowed programs keep HDR by composing one 10-bit picture; nothing came out washed out.
- Frame generation keeps HDR: 60 fps shown at 120, every frame through a 10-bit HDR10 swapchain, the engine working in 16-bit.
- A fullscreen HDR program goes straight to the display with no copy, and the light AIO HDR test card held a steady 3 to 3.6 times headroom.
- Layer v11 tells games the screen's real brightness: 1,345 nits on the Fold, 1,207 on a ROG Phone 9 Pro, 892 on an Adreno 735 phone, instead of DXVK's made-up 1,499.
- Tetris Effect: Connected sent HDR10 to a TV from the Pocket FIT in DirectX 12 and DirectX 11, and to the Fold in DirectX 11, through the Unreal Engine HDR setting.
- Resident Evil 3 with an AMD GPU spoof on the v16 layer asks "Enable HDR?", and Wine's AGS library reports an HDR10 display.
- The HDR boost depends on the phone. A ROG Phone 9 Pro got a correct HDR picture but no extra brightness; pre-release 8 now asks Android for it, which is not proven to help yet.
- scRGB, the other HDR format some games use, still shows in normal brightness: the compositor offers HDR10.
- HDR in games needs a helper per engine: Tetris needed HDR forced in its ini files, and Resident Evil 3's HDR has not been seen on an HDR screen yet.
- Two games and one HDR phone so far. The AIO HDR test card attached to the release makes a report quick to send.
HDR on a TV from the handheld. The Pocket FIT's own panel has no HDR, but plugged into an HDR TV over USB-C to HDMI it reports HDR10 and HLG. Pre-release 9's TV tab launches the game on that screen, and Tetris Effect ran there in HDR10.
Tips. Don't screen-record or take screenshots while judging HDR: Android turns the HDR boost off while it captures. A hot phone loses it too; the session log now says which. The drawer's "HDR" screen effect is a different thing: a bloom filter on a normal picture, not HDR output.
Eight Turnips, six sources
| Picker choice | Built from | Mesa | Adreno target |
|---|---|---|---|
| Bundled | Banners-Turnip, wayland branch, upstream Mesa with no device patches | 7cda7850 | 6xx, 730, 740, 750 |
| Bundled a7xx | Vauzi-17 "710" v3.6 recipe | 7631b525 | 710, 720, 722 |
| Bundled a8xx | WinNative WN-Turnip 1.15, Balanced, Auto's pick on an 8xx | 12b7b819 | 830, 840, plus 810, 825, 829 |
| Bundled a8xx Performance | WinNative WN-Turnip 1.15, Performance, GPU held at PWR_MAX | 12b7b819 | same |
| Bundled a8xx gen8 | Banners-Turnip's own Android a8xx recipe | 12b7b819 | same |
| Bundled a8xx SMXZ | StevenMXZ Turnip Gen8 V36 recipe | c501e1d1 | same |
| Bundled a8xx WHITE | whitebelyash Mainline Turnip v31 recipe | 9c475fc3 | same |
| Bundled a8xx upstream | pure Mesa main, no patches, 2026-09-13 | bbc7792f | same |
All eight are rebuilt from those sources as Wayland, Linux drivers with the KGSL backend and Wayland WSI. The Android zips those projects publish cannot run inside Proton. Vauzi recommends TU_DEBUG=sysmem on 710, 720 and 722 if you see artifacts. All eight load and render on the 750; the a8xx builds now run on real Adreno 830 and 840 phones; the 7xx builds have not met their own silicon yet.
How a tester gets going
- 01Install the APK for your flavour over 3.1.1. Data is kept, and versionCode stays 85 so you can go back or move on to the next stable.
- 02Contents, Proton, Install from file: the wcp installs as Proton-11.0-2.1-arm64ec-16, its own layer line, never offered as an update to a normal 11.0-2 container. A container on an older -N shows an Update layer button.
- 03Have any recent Android Turnip installed from the in-app catalog. It serves the compositor, and a Wayland container picks it for you. Never pick System.
- 04Container: that Proton, Display backend Wayland, Compositor driver your Turnip (filled in for you), Wayland game driver Auto, an installed FEXCore. DXVK, VKD3D, components and audio as on X11.
- 05HDR screens: turn on HDR output (HDR10). Unreal Engine games: set Unreal Engine HDR. RE Engine games: set GPU Name (spoof) to an AMD card in the gear next to Wayland game driver.
- 06TV: plug it in, then the game's TV tab, Launch this game on the TV.
- 07Adreno 830/840 owners: try the a8xx choices one by one under Wayland game driver and report which runs best.
Open the pre-release on GitHub
Logs: Download/Wayland-logs for the compositor session, Download/bannerlator/<game>/wine_debug.log for Wine, DXVK and VKD3D.
Root causes
- API switchSwitching graphics APIs killed the session because the bundled Termux Turnip could not survive a device destroy and re-create. Fixed by building our own Wayland Turnip. The same driver swap fixed DiRT Rally 2.0 stalling on its splash.
- Layer nameA Proton named 11.0-2-wayland would have silently fallen back to Proton 9 in every shipped build: the layer-name parser only accepts version, subversion and architecture. The Wayland layer became line 11.0-2.1, which parses everywhere and is never offered as an update to stock 11.0-2.
- Keyboard 1winewayland gave up its keyboard entirely when the xkb registry data was unreadable, and the bundled registry library pointed at Termux's private folder. The registry is now optional.
- Keyboard 2The compositor gave keyboard focus to Wine's desktop surface, so every key was queued to explorer's thread instead of the game. Keys now go to the window you clicked.
- Buffer churnDestroying a committed buffer, which every swapchain rebuild does, produced a black frame and a window close and reopen. The compositor now keeps the last image until the next commit.
- Lock contentionSwapchain calls were held under the same lock the UI thread needs. Backgrounding mid-game risked a freeze; the UI thread now hands the surface over without waiting.
- Shortcut namesAn executable without a folder or without .exe crashed the launch in two places. Fixed.
- First launchThe first launch after installing a layer opened at 1024x768: Wine's prefix update ran inside the session's first process, its helper desktop was killed at once, and the display cache fell back to a default rectangle. The update now runs before the session.
- OpenGL blackNative OpenGL games were a black window with sound: the compositor advertised an older buffer-sharing protocol than Mesa's EGL needs to find the GPU, and the layer then steered OpenGL into a software renderer it does not contain. Fixed in pre-release 6.
- OpenGL vanishOpenGL games disappeared seconds in with no error: Mesa's threaded helper faults on a thread Wine does not manage, so no handler reports it. Safe mode turns the helper off; the crash itself still needs a driver rebuild.
- Create screenA new container dropped the display backend and the Wayland game driver: three hand-kept lists of what a save writes had drifted apart. Create, edit and the defaults now share one writer.
- Control PanelThe v7 XP Start menu opened the Control Panel folder through a new explorer, which mangled the folder's special name and quit. The entry now starts control.exe.
- Desktop closeWine's desktop closed a second into a 32-bit game's startup: this Proton tree closes a desktop with zero grace instead of upstream's one second, and the thread count matched by coincidence. The grace is restored in the layer and every session process now starts on the game desktop.
What is left
- Turn zero-copy on by default once more GPUs have run it, and measure it where it can show: a GPU-bound game and a large panel. Both performance paths are in and proven.
- Real 710, 720, 722 and 8xx testing of the eight bundled drivers. The most valuable thing a tester can send.
- Guest-side leak on every API switch, a few dozen file descriptors and threads. X11 leaks more, so not Wayland-specific.
- Screen effects on GPUs whose buffers the compositor cannot import, now within reach thanks to the display-layer machinery.
- Fix the OpenGL threaded-driver crash itself so safe mode can default to off. Needs a driver rebuild that can report a fault on a thread Wine does not manage.
- HDR in more games and on more phones (slide 6). See RE Engine HDR on an HDR screen, have Unreal Engine HDR write the game's ini lines itself, add per-engine presets and scRGB, and prove the HDR boost request on phones like the ROG Phone 9 Pro.
- Finish the TV tab. Prove Home and reopen during a TV game, match resolution and the output-mode picker, and hand input back to the TV by itself.
- Mali and other non-Adreno GPUs. Wayland needs a game driver built for it, and today that means Turnip, so Mali phones stay on X11. The likeliest route is the Vulkan wrapper Mali users already run on X11, rebuilt for Wayland.
What Wayland can do that X11 can't
Or can't do well. A few of these have a weaker X11 version; none of them work as well there.
Working on Wayland today
Real HDR
On an HDR screen: brighter highlights, deeper darks and richer colour. X11 has no way to do HDR at all. Proven on an Adreno 840 phone with God of War.
Since pre-release 8 · slide 6
Less copying of every frame
The game's picture goes straight to the phone's display hardware instead of being redrawn by the compositor first. Less GPU work and a little less battery drain. This is the zero-copy switch measured on slide 3.
Exact "your frame is on screen" reports
Wayland tells the game precisely when each frame reached the screen. This fixed an early frame-rate cap, and it is the base for smoother frame pacing later.
Fewer middlemen
No X server sits between the game and the screen, so every frame and every tap takes fewer steps.
Possible with Wayland, not built yet
Even frame pacing
Frames spaced out evenly for smoother-looking motion, using those "it's on the screen" reports.
Tearing control
A game can ask for the lowest possible input lag and accept a little screen tearing in return.
Real multi-touch
Your fingers reach the game as real touches, not as a pretend mouse.
Separate scaling per window
The game can run at one resolution while its menus or other windows use another.
Explicit sync
A cleaner hand-off between the game and the display, so fewer hitches. Needs graphics-driver support first.
Overlays as their own layers
The HUD or a picture-in-picture window shown on top by the phone itself, instead of being painted into the game.
In general
Windows stay private
Under X11 any program can peek at other windows and keystrokes. Under Wayland it can't. It matters less inside Bannerlator, but it is a real difference.
Where Wine's new work is going
Wine's developers are building new display features on Wayland. The X11 driver mostly gets maintenance now.
Is Wayland redundant next to the X11 and EGL work? For raw frame rate, X11 is fine and stays fine. Wayland earns its place on the things above, which an X server in the middle structurally prevents. The two are not competing for the same job: X11 is the mature path, Wayland is the one that can still grow.
What to tell people
- Run DXVK, VKD3D and Zink games on Wayland with the same drivers and settings you use on X11.
- Switch graphics APIs freely, mouse-look, type, copy and paste, use fullscreen modes and the FPS cap, every scaling mode and screen effect, LSFG Native and Win-FG Native frame generation, background and resume.
- Pick a bundled driver per game, or import a Wayland-built driver.
- Show real HDR on an HDR10 screen, frame generation included (pre-release 8). Proven on an Adreno 840 phone and on HDR TVs.
- Launch a game on a TV or monitor from the handheld (pre-release 9), and spoof the GPU name games see.
- Beat X11 on frame rate yet. Zero-copy saves GPU work, not frames, on a CPU-bound game; expect a few percent either way in real games and about 20 percent lower on synthetic Vulkan and D3D12 numbers with the default path.
- Promise much beyond the Adreno 750 it was built on. One Adreno 840 phone has also run OpenGL and HDR. Mali and other non-Adreno GPUs have no Wayland game driver yet.
- Drag-and-drop, the image clipboard and window decorations.
The honest pitch is latency, battery, headroom and HDR, not a headline frame rate. HDR is the one X11 cannot do at all. The zero-copy path is in; on a GPU-bound game or a large panel that is where the gap should close, with lower input latency and a modest battery gain from one less copy and one less process.
Pre-release 9, not offered by the in-app updater. 3.1.1 stays the stable release.