v0.3.0 - DaVinci Resolve 21.1 support
Resolve 21.1 will not load any external Fairlight plugin library, and says nothing about it. The effect list shows Resolve's own effects and none of yours. Nothing is wrong with your install: the configuration is read, the file is found, and the library is never opened.
What 21.1 changed
FLPluginHost::Initialize() is the function that reads BMDPlugins.Path. In 21.0 it does so immediately. In 21.1 it first asks Resolve's core interface a yes/no question keyed on the string "Debug", and returns without doing anything when the answer is no:
call QString::fromAscii_helper("Debug", 5)
call *0x1d0(%rbx) ; a virtual on the core interface -> bool
test %bpl,%bpl
je +0xd4 ; false: never read the setting, never load anything
That is a module gate, not a preference — the same virtual is called from 78 places in libFairlightPage.so, and the four that pass a literal pass "Studio", "ProxyGenerator", "RemoteControl" and "Debug". Writing a Debug row into configs/Fairlight/FLDebugSettings.csv was tried first and changes nothing. There is no setting to turn on.
No offset moved. All 32 vtable slots, the vtable size, the member offsets and the map node size are identical between 21.0.0.0048 and 21.1.0.0014.
The fix
~/.local/share/BMDAudioPlugins/resolve-with-fxbridgeThe launcher preloads libfxbridge-gate.so, which replaces that one conditional jump with NOPs in memory, after Resolve has loaded the library and before it runs the function. Nothing on disk is modified, no root is needed, Blackmagic's files stay as they shipped, and not using the launcher undoes it. On 21.0 and earlier the gate is not there, and it logs one line saying so.
It anchors on the symbol _ZN12FLPluginHost10InitializeEv and requires the query and the gate to appear exactly once inside it — the gate's raw bytes occur twice in the library, so a plain signature search would be a coin toss. On any other shape it refuses and logs why.
Measured
| 21.0.0.0048 | 21.1.0.0014 | |
|---|---|---|
| without the preload | 48 plugins listed | nothing loaded |
| with the preload | 48 plugins listed, "no gate" logged | 48 plugins listed |
tools/check-offsets.py now reports the gate as present or absent, so you can tell which Resolve you have without starting it.
Install
install -Dm755 libfxbridge.so ~/.local/share/BMDAudioPlugins/libfxbridge.so
install -Dm755 fxbridge-scan ~/.local/share/BMDAudioPlugins/fxbridge-scan
install -Dm755 libfxbridge-gate.so ~/.local/share/BMDAudioPlugins/libfxbridge-gate.so
install -Dm755 resolve-with-fxbridge ~/.local/share/BMDAudioPlugins/resolve-with-fxbridgeOn 21.0 nothing changes: start Resolve as you always did. On 21.1, start it through resolve-with-fxbridge.
The bridge itself is unchanged from v0.2.12 — libfxbridge.so and fxbridge-scan are byte-identical to that release. Built in an Ubuntu 20.04 rootfs; floor GLIBC_2.16, CXXABI_1.3.9. Verify with sha256sum -c SHA256SUMS.
Not claimed
This clears one check that Blackmagic added. Whether they intended external Fairlight plugins to stay available on Linux is not something this repository knows.