The old OpenGL library (libGL.so.1.5.0, "XMesa") had to do this because the app's X server didn't understand GLX, the language OpenGL normally uses to talk to an X server. Three orange steps, every frame.
Older games that use OpenGL, and old DirectDraw games, used to run slowly in Bannerlator's normal display mode (X11). Now they run several times faster, on every Wine version. It's on automatically. You don't have to do anything. And as a bonus, a fix in the Turnip driver makes DirectX 12 games faster too.
No.
The new setting is called Fast OpenGL and it's on by default. The app picks the right method for your Wine version by itself.
The only thing it needs is a Turnip graphics driver, which most people already use. With the Qualcomm or System driver it stays off.
If one game ever acts strange, you can switch Fast OpenGL off for just that game: game settings → OpenGL card → Fast → Off.
Games that use Vulkan or DirectX 8–12 don't change. They were already fast (more on that below).
Think of each frame of a game as a painting. The graphics chip is the painter, and your screen is the wall it hangs on.
Before: after every painting, the painter had to stop. Someone took a photo of the painting, carried the photo over, and hung the photo on the wall. That happened hundreds of times every second, so the painter spent most of its time waiting.
Now: the painting goes straight onto the wall. No stopping, no photo.
Vulkan and DirectX games always went straight to the screen. Now OpenGL games do too.
These are frames per second (fps). Higher is better. Orange is before, blue and green are after. Tap a bar to see the exact number.
Real screenshots from the tests. Left is before, right is after. Look at the big number: that's frames per second. Tap the arrows or swipe to see the next one.
| Wine version | Faster? | Tested |
|---|---|---|
| Wine 11 / Proton 11 (arm64ec) GE-Proton 11.0-7, Proton 11.0-2 and others | ✓ Yes | Yes, on the phone |
| Proton 11 x86_64 | ✓ Yes | Yes, on the phone |
| Proton 10 / Wine 10 GE-Proton 10.0-34 and others | ✓ Yes | Yes, on the phone |
| Wine 9.5 x86-64 | ✓ Yes | Yes, on the phone |
| Wayland mode (any version) | ✓ Always was fast | Yes |
No.
Vulkan and DirectX games run exactly the same. We tested every Wine version with Fast OpenGL off and then on:
| Wine version | Vulkan | DirectX 11 | DirectX 12 |
|---|---|---|---|
| Wine 11 | 1686 → 1696 | 2172 → 2156 | 2385 → 2356 |
| GE-Proton 10 | 2116 → 2130 | 2365 → 2354 | 2406 → 2457 |
| Proton 11 x86_64 | 1442 → 1438 | 2036 → 2038 | 2244 → 2238 |
| Wine 9.5 | 1994 → 2009 | 2187 → 2181 | 2269 → 2267 |
The numbers move up and down by 1 or 2 percent, which is normal from one run to the next.
Will my game run in fast-forward? No. More fps means smoother motion, not a sped-up game. A few very old games tie their speed to the frame rate; use the FPS limiter for those.
Wayland mode never had the slow photo-copy step, so OpenGL was always fast there. We still fixed three things that held it back:
No.
Freedreno is a separate OpenGL driver that some other apps (Ludashi, for example) use to make OpenGL fast. We didn't add it.
Everything here runs on Turnip, the same driver your Vulkan and DirectX games already use. A translator called Zink turns OpenGL into Vulkan. So you keep one driver for everything, and nothing extra to install.
We haven't tested freedreno side by side, so we're not saying we beat it. Only that we didn't need it.
While testing, we found a bug in the Turnip graphics driver itself that held back DirectX 12 games. We fixed it.
The bug in plain words: many times every frame, a DirectX 12 game asks the driver a quick question: "is the graphics chip done yet?" The answer should come back instantly. Instead, Turnip passed the question to Android's Adreno driver in a way that it read as "wait until it's done". So the processor sat and waited for the graphics chip, every frame, instead of getting the next frame ready. The two took turns instead of working at the same time.
The fix: for those quick questions, Turnip now just reads the chip's "finished" counter and answers right away. Nothing else changes.
| Test | X11 | Wayland |
|---|---|---|
| DirectX 12 demo | 378 → 1422 (×3.8) | 588 → 3449 (×5.9) |
| DirectX 12 Hello Triangle | 264 → 451 (×1.7) | 566 → 880 (×1.6) |
Anyone using Banners-Turnip v26.3.0-20260929-r4 or newer, on X11 and Wayland. On Wayland, Bannerlator 3.1.4's built-in adapter also applies the fix to any Turnip you pick.
DirectX 12 games, most of all ones that run at high frame rates or lean on the processor. Heavy games that already max out the graphics chip gain less: one player's game went from 94% to 99% GPU use, 47 to 50 fps.
DirectX 8–11 (DXVK) and Vulkan games don't ask that question every frame, so they run the same. We checked: no slowdown anywhere else.
For the technical reader: in Turnip's KGSL backend, a timeline poll with a zero timeout was sent as IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID with timeout 0, which the kernel treats as "wait forever". The patch answers polls with IOCTL_KGSL_CMDSTREAM_READTIMESTAMP_CTXTID instead. Full write-up: KGSL_ZERO_TIMEOUT_POLL.md.
Bannerlator's normal display mode, X11, has a small built-in "X server" that puts windows on screen. Here are the four ways a frame can reach your screen:
The old OpenGL library (libGL.so.1.5.0, "XMesa") had to do this because the app's X server didn't understand GLX, the language OpenGL normally uses to talk to an X server. Three orange steps, every frame.
Wine 11 has a hidden switch (WINE_USE_EGL=1) to use EGL, a newer way to hook OpenGL to a window. EGL doesn't need anything from the X server, so the app's X server stays exactly as it was. Only Wine 11 has this switch, so Wine 9 and 10 couldn't use this road.
libGL.so.1 in "DRI" mode, ships in the appInstead of teaching old Wine a new language, we taught the X server the old one. Wine keeps talking GLX, but now a modern OpenGL library answers, and the X server understands it. The copy-back steps are gone.
Wayland never had the copy road, because Wayland has no GLX at all. That's why OpenGL was always much faster on Wayland. The X11 fix gave X11 the same road Wayland already had.
The new method for older Wine versions needed two pieces, and neither works alone:
| Piece | Old | New | Where it lives |
|---|---|---|---|
| OpenGL library (GLX) | libGL.so.1.5.0, XMesa. Copies every frame. | libGL.so.1, Mesa GLX in DRI mode, hands off to Zink | Built in Banners-Turnip, ships inside the app |
| EGL library | Wayland-only build, can't open X11 windows | Mesa EGL built for X11 and Wayland | Same build, ships inside the app |
| App's X server | No GLX. DRI3 1.0, Present 1.0. | Answers GLX (incl. modern contexts), DRI3 1.2, Present 1.2 | Bannerlator app. Switched on only for GLX-road sessions. |
| Fast OpenGL switch | Greyed out unless Wine 11 | Works on any layer. Picks EGL or GLX by itself. | Container and game settings, OpenGL card |
| Proton / Wine layers | No change. Nobody needs to rebuild or redownload a layer. | — | |
One set of libraries serves both methods. On Wine 11: EGL 1596 fps, GLX 1649 fps, DirectDraw through EGL 1623 fps.