v4.1 rewrite: pin ROCm 7.1.1, fix hybrid-GPU DRI_PRIME flip, glib-family swap
Total rewrite of the installer mirroring the proven NVIDIA-Open install path,
with two new root-cause fixes for AMD on hybrid systems.
Installer (v3.0 -> v4.1):
- Pin ROCm 7.1.1 from Arch Linux Archive as the OpenCL provider; current
7.2.x is broken with DaVinci Resolve (clCreateContext fails / Color page
hangs on every AMD card). Adds IgnorePkg to /etc/pacman.conf and aborts
if pacman -U partial-downgrades.
- DRI_PRIME explicit PCI-tag pin in launcher (DRI_PRIME=pci-0000_BB_DD_F)
instead of DRI_PRIME=1, which on Intel+AMD hybrids flips OpenGL to the
iGPU and breaks CL/GL interop. switcherooctl branch removed (same bug).
- MESA_VK_DEVICE_SELECT pin added as defense-in-depth for Vulkan.
- Full glib-family symlink swap: all five of libglib-2.0, libgio-2.0,
libgmodule-2.0, libgobject-2.0, libgthread-2.0 (was three; mismatch
caused latent segfaults on signal emit / type registration).
- Manual install to /opt/resolve via ZIP -> .run -> appimage-extract ->
rsync, with patchelf --set-rpath on every ELF (replaces AUR PKGBUILD
approach).
- Auto-wipe stale ~/.local/share/DaVinciResolve/{configs,logs} on fresh
installs and whenever known crash markers appear in ResolveDebug.txt.
- Generation-aware gfx target detection (gfx1030/1100/1101/1102/1200/1201)
with auto HSA_OVERRIDE_GFX_VERSION for non-natively-supported cards.
- Hyprland windowrule v3 syntax; dropped stay_focused (trapped-cursor in
modals); removed duplicate user-level .desktop entry; removed unused
Studio USB-dongle udev rule.
Docs:
- Rewrite README to match v4.1 reality (manual /opt/resolve install,
ROCm pinning rationale, hybrid-GPU PCI-tag note, refreshed GPU support
tiers, corrected uninstall steps).
- Add NOTES.md with full root-cause analysis, currently-pinned package
versions, recovery playbook, and quick sanity checks.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
51c72a4329
commit
05aaf04c27
3 changed files with 1577 additions and 863 deletions
312
NOTES.md
Normal file
312
NOTES.md
Normal file
|
|
@ -0,0 +1,312 @@
|
|||
# DaVinci Resolve on Omarchy + RX 9060 XT — Working Configuration
|
||||
|
||||
**Date solved:** 2026-05-02 (initial); 2026-05-03 (DRI_PRIME hybrid-GPU fix)
|
||||
**System:** Omarchy (Arch Linux), Hyprland 0.54.3, kernel 7.0.3, RX 9060 XT (Navi 44, gfx1200) + Intel UHD 770 hybrid
|
||||
|
||||
## TL;DR — what is currently working
|
||||
|
||||
DaVinci Resolve 21.0 beta launches and stays open with full UI on Color page. The working stack is:
|
||||
|
||||
- ROCm **7.1.1** (NOT current 7.2.x) pinned from Arch Linux Archive
|
||||
- Resolve installed manually to `/opt/resolve` (no AUR PKGBUILD)
|
||||
- `HSA_OVERRIDE_GFX_VERSION=12.0.0` and `ROCR_VISIBLE_DEVICES=0` in the launcher
|
||||
- `DRI_PRIME=pci-0000_BB_DD_F` in the launcher — **explicit PCI tag, NOT `=1`** (see "Root cause" below)
|
||||
- `MESA_VK_DEVICE_SELECT=pci-0000_BB_DD_F` + `MESA_VK_DEVICE_SELECT_FORCE_DEFAULT_DEVICE=1` (Vulkan pin, defense-in-depth)
|
||||
- Hyprland windowrule v3 syntax (not deprecated `windowrulev2`)
|
||||
- snd-aloop kernel module + PipeWire bridge for audio
|
||||
- DeckLink → ALSA backend in Resolve config
|
||||
|
||||
## Root cause
|
||||
|
||||
There are TWO independent root causes that both have to be fixed for first launch to succeed:
|
||||
|
||||
### 1. ROCm 7.2.x breaks Resolve on every AMD GPU
|
||||
|
||||
OpenCL `clCreateContext` either fails outright or hangs on Color page. ROCm 7.1.1 is the last working release.
|
||||
|
||||
- Upstream issue: https://github.com/ROCm/ROCm/issues/5982 (filed Feb 2026, still open)
|
||||
- CachyOS thread with the recipe: https://discuss.cachyos.org/t/davinci-resolve-amd-rocm-fails-without-downgrade/28036
|
||||
- NixOS RDNA4-specific report: https://github.com/NixOS/nixpkgs/issues/481483
|
||||
|
||||
### 2. `DRI_PRIME=1` flips OpenGL to the iGPU on hybrid systems where Mesa already defaults to AMD
|
||||
|
||||
On Intel iGPU + AMD dGPU systems where the monitor is plugged into the AMD card, Mesa's default OpenGL device is already the AMD card. `DRI_PRIME=1` means "give me the OTHER card relative to the default" — so it flips OpenGL to Intel. Resolve then has OpenGL on Intel and OpenCL on AMD, and CL/GL interop (`clCreateContext` with `CL_GL_CONTEXT_KHR`) fails. The log shows `OpenCL Context Manager failed to create context` and Resolve hangs on Color page.
|
||||
|
||||
**Verify on any new box:**
|
||||
```bash
|
||||
glxinfo -B 2>/dev/null | grep -E 'OpenGL renderer|OpenGL vendor' # bare default
|
||||
DRI_PRIME=1 glxinfo -B 2>/dev/null | grep -E 'OpenGL renderer|OpenGL vendor' # what =1 picks
|
||||
DRI_PRIME=pci-0000_BB_DD_F glxinfo -B 2>/dev/null | grep -E 'OpenGL renderer|OpenGL vendor' # explicit
|
||||
```
|
||||
If bare returns AMD and `=1` returns Intel, you have this bug. The explicit PCI tag is always correct.
|
||||
|
||||
The installer detects the AMD discrete card's PCI ID from `lspci` and bakes the tag into the launcher unconditionally whenever an AMD dGPU is present (no longer gated on hybrid status or switcheroo). switcherooctl is **not** used — it internally sets `DRI_PRIME=1` and inherits the same flip bug.
|
||||
|
||||
## The install script
|
||||
|
||||
`/home/q/Downloads/install-davinci-resolve.sh` — version 4.1 with 2026-05-03 patches:
|
||||
|
||||
- **DRI_PRIME explicit PCI-tag pin** (replaces buggy `=1`) + **MESA_VK_DEVICE_SELECT** Vulkan pin — locks OpenGL/Vulkan to the AMD discrete GPU by bus address, unconditional whenever an AMD dGPU is present (no longer gated on hybrid status, switcheroo branch removed)
|
||||
- **Full glib-family symlink swap** — all five of `libglib-2.0`, `libgio-2.0`, `libgmodule-2.0`, `libgobject-2.0`, `libgthread-2.0` (was three; mismatch caused latent segfaults)
|
||||
- **Broader crash-marker grep** in `reset_stale_configs()` — recognises `Unsupported GPU Processing Mode`, `OpenCL Context Manager failed to create context`, `Failed to create OpenCL context`
|
||||
- **Fresh-install auto-wipe** of `~/.local/share/DaVinciResolve/{configs,logs}` whenever Resolve is being installed for the first time
|
||||
- **ROCm-downgrade error check** — `pacman -U` now aborts the install if the 7.1.1 packages fail to apply, instead of silently continuing on a broken stack
|
||||
- **Removed USB-dongle udev rule** and the prompt for it (Studio license dongle not in scope)
|
||||
- **Removed duplicate user-level `.desktop` entry** — system-level entry is patched to use the wrapper, user entry caused walker to show two "DaVinci Resolve" entries
|
||||
- **Dropped `stay_focused on` from the Resolve Hyprland rules** — it locked focus inside modal dialogs, felt like a trapped cursor
|
||||
|
||||
Runs the full install end-to-end:
|
||||
|
||||
1. System scan (kernel, GPU detection with gfx target + PCI bus address, audio, display, etc.)
|
||||
2. Pacman package install (minimal — Resolve bundles its own Qt5/libpng/etc.)
|
||||
3. **`install_rocm_pinned()`** — downloads ROCm 7.1.1 from Arch Linux Archive, installs via `pacman -U` (now `|| error` on failure so partial-downgrade can't go unnoticed), adds `IgnorePkg` to `/etc/pacman.conf [options]`
|
||||
4. Manual Resolve extraction (ZIP → .run → squashfs → /opt/resolve) with RPATH patching of every ELF. Bundled glib family — **all five** of `libglib-2.0`, `libgio-2.0`, `libgmodule-2.0`, `libgobject-2.0`, `libgthread-2.0` — replaced with system symlinks. Earlier installs only swapped three; mixing system glib with bundled libgobject (4-year version skew) risks segfaults on signal emit / type registration. Bundled `libc++`/`libc++abi` are deliberately KEPT (Resolve was compiled against specific ABI versions; replacing them crashes immediately).
|
||||
5. Audio fixes: DeckLink→ALSA, snd-aloop, PipeWire bridge, wireplumber default-sink exclusion
|
||||
6. Hyprland windowrule (v3 syntax)
|
||||
7. Desktop entries with `RESOLVE_INSTALL_LOCATION` placeholder substituted, system .desktop Exec lines pointed at the wrapper
|
||||
8. Launcher in `~/.local/bin/davinci-resolve` with HSA_OVERRIDE + ROCR_VISIBLE_DEVICES + **`DRI_PRIME=pci-<bus>` (explicit tag, derived from the AMD discrete card's PCI ID)** + MESA_VK_DEVICE_SELECT baked in. Single launcher template — switcheroo branch removed.
|
||||
9. **`reset_stale_configs()`** — clears `~/.local/share/DaVinciResolve/{configs,logs}` if any of these crash markers appear in `ResolveDebug.txt`: `Unsupported GPU Processing Mode`, `OpenCL Context Manager failed to create context`, `Failed to create OpenCL context`. Also fires unconditionally on fresh Resolve installs (`SCAN_RESOLVE_INSTALLED != true`) so any in-install failed-launch poison is wiped before the user ever opens the app.
|
||||
10. Final `clinfo -l` sanity check + ROCm pin verification
|
||||
|
||||
Re-run any time:
|
||||
```bash
|
||||
~/Downloads/install-davinci-resolve.sh
|
||||
```
|
||||
|
||||
## Key files / locations
|
||||
|
||||
| File | Purpose |
|
||||
|------|---------|
|
||||
| `~/Downloads/install-davinci-resolve.sh` | The full installer (v4.1) |
|
||||
| `~/Downloads/fix-rocm-for-resolve.sh` | Standalone downgrade-only script (no install needed) |
|
||||
| `~/.local/bin/davinci-resolve` | Working launcher: HSA_OVERRIDE + ROCR_VISIBLE_DEVICES + DRI_PRIME PCI tag + MESA_VK pin |
|
||||
| `~/.local/bin/davinci-resolve-rusticl` | Rusticl OpenCL fallback (not currently working on RDNA4) |
|
||||
| `~/.local/bin/davinci-resolve-igpu` | Force iGPU (Intel) for testing |
|
||||
| `/usr/share/applications/DaVinciResolve.desktop` | The single Resolve menu entry; Exec rewritten to wrapper. No user-level davinci-resolve.desktop is created (would duplicate this in walker). |
|
||||
| `/usr/bin/davinci-resolve` | Convenience symlink to wrapper |
|
||||
| `/etc/pacman.conf` | Has `IgnorePkg = rocm-core rocm-device-libs rocm-llvm rocm-opencl-runtime comgr spirv-llvm-translator` in `[options]` |
|
||||
| `~/.config/pipewire/pipewire.conf.d/50-resolve-aloop-bridge.conf` | PipeWire loopback bridge for audio |
|
||||
| `~/.config/wireplumber/wireplumber.conf.d/51-resolve-aloop-no-default.conf` | Keep aloop off default-sink rotation |
|
||||
| `/etc/modules-load.d/snd-aloop.conf` | Auto-load snd-aloop at boot |
|
||||
| `/etc/pki/tls -> /etc/ssl` | Symlink so Resolve's extras downloader finds Arch certs |
|
||||
|
||||
## Currently pinned packages (do NOT update)
|
||||
|
||||
```
|
||||
rocm-core 7.1.1-1
|
||||
rocm-device-libs 2:7.1.1-1
|
||||
rocm-llvm 2:7.1.1-1
|
||||
rocm-opencl-runtime 7.1.1-1
|
||||
comgr 2:7.1.1-1
|
||||
spirv-llvm-translator 21.1.3-1
|
||||
```
|
||||
|
||||
## Critical "do not"
|
||||
|
||||
- **Do not** install `opencl-amd` from AUR — conflicts with `rocm-opencl-runtime`, also has the broken 7.2 ABI.
|
||||
- **Do not** run `pacman -Syu` and accept rocm-* updates until ROCm 7.3+ ships with the Resolve fix.
|
||||
- **Do not** set `DRI_PRIME=1` on hybrid AMD systems — it's the OPPOSITE of what you want when Mesa already defaults to AMD (see Root cause #2). Always use the explicit PCI tag form `DRI_PRIME=pci-0000_BB_DD_F`.
|
||||
- **Do not** wrap the launcher in `switcherooctl launch` — it inherits the same `DRI_PRIME=1` bug.
|
||||
- **Do not** use `windowrulev2 = ...` in Hyprland config — deprecated in 0.53+. Use `windowrule = ACTION, match:KEY VALUE` form.
|
||||
- **Do not** add `stay_focused on` to the Resolve `drpopup` tag — it locks focus inside modal dialogs (Project Settings, Preferences, Render) and feels like a trapped cursor. Cosmetic-only rules (border_size, no_shadow, rounding, opacity) are safe.
|
||||
- **Do not** edit `~/.local/share/omarchy/` — it's git-managed by Omarchy and gets blown away on `omarchy update`.
|
||||
|
||||
## When ROCm 7.3+ ships
|
||||
|
||||
To lift the pin and try the official stack again:
|
||||
```bash
|
||||
sudo sed -i '/^IgnorePkg.*rocm-/d' /etc/pacman.conf
|
||||
sudo pacman -Syu
|
||||
~/.local/bin/davinci-resolve # test
|
||||
```
|
||||
|
||||
If 7.3 also breaks Resolve, restore the pin via:
|
||||
```bash
|
||||
~/Downloads/fix-rocm-for-resolve.sh
|
||||
```
|
||||
|
||||
## Recovery procedures
|
||||
|
||||
### Resolve hangs / crashes
|
||||
|
||||
The installer now wipes stale configs automatically on fresh installs and any time it sees a known crash marker, so this should rarely be needed manually. If you do need it:
|
||||
|
||||
```bash
|
||||
# 1. Wipe stale config (preserves project DBs)
|
||||
mv ~/.local/share/DaVinciResolve/configs ~/.local/share/DaVinciResolve/configs.bak.$(date +%s)
|
||||
mv ~/.local/share/DaVinciResolve/logs ~/.local/share/DaVinciResolve/logs.bak.$(date +%s)
|
||||
|
||||
# 2. Verify the OpenCL stack is intact
|
||||
clinfo -l # should show AMD gfx1200
|
||||
pacman -Q rocm-core rocm-opencl-runtime # should show 7.1.1
|
||||
grep IgnorePkg /etc/pacman.conf # should pin the rocm packages
|
||||
|
||||
# 3. Verify the launcher pins to AMD (NOT DRI_PRIME=1)
|
||||
grep -E '^export (DRI_PRIME|HSA_OVERRIDE|ROCR_VISIBLE)' ~/.local/bin/davinci-resolve
|
||||
# DRI_PRIME must be a pci-... tag, never =1
|
||||
|
||||
# 4. Re-launch
|
||||
~/.local/bin/davinci-resolve
|
||||
```
|
||||
|
||||
Crash markers the installer recognises (any of these in `~/.local/share/DaVinciResolve/logs/ResolveDebug.txt` triggers the auto-wipe on next install run):
|
||||
- `Unsupported GPU Processing Mode` — original ROCm 7.2 symptom (no OpenCL device visible)
|
||||
- `OpenCL Context Manager failed to create context` — DRI_PRIME=1 flip / CL-GL interop failure
|
||||
- `Failed to create OpenCL context` — DVIP precursor of the above
|
||||
|
||||
### Hyprland config errors after edit
|
||||
|
||||
```bash
|
||||
hyprctl reload
|
||||
hyprctl configerrors # should be empty
|
||||
```
|
||||
If errors mention `windowrulev2`, replace with `windowrule = ACTION, match:KEY VALUE`. Examples in `~/.local/share/omarchy/default/hypr/`.
|
||||
|
||||
### Desktop entry broken (app menu does nothing)
|
||||
|
||||
Check for the literal placeholder:
|
||||
```bash
|
||||
grep RESOLVE_INSTALL_LOCATION /usr/share/applications/DaVinciResolve.desktop
|
||||
```
|
||||
If found, fix:
|
||||
```bash
|
||||
sudo sed -i \
|
||||
-e "s|^Exec=.*|Exec=$HOME/.local/bin/davinci-resolve %U|" \
|
||||
-e "s|RESOLVE_INSTALL_LOCATION|/opt/resolve|g" \
|
||||
/usr/share/applications/DaVinciResolve.desktop
|
||||
sudo update-desktop-database
|
||||
```
|
||||
|
||||
### Audio renders won't start
|
||||
|
||||
snd-aloop must be loaded:
|
||||
```bash
|
||||
lsmod | grep snd_aloop # should show "snd_aloop"
|
||||
sudo modprobe snd-aloop # if missing
|
||||
```
|
||||
|
||||
PipeWire bridge must be active:
|
||||
```bash
|
||||
ls ~/.config/pipewire/pipewire.conf.d/50-resolve-aloop-bridge.conf
|
||||
ls ~/.config/wireplumber/wireplumber.conf.d/51-resolve-aloop-no-default.conf
|
||||
systemctl --user restart wireplumber pipewire pipewire-pulse
|
||||
```
|
||||
|
||||
## Card compatibility — confidence tiers
|
||||
|
||||
The script auto-detects gfx targets and applies the right HSA override for every card listed below. Confidence levels reflect how well-tested each tier is, not whether the script logic handles them.
|
||||
|
||||
### ✅ Confirmed working (tested directly)
|
||||
|
||||
| Card | gfx target | Auto HSA value |
|
||||
|------|-----------|----------------|
|
||||
| **RX 9060 / 9060 XT** (Navi 44) | gfx1200 | `12.0.0` |
|
||||
|
||||
This is the only card where I've personally seen Resolve launch all the way to the Color page with this exact stack.
|
||||
|
||||
### 🟢 Should work — natively supported by ROCm 7.1.1
|
||||
|
||||
| Card | gfx target | Auto HSA value |
|
||||
|------|-----------|----------------|
|
||||
| **RX 9070 / 9070 XT** (Navi 48) | gfx1201 | `12.0.1` |
|
||||
| **RX 7900 / 7900 XT / 7900 XTX** (Navi 31) | gfx1100 | `11.0.0` |
|
||||
| **RX 7700 XT / 7800 XT** (Navi 32) | gfx1101 | `11.0.1` |
|
||||
| **RX 6800 / 6800 XT / 6900 XT / 6950 XT** (Navi 21) | gfx1030 | `10.3.0` |
|
||||
|
||||
The 7900 XTX has the most community success reports. CachyOS thread has a confirmed working 7800 XT with the same ROCm 7.1.1 pinned stack.
|
||||
|
||||
### 🟡 Should work via HSA spoof — not natively supported, spoofs to nearest target
|
||||
|
||||
| Card | Real gfx target | Spoofs as | Auto HSA value |
|
||||
|------|-----------------|-----------|----------------|
|
||||
| **RX 7600 / 7600 XT** (Navi 33) | gfx1102 | gfx1100 | `11.0.0` |
|
||||
| **RX 6700 / 6750 XT** (Navi 22) | gfx1031 | gfx1030 | `10.3.0` |
|
||||
| **RX 6600 / 6650 XT** (Navi 23) | gfx1032 | gfx1030 | `10.3.0` |
|
||||
| **RX 6500 XT / 6400** (Navi 24) | gfx1034 | gfx1030 | `10.3.0` |
|
||||
|
||||
**Caveat**: RX 6700 XT has been a problem child historically (see [Arch BBS#284316](https://bbs.archlinux.org/viewtopic.php?id=284316) — one user gave up and switched to NVIDIA). Spoofing trades correctness for not-quite-optimal codegen; some effects may fall back to CPU.
|
||||
|
||||
### 🟢 iGPUs
|
||||
|
||||
| Chip | gfx target | Notes |
|
||||
|------|-----------|-------|
|
||||
| Ryzen 7 8000 / 9000 (Phoenix/Hawk Point/Strix) | RDNA3.5 (gfx1150-ish) | CachyOS thread had a 760M (gfx1103) hit the same ROCm 7.2 bug; same downgrade fixes it. |
|
||||
| Strix Halo | gfx1151 | Confirmed working via Distrobox per Framework Community Forum. |
|
||||
|
||||
### 🔴 Will NOT work — ROCm 7.x dropped support before this script's pinned baseline
|
||||
|
||||
- **RX 5000 series** (RDNA1, gfx101x)
|
||||
- **Vega** (gfx9)
|
||||
- **Polaris** (RX 580 etc.) — only Mesa rusticl path, this script isn't tuned for that
|
||||
- **Pre-Polaris GCN**
|
||||
|
||||
### What "should work" actually means
|
||||
|
||||
For tiers 🟢 and 🟡: the **install path is fully baked in** — same package list, RPATH, audio fixes, and launcher env vars (HSA value auto-matched). What might differ between cards:
|
||||
|
||||
- **First-launch latency** — Color page can take 60s+ while shaders compile
|
||||
- **Performance ceiling** — spoofed cards (gfx1102, gfx103x) trade correctness for slightly suboptimal codegen
|
||||
- **Specific features** — Neural Engine, Fairlight noise reduction may fall back to CPU on some cards
|
||||
|
||||
### Sharing the script with someone on a different AMD card
|
||||
|
||||
What they need:
|
||||
1. Run `~/Downloads/install-davinci-resolve.sh` — auto-detects everything
|
||||
2. If launch fails, `verify_opencl()` at the end of the script tells them what's wrong
|
||||
3. This notes file has all the diagnostic commands
|
||||
|
||||
The one thing they'd need that you don't: the **DaVinci Resolve ZIP in `~/Downloads`** (Blackmagic gates it behind a registration form, no direct link).
|
||||
|
||||
## Quick reference: HSA override values
|
||||
|
||||
For copy/paste if hand-editing the launcher:
|
||||
|
||||
| Card family | gfx target | HSA_OVERRIDE_GFX_VERSION |
|
||||
|-------------|-----------|--------------------------|
|
||||
| RX 9070 / 9070 XT (Navi 48) | gfx1201 | 12.0.1 |
|
||||
| RX 9060 / 9060 XT (Navi 44) | gfx1200 | 12.0.0 |
|
||||
| RX 7700 / 7800 (Navi 32) | gfx1101 | 11.0.1 |
|
||||
| RX 7900 (Navi 31) | gfx1100 | 11.0.0 |
|
||||
| RX 7600 (Navi 33) | gfx1102 | 11.0.0 (spoof) |
|
||||
| RX 6800 / 6900 (Navi 21) | gfx1030 | 10.3.0 |
|
||||
| RX 6600 / 6700 (Navi 22-24) | gfx1031/1032/1034 | 10.3.0 (spoof) |
|
||||
|
||||
## Sources / further reading
|
||||
|
||||
- [ROCm/ROCm#5982 — 7.2 OpenCL Breaks Davinci Resolve](https://github.com/ROCm/ROCm/issues/5982)
|
||||
- [CachyOS — Davinci Resolve + AMD ROCM fails without downgrade](https://discuss.cachyos.org/t/davinci-resolve-amd-rocm-fails-without-downgrade/28036)
|
||||
- [CachyOS — Davinci Resolve + AMD GPU FAQ](https://discuss.cachyos.org/t/davinci-resolve-amd-gpu/28038)
|
||||
- [NixOS#481483 — Resolve 20.3.1 OpenCL unusable on RDNA 4](https://github.com/NixOS/nixpkgs/issues/481483)
|
||||
- [DaVinci Resolve — ArchWiki](https://wiki.archlinux.org/title/DaVinci_Resolve)
|
||||
- [Sheridan Computers — libc++ rollback fix (Oct 2025)](https://sheridancomputers.com/blog/view/videos/fix-davinci-resolve-crashing-on-arch-linux-after-system-update-october-2025)
|
||||
- [Arch Linux Archive (ALA) — historic packages](https://archive.archlinux.org/packages/)
|
||||
|
||||
## Things still left as future work
|
||||
|
||||
- **Resolve 20.3.x stable** — currently on 21.0 beta. Stable might handle the GPU stack differently.
|
||||
- **Distrobox + Debian 13** path — community-confirmed working on Strix Halo (gfx1151). Would isolate Resolve from the host's library churn entirely. Useful as a fallback.
|
||||
- **libc++ ABI break** — Resolve's bundled libc++ vs Arch's system libc++ has bitten the community before (Oct 2025). When Arch jumps libc++ major versions, Resolve may segfault on launch. Sheridan Computers documented the rollback approach.
|
||||
|
||||
## Quick sanity checks (paste into terminal anytime)
|
||||
|
||||
```bash
|
||||
# Is Resolve install intact?
|
||||
test -x /opt/resolve/bin/resolve && echo "Resolve binary OK" || echo "MISSING"
|
||||
|
||||
# Is the OpenCL stack the working version?
|
||||
pacman -Q rocm-core rocm-opencl-runtime comgr spirv-llvm-translator | grep -E "7\.1\.1|21\.1\.3" | wc -l
|
||||
# expect output: 4
|
||||
|
||||
# Is the IgnorePkg pin in place?
|
||||
grep -q "^IgnorePkg.*rocm-core" /etc/pacman.conf && echo "PINNED" || echo "NOT PINNED"
|
||||
|
||||
# Does clinfo see the GPU?
|
||||
clinfo -l | grep -i gfx1200
|
||||
|
||||
# Does the launcher have the env vars?
|
||||
grep -E "HSA_OVERRIDE|ROCR_VISIBLE|DRI_PRIME|MESA_VK" ~/.local/bin/davinci-resolve
|
||||
# DRI_PRIME line MUST be the explicit PCI tag form (pci-0000_BB_DD_F),
|
||||
# NEVER `=1`. If you see `=1`, fix it before launching:
|
||||
# amd_bus=$(lspci -nn | grep -iE 'AMD.*Radeon|Navi' | head -1 | cut -d' ' -f1)
|
||||
# sed -i "s|^export DRI_PRIME=.*|export DRI_PRIME=pci-0000_${amd_bus//[:.]/_}|" ~/.local/bin/davinci-resolve
|
||||
```
|
||||
229
README.md
229
README.md
|
|
@ -8,195 +8,154 @@
|
|||
</a>
|
||||
</p>
|
||||
|
||||
Install [DaVinci Resolve](https://www.blackmagicdesign.com/products/davinciresolve) on [Omarchy](https://omarchy.com) (Arch Linux + Hyprland) with AMD GPU support, including the new RX 9000 series (RDNA 4).
|
||||
Install [DaVinci Resolve](https://www.blackmagicdesign.com/products/davinciresolve) on [Omarchy](https://omarchy.com) (Arch Linux + Hyprland) on AMD GPUs — RDNA 2, RDNA 3, and the new RDNA 4 cards (RX 9060 / 9070 / 9080).
|
||||
|
||||
Features a pre-installation system scanner that detects your GPU, drivers, OpenCL stack, display server, and audio — then builds a tailored package list for your exact setup.
|
||||
The script does a **manual install to `/opt/resolve`** (no AUR PKGBUILD), pins **ROCm 7.1.1** from the Arch Linux Archive (current 7.2.x is broken with Resolve), patches every ELF's RPATH, fixes audio (DeckLink → ALSA + snd-aloop + PipeWire bridge), and writes a launcher with the right `HSA_OVERRIDE` / `DRI_PRIME` / `MESA_VK_DEVICE_SELECT` env vars baked in.
|
||||
|
||||
For the full design rationale, root-cause analysis, and recovery procedures see **[NOTES.md](NOTES.md)**.
|
||||
|
||||
## Requirements
|
||||
|
||||
- **OS**: [Omarchy](https://omarchy.com) (Arch Linux) or any Arch-based distro
|
||||
- **GPU**: AMD (RDNA 1 through RDNA 4, including RX 9070/9080)
|
||||
- **AUR Helper**: yay or paru
|
||||
- **Compositor**: Hyprland (optional, but script adds window rules if detected)
|
||||
- **GPU**: AMD RDNA 2 / 3 / 4 (see [GPU support](#gpu-support) below)
|
||||
- **Compositor**: Hyprland (optional — script adds window rules if detected)
|
||||
- **DaVinci Resolve ZIP** in `~/Downloads/` — Blackmagic gates this behind a registration form, no direct link
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# 1. Download DaVinci Resolve from blackmagicdesign.com into ~/Downloads/
|
||||
# 2. Clone and run:
|
||||
git clone https://git.no-signal.uk/nosignal/DaVinci-Resolve-AMD-Omarchy.git
|
||||
cd DaVinci-Resolve-AMD-Omarchy
|
||||
chmod +x install-davinci-resolve.sh
|
||||
./install-davinci-resolve.sh
|
||||
```
|
||||
|
||||
The script will scan your system, show what it found, and ask before making any changes.
|
||||
The script scans your system, shows what it found, asks before making changes, and is idempotent — safe to re-run any time.
|
||||
|
||||
## What It Does
|
||||
## Why ROCm 7.1.1 (and not the current 7.2.x)
|
||||
|
||||
### 1. System Scan
|
||||
ROCm 7.2.x's OpenCL stack breaks DaVinci Resolve on **every** AMD GPU — `clCreateContext` either fails outright or hangs on the Color page. ROCm 7.1.1 is the last known-good release.
|
||||
|
||||
Before installing anything, the script scans your system to detect:
|
||||
The script downloads 7.1.1 from the [Arch Linux Archive](https://archive.archlinux.org/packages/), installs via `pacman -U`, and adds an `IgnorePkg` line to `/etc/pacman.conf` so `pacman -Syu` won't quietly upgrade you back into the broken stack.
|
||||
|
||||
| Component | What It Checks |
|
||||
|-----------|---------------|
|
||||
| **Kernel** | Version, RDNA 4 compatibility (needs 6.12+) |
|
||||
| **GPU(s)** | Vendor, model, RDNA generation, discrete vs integrated |
|
||||
| **Hybrid GPU** | Intel/AMD iGPU + discrete GPU detection, PRIME offload support |
|
||||
| **Mesa** | Version, OpenGL renderer, Vulkan availability |
|
||||
| **OpenCL** | Installed provider, whether AMD platform is actually working |
|
||||
| **Audio** | PipeWire or PulseAudio detection |
|
||||
| **Display** | Wayland/X11, compositor (Hyprland, Sway, GNOME, KDE) |
|
||||
| **Resolve** | Existing installation detection |
|
||||
| **Disk space** | Free space on root and home partitions |
|
||||
References:
|
||||
- [ROCm/ROCm#5982](https://github.com/ROCm/ROCm/issues/5982) — upstream issue, still open
|
||||
- [CachyOS thread](https://discuss.cachyos.org/t/davinci-resolve-amd-rocm-fails-without-downgrade/28036) — community recipe
|
||||
- [NixOS#481483](https://github.com/NixOS/nixpkgs/issues/481483) — RDNA4-specific report
|
||||
|
||||
### 2. Smart Package Selection
|
||||
When ROCm 7.3+ ships and is verified working, the pin can be lifted — see NOTES.md.
|
||||
|
||||
Based on the scan, it builds a package list that:
|
||||
- Skips packages already installed
|
||||
- Selects the right OpenCL provider for your GPU
|
||||
- Removes conflicting packages (e.g. rusticl breaks ROCm)
|
||||
- Adds hybrid GPU support if needed
|
||||
## What it does
|
||||
|
||||
### 3. OpenCL Provider
|
||||
1. **System scan** — kernel, GPU(s) with gfx target + PCI bus address, audio stack, display server, existing Resolve install
|
||||
2. **ROCm 7.1.1 pinned install** — downloads from Arch Linux Archive, `pacman -U`, adds `IgnorePkg` to `/etc/pacman.conf`. Aborts on partial-downgrade failure (won't silently leave you on a broken stack)
|
||||
3. **Manual Resolve install** — `unzip` → `.run` AppImage → `--appimage-extract` → `rsync` to `/opt/resolve` → `patchelf --set-rpath` every ELF
|
||||
4. **glib-family symlink swap** — replaces all five bundled glib libs (`libglib-2.0`, `libgio-2.0`, `libgmodule-2.0`, `libgobject-2.0`, `libgthread-2.0`) with system symlinks. Bundled `libc++` / `libc++abi` are deliberately **kept** (Resolve was compiled against specific ABI versions; replacing them crashes on launch)
|
||||
5. **Audio fixes** — DeckLink → ALSA backend, snd-aloop kernel module, PipeWire loopback bridge, wireplumber rule keeping aloop off the default-sink rotation
|
||||
6. **Hyprland window rules** — v3 syntax (not deprecated `windowrulev2`), cosmetic-only on the modal dialogs to avoid the trapped-cursor problem
|
||||
7. **Launcher** at `~/.local/bin/davinci-resolve` with `HSA_OVERRIDE_GFX_VERSION`, `ROCR_VISIBLE_DEVICES`, `DRI_PRIME=pci-<bus>` (explicit tag, not `=1` — see below), and `MESA_VK_DEVICE_SELECT` baked in
|
||||
8. **Stale-config wipe** — clears `~/.local/share/DaVinciResolve/{configs,logs}` if it sees a known crash marker, and unconditionally on fresh installs
|
||||
|
||||
Two options (configurable in the script):
|
||||
## Hybrid GPU note (Intel iGPU + AMD dGPU)
|
||||
|
||||
| Provider | Source | Best For |
|
||||
|----------|--------|----------|
|
||||
| `opencl-amd` (default) | AUR | Recommended by Arch Wiki for Resolve |
|
||||
| `rocm-full` | Official repos | Full ROCm/HIP stack, better RDNA 4 support |
|
||||
On hybrid laptops where the monitor is wired to the AMD discrete card, Mesa already defaults OpenGL to the AMD card. Setting `DRI_PRIME=1` in this scenario actually flips OpenGL to the **Intel** iGPU — Resolve then has OpenGL on Intel and OpenCL on AMD, CL/GL interop fails, and Resolve hangs on the Color page.
|
||||
|
||||
### 4. Installs DaVinci Resolve
|
||||
The launcher uses the **explicit PCI tag form** (`DRI_PRIME=pci-0000_BB_DD_F`) derived from the AMD card's `lspci` ID. `switcherooctl` is **not** used — it internally sets `DRI_PRIME=1` and inherits the same flip bug.
|
||||
|
||||
Installs via the AUR package (`davinci-resolve` or `davinci-resolve-studio`).
|
||||
## GPU support
|
||||
|
||||
### 5. Applies Compatibility Fixes
|
||||
The script auto-detects the gfx target and applies the right HSA override unattended.
|
||||
|
||||
| Fix | Method | Why |
|
||||
|-----|--------|-----|
|
||||
| **GLib conflict** | patchelf (davincibox-style) | Cleaner than LD_PRELOAD, survives updates |
|
||||
| **OpenCL decoders** | Disable BlackmagicRaw OpenCL | Prevents crashes with AMD OpenCL |
|
||||
| **Rusticl removal** | Removes conflicting packages | Mesa's rusticl breaks ROCm OpenCL |
|
||||
| **XWayland wrapper** | Custom launcher script | Resolve doesn't support native Wayland |
|
||||
| **RDNA 4 env vars** | HSA_OVERRIDE_GFX_VERSION | Tells ROCm how to talk to gfx1201 GPUs |
|
||||
### Confirmed working (tested directly)
|
||||
|
||||
### 6. Creates Launcher
|
||||
| Card | gfx target | HSA value |
|
||||
|------|-----------|-----------|
|
||||
| **RX 9060 / 9060 XT** (Navi 44) | gfx1200 | `12.0.0` |
|
||||
|
||||
A wrapper script at `~/.local/bin/davinci-resolve` that:
|
||||
- Forces XWayland mode (`QT_QPA_PLATFORM=xcb`)
|
||||
- Sets ROCm/OpenCL environment variables
|
||||
- Handles DRI_PRIME for hybrid GPU setups
|
||||
- Sets RDNA 4 GFX version override if needed
|
||||
### Should work — natively supported by ROCm 7.1.1
|
||||
|
||||
### 7. Configures Hyprland
|
||||
| Card | gfx target | HSA value |
|
||||
|------|-----------|-----------|
|
||||
| **RX 9070 / 9070 XT** (Navi 48) | gfx1201 | `12.0.1` |
|
||||
| **RX 7900 / 7900 XT / 7900 XTX** (Navi 31) | gfx1100 | `11.0.0` |
|
||||
| **RX 7700 XT / 7800 XT** (Navi 32) | gfx1101 | `11.0.1` |
|
||||
| **RX 6800 / 6800 XT / 6900 XT / 6950 XT** (Navi 21) | gfx1030 | `10.3.0` |
|
||||
|
||||
Adds window rules to `hyprland.conf` for Resolve's floating dialogs (file pickers, render settings, etc.) so they behave correctly under Hyprland.
|
||||
### Should work via HSA spoof — not natively supported, spoofed to nearest target
|
||||
|
||||
### 8. Bonus Tools
|
||||
| Card | Real gfx | Spoofs as | HSA value |
|
||||
|------|----------|-----------|-----------|
|
||||
| **RX 7600 / 7600 XT** (Navi 33) | gfx1102 | gfx1100 | `11.0.0` |
|
||||
| **RX 6700 / 6750 XT** (Navi 22) | gfx1031 | gfx1030 | `10.3.0` |
|
||||
| **RX 6600 / 6650 XT** (Navi 23) | gfx1032 | gfx1030 | `10.3.0` |
|
||||
| **RX 6500 XT / 6400** (Navi 24) | gfx1034 | gfx1030 | `10.3.0` |
|
||||
|
||||
- **resolve-convert** — Converts MP4/MKV to DNxHR format (DaVinci Resolve Free on Linux doesn't support H.264/H.265)
|
||||
- **davinci-resolve-checker** — Community diagnostic tool for troubleshooting Resolve issues
|
||||
### Not supported — ROCm 7.x dropped these before our pinned baseline
|
||||
|
||||
## Supported AMD GPUs
|
||||
- **RX 5000 series** (RDNA 1)
|
||||
- **Vega**
|
||||
- **Polaris and earlier** (rusticl-only path, this script isn't tuned for it)
|
||||
|
||||
| Generation | GPUs | Notes |
|
||||
|-----------|------|-------|
|
||||
| **RDNA 4** | RX 9070, 9080 | Needs kernel 6.12+, Mesa 25+ |
|
||||
| **RDNA 3** | RX 7600–7900 | Full support |
|
||||
| **RDNA 2** | RX 6400–6950 | Full support |
|
||||
| **RDNA 1** | RX 5500–5700 | Full support |
|
||||
| **Vega** | Vega 56/64 | Supported |
|
||||
| **GCN** | Older cards | May work, not tested |
|
||||
## Free-version codec limitation
|
||||
|
||||
## Hybrid GPU Support
|
||||
|
||||
The script detects and handles these configurations:
|
||||
|
||||
- **Intel iGPU + AMD dGPU** — Configures DRI_PRIME for discrete GPU
|
||||
- **AMD iGPU + AMD dGPU** — Auto-selects discrete GPU
|
||||
- **Intel iGPU + NVIDIA dGPU** — Advises on PRIME render offload
|
||||
- **AMD iGPU + NVIDIA dGPU** — Advises on PRIME render offload
|
||||
|
||||
## Configuration
|
||||
|
||||
### Changing OpenCL Provider
|
||||
|
||||
Edit the script and change `OPENCL_PROVIDER`:
|
||||
DaVinci Resolve Free on Linux can't decode H.264/H.265. Convert media first:
|
||||
|
||||
```bash
|
||||
# In install-davinci-resolve.sh:
|
||||
OPENCL_PROVIDER="opencl-amd" # AUR package (default)
|
||||
OPENCL_PROVIDER="rocm-full" # Official ROCm stack
|
||||
resolve-convert video.mp4 # writes video_dnxhr.mov (DNxHR)
|
||||
```
|
||||
|
||||
### Free Version Codec Limitation
|
||||
## Environment variables
|
||||
|
||||
DaVinci Resolve Free on Linux cannot decode H.264/H.265. Convert your media first:
|
||||
| Var | Effect |
|
||||
|-----|--------|
|
||||
| `RESOLVE_NO_ALOOP=1` | Skip the snd-aloop / PipeWire bridge audio setup (use this if you have a real audio interface) |
|
||||
|
||||
## Uninstall
|
||||
|
||||
The script does **not** track itself with pacman. To remove cleanly:
|
||||
|
||||
```bash
|
||||
resolve-convert video.mp4
|
||||
# Creates video_dnxhr.mov (DNxHR format that Resolve Free supports)
|
||||
sudo rm -rf /opt/resolve
|
||||
sudo rm -f /usr/share/applications/{DaVinciResolve,blackmagicraw-*}.desktop
|
||||
sudo rm -f /usr/lib/udev/rules.d/{99-BlackmagicDevices,99-ResolveKeyboardHID,99-DavinciPanel}.rules
|
||||
rm -f ~/.local/bin/davinci-resolve ~/.local/bin/davinci-resolve-rusticl ~/.local/bin/davinci-resolve-igpu
|
||||
rm -f ~/.local/bin/resolve-convert ~/.local/bin/davinci-resolve-checker
|
||||
|
||||
# Optional — also remove user data (DELETES ALL PROJECTS)
|
||||
rm -rf ~/.local/share/DaVinciResolve
|
||||
```
|
||||
|
||||
To lift the ROCm pin:
|
||||
|
||||
```bash
|
||||
sudo sed -i '/^IgnorePkg.*rocm-/d' /etc/pacman.conf
|
||||
sudo pacman -Syu
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### GPU not detected in Resolve
|
||||
If first launch fails or Resolve hangs on the Color page, **[NOTES.md](NOTES.md)** has the full recovery playbook — quick sanity checks at the bottom let you verify the OpenCL stack, launcher env vars, and PipeWire bridge in a few lines of paste.
|
||||
|
||||
Common quick checks:
|
||||
|
||||
```bash
|
||||
# Check OpenCL
|
||||
clinfo --list
|
||||
|
||||
# Check ROCm
|
||||
rocminfo
|
||||
|
||||
# Run diagnostics
|
||||
davinci-resolve-checker
|
||||
```
|
||||
|
||||
### RDNA 4 specific issues
|
||||
|
||||
If Resolve doesn't detect your RX 9070/9080, try adjusting the GFX version in the launcher:
|
||||
|
||||
```bash
|
||||
# Edit ~/.local/bin/davinci-resolve
|
||||
# Change HSA_OVERRIDE_GFX_VERSION value:
|
||||
# 11.0.1 (default for gfx1201)
|
||||
# 11.0.0 (fallback to gfx1100)
|
||||
```
|
||||
|
||||
### Resolve crashes on launch
|
||||
|
||||
- Check patchelf fix is applied: `patchelf --print-needed /opt/resolve/bin/resolve | grep glib`
|
||||
- Re-run the script to reapply fixes
|
||||
- Check logs: `~/.local/share/DaVinciResolve/logs/`
|
||||
|
||||
### Kernel 6.14/6.15 ROCm issues
|
||||
|
||||
Kernels 6.14 and 6.15 have known DKMS issues with ROCm. Consider using kernel 6.12 or 6.13.
|
||||
|
||||
## Uninstalling
|
||||
|
||||
```bash
|
||||
# Remove Resolve (AUR package)
|
||||
yay -Rns davinci-resolve
|
||||
|
||||
# Remove launcher and tools
|
||||
rm -f ~/.local/bin/davinci-resolve
|
||||
rm -f ~/.local/bin/resolve-convert
|
||||
rm -f ~/.local/bin/davinci-resolve-checker
|
||||
rm -rf ~/.local/share/davinci-resolve-checker
|
||||
|
||||
# Remove user data (WARNING: deletes all projects)
|
||||
rm -rf ~/.local/share/DaVinciResolve
|
||||
clinfo -l # should show your AMD gfx target
|
||||
pacman -Q rocm-core rocm-opencl-runtime # should show 7.1.1
|
||||
grep IgnorePkg /etc/pacman.conf # should pin the rocm packages
|
||||
grep -E 'DRI_PRIME|HSA_OVERRIDE' ~/.local/bin/davinci-resolve # DRI_PRIME must be pci-... form, NEVER =1
|
||||
```
|
||||
|
||||
## Credits
|
||||
|
||||
- [Omarchy](https://omarchy.com) - The Arch Linux distribution this was built for
|
||||
- [davincibox](https://github.com/zelikos/davincibox) - Patchelf fix technique
|
||||
- [Arch Wiki - DaVinci Resolve](https://wiki.archlinux.org/title/DaVinci_Resolve) - Community documentation
|
||||
- [Blackmagic Design](https://www.blackmagicdesign.com/) - DaVinci Resolve
|
||||
- [davinci-resolve-checker](https://github.com/Ashark/davinci-resolve-checker) - Diagnostic tool
|
||||
- [Omarchy](https://omarchy.com) — the Arch + Hyprland distribution this targets
|
||||
- [davincibox](https://github.com/zelikos/davincibox) — patchelf RPATH technique
|
||||
- [Arch Wiki — DaVinci Resolve](https://wiki.archlinux.org/title/DaVinci_Resolve) — community documentation
|
||||
- [Sheridan Computers](https://sheridancomputers.com/blog/view/videos/fix-davinci-resolve-crashing-on-arch-linux-after-system-update-october-2025) — libc++ ABI rollback writeup
|
||||
- [Blackmagic Design](https://www.blackmagicdesign.com/) — DaVinci Resolve
|
||||
- [davinci-resolve-checker](https://github.com/Ashark/davinci-resolve-checker) — diagnostic tool
|
||||
|
||||
## License
|
||||
|
||||
This project is provided as-is for the Omarchy community.
|
||||
Provided as-is for the Omarchy community.
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue