Modern Windows audio software on Linux.
A Wine fork for the plugin and application GUIs that stock Wine cannot draw.
Full patch documentation · Quick start · Which branch? · Tested applications
Cubase Pro 15.0.30 under Wine — the Cubase 14 demo project in playback: arrangement, MixConsole in the lower zone with live meters, MediaBay on the right, on this fork.
Windows audio software stopped drawing itself with GDI years ago. Plugin frameworks — JUCE 8, VSTGUI, SynthEdit/GMPI — and the DAWs that host them now put their user interface on DirectComposition visual trees rendered with Direct2D, text through DirectWrite, presented through DXGI swapchains.
Stock Wine implements very little of that. The result is not a subtle rendering difference: plugin windows come up black, artwork and icons are missing, GUIs flicker, and some applications refuse to start at all because the graphics engine they build on never comes up.
This fork implements the missing pieces. It adds over 30 000 lines to stock Wine, reaching into more than 40 DLLs and programs, and it is used daily for music production rather than kept as a proof of concept.
d2d1 · dcomp · dwrite · dxgi · d3d11 · wined3d · winex11.drv · win32u · uianimation
dwmapi · ntdll · ole32 · msi · crypt32 · comdlg32 · shell32 · advapi32 · wintrust
pwrshsip (new) · powershell.exe · winemenubuilder.exe · and more than twenty others
git clone https://github.com/giang17/wine.git
cd wine
git checkout d2d1-dcomp-11.0 # or the highest-numbered d2d1-dcomp-11.* for rolling release
./configure --prefix=/opt/wine-d2d1 --enable-archs=i386,x86_64
make -j$(nproc)
sudo make installUse a separate --prefix so your distribution's Wine stays untouched. Build both
architectures: 32-bit hosts and plugins load d2d1, dcomp and dxgi directly, and a
stale 32-bit half keeps running old code without anything visibly failing. This needs the
i686-w64-mingw32 cross compiler next to the x86_64 one.
Two things are worth knowing before the first run, both explained in PATCHES.md:
wine.infis part of the install. It carries this fork's registry defaults, including theHideWineVersionentries that keep JUCE 8.0.13+ plugins on the Direct2D path instead of its Wine-detecting GDI fallback. Copying DLLs by hand without it fails silently — the plugins simply keep rendering with GDI.- Do not install DXVK. It replaces
dxgi.dllandd3d11.dlland therefore bypasses the composition-swapchain path this fork is built on. It is not needed here, and it brings no measured benefit for this class of application.
Details, tuning and font setup: PATCHES.md.
| Branch | Base | For whom |
|---|---|---|
d2d1-dcomp-11.0 |
wine-11.0 stable |
Most users. The full stack on the stable release, actively maintained. This is the default branch. |
d2d1-dcomp-11.<N> |
newest WineHQ devel tag | Rolling-release users (wine-tkg-dev and similar). The same stack rebased onto the newest devel tag roughly every two weeks. Always take the highest-numbered d2d1-dcomp-11.* branch; lower numbers are superseded snapshots. Plugin-tested before each push. |
d2d1-v6 |
wine-11.0 |
Deprecated since 2026-05-03. The original upstream-targeted D2D1-only series, kept for reference. |
Everything below is exercised on this fork, not inferred from code. The long form — what exactly each one needs, and what breaks without it — is in PATCHES.md.
| Application | Framework | Status |
|---|---|---|
| Steinberg Cubase Pro 15.0.30 | Custom (DComp + D2D1 + DirectWrite), WebView2 Hub | Installs through Steinberg's own bootstrapper and runs: project window, MixConsole with live meters, Hub. Installing needs the msi feature-cost fix (the setup crashed before its first dialog) and the Script SIP for signed PowerShell — without pwrshsip/wintrust the installer stops at "preinstall.ps1 … not trusted". Starting needs the Windows.Globalization.Calendar stub, without which headtracking.dll aborts behind the licence splash, and the comdlg32 folder-dialog fix, without which the Hub reports the project folder as read-only. The window itself needs the dcomp virtual-surface resize and child-surface readback work — and the d2d1 WIC target fix, without which the MixConsole level meters stay empty |
| Serum 2 (VST3 in Reaper) | VSTGUI + DComp | Fully functional — all waveform views, envelopes, presets, per-pixel-alpha drag bitmaps |
| Korg Trinity / Prophecy (VST3) | JUCE 8.0.13 / 8.0.12 + DComp | Fully functional on the DComp path |
| Pianoteq 9 (standalone + VST3) | JUCE 8.0.10 + DComp | Fully functional |
| Ableton Live 12 (Intro / Lite) | Custom (D3D11 + WebView2) | Fully functional — decorations, move/resize, fullscreen, Splice view |
| FL Studio 2026 | Custom | Runs without xruns at 64 samples / 48 kHz; Cloud plugins install and stream |
| Fender Studio Pro 8 | CCL (DXGI + DWrite + DComp) | Fully functional — needs the UIAnimationManager2 implementation to start at all |
| EPROM — Memory Rites, Minimal Audio Current / Evoke / Lucid (VST3) | JUCE 8.0.13 (+ WebView2) | Fully functional with the HideWineVersion entry |
| Native Access 3.25.2, Kontakt 8 Player | Electron/Chromium, InstallAware/MSI | Install, sign in and run — need the powershell and msi patches from this fork |
| VProm3 (VST3) | SynthEdit/GMPI + D2D1 | Fully functional, correct colours (needs the Color Management effect) |
| SynthEdit 1.5 | Custom engine (D2D1 + winex11 client surfaces) | Fully functional — the MDI canvas draws completely and stays stable through menus, resizes and moves |
| UVI Portal, Minimal Hub | WebView2, Tauri v2 | Install, sign in and update products; Minimal Hub needs the schannel DecryptMessage fix for incomplete messages, which this branch carries — without it its oauth/token request stops after a partial response and the app waits forever |
One line per area; PATCHES.md has the reasoning, the measurements and the switches for each.
- D2D1 — geometry pipeline (arcs, constrained Delaunay triangulation, miter limits, shader antialiasing, correct stroke joins, cubic Bézier subdivision), PushLayer stencil clipping, layers on opaque targets, Color Management effect and sRGB formats for SynthEdit/GMPI, Gaussian blur, bitmap-brush WRAP/MIRROR, line batching (Serum 2's wavetable view: 1 060 ms → about 80 ms)
- DComp —
IDCompositionDesktopDevicewith a D2D1 bitmap rendering path, dirty-rect clipping,IDCompositionDevice3/4/5, composition and dynamic textures, D3D11 BeginDraw, rootless visual trees composited at ~60 Hz, cross-process targets, backdrop capture, and leaf visuals composited into the frame instead of blitted after it (Studio Pro's playhead: missing in 14.9 % of frames before, 0.0 % after) - DirectWrite —
NATURAL_SYMMETRICrendering mode,IDWriteFontSet::GetMatchingFonts, font fallback for Miscellaneous Symbols and Geometric Shapes, a glyph cache that outlives the fontface (a 25 s resize re-rasterised 196 distinct glyphs 111 598 times before), and ClearType-style subpixel text - DXGI / D3D11 / WineD3D — composition swapchains, FLIP_SEQUENTIAL preservation, DComp
popup handling, monitored fences,
ID3D11Fencewith CPU timeline semantics, GL buffer recycling (70 % RSS reduction), GL present for top-level windows - winex11 / dwmapi / win32u — DComp window support, per-pixel alpha for GPU-painted layered windows, correct handling of ownerless tool-window popups (sticky, wrongly decorated plugin menus on KDE), no black expose flash while a client window renders offscreen
- Everything an installer needs —
msistring pool and feature cost, Script SIP for signed PowerShell (pwrshsip,wintrust,msisip), a usablepowershell.exe,IShellLink::GetPathshort paths,MiniDumpWriteDumpmodule lists. Unglamorous, but it is the difference between an application that installs and one that does not
Independent reports in this repository's issue tracker cover three GPU vendors — NVIDIA, AMD (RADV) and Intel integrated graphics — Arch/CachyOS installations, Hyprland on Wayland next to X11 sessions, and Bitwig hosting plugins through yabridge as well as standalone applications.
One of them (#5) is worth reading as a
comparison: for that application stock Wine 11.12 produced a 1×1 black window, three DXVK
versions each aborted during graphics initialisation, and this fork's builtin
dxgi/d3d11 brought up a working, responsive GUI. Another
(#3) runs JUCE 8 plugins on an Intel iGPU with
no discrete GPU at all.
The fork is also the base of shibco/ableton-linux, which builds Ableton Live 12 production setups on top of it.
This is a fork of wine-mirror/wine, not a replacement for it. Small, self-contained fixes go to WineHQ as ordinary merge requests on gitlab.winehq.org and several have been merged there. The large DirectComposition and Direct2D work stays here, where it can be rebased onto every devel tag and tested against real plugins every two weeks.
The upstream Wine README — build requirements, configuration, documentation, where to get support for Wine itself — is kept unchanged as README.wine.
Open an issue. For a rendering problem the two
most useful things are the application and plugin framework involved, and whether the
HideWineVersion entry applies to your host — with JUCE 8.0.13 and newer that one
switch decides whether the plugin renders with Direct2D or falls back to GDI, and the GDI
fallback is what a "the GUI is black" report usually turns out to be.
- Subpixel text rendering: Cade (@shibco),
shibco/ableton-linuxpull request 155, reviewed there by @ClickSentinel --enable-archspackaging form for Bottles: @jibeape- Related discussion: yabridge#413
Same as Wine — GNU LGPL. See LICENSE.



