I have done some testing of GPUs and drivers and want to share it with other ArchLinux users.
Intel igpu:
I have tested all opencl-intel providers and the problem seems to be that dr do not recognizes some of them as qualified opencl platform. I did all tests in dr v15.2.2.007 and with my i7-8700 (UHD Graphics 630 Desktop). The format is following: opencl-driver (file in /etc/OpenCL/vendors) | result
- compute-runtime-18.42.11702-1 (intel.icd) | Skipping unqualified OpenCL platform: Intel(R) OpenCL HD Graphics
- compute-runtime-bin-18.51.12049-1 (intel-gpu.icd) | Skipping unqualified OpenCL platform: Intel(R) OpenCL HD Graphics
- beignet 1.3.2+12+gfc5f430c-1 (intel-beignet.icd) | Skipping unqualified OpenCL platform: Intel Gen OCL Driver
- intel-opencl-5.0.r63503-1 (intel-gpu.icd) | No info about quality, dr crashed
OpenCL error -1001, GPUPropertiesUtilUnix.cpp:338.
terminate called after throwing an instance of 'ReactorGPU::GPUException'
Possibly not suitable for my igpu. - intel-opencl-runtime-1:18.1.0.013-1 (intel.icd) | No info about quality, dr crashed
OpenCL error -1001, GPUPropertiesUtilUnix.cpp:338.
terminate called after throwing an instance of 'ReactorGPU::GPUException'
Possibly not suitable for my igpu.
When starting in terminal, dr immediately spits out crash report. But it hangs at QProcess: Destroyed while process ("/bin/grep") is still running. Then after pressing ctrl+c to terminate process, it starts splash (why?) and after discarding to update configuration in dialog window, it still hangs in terminal and even ctrl+c does not help. You only can close terminal. And in process tree you can see DaVinciPanelDae zombie process.
Then when you try to start resolve again, it says that Another DaVinci Resolve instance is already running
and you can see a lot of DPDecoder zombie processes.
I got no success in any configuration. We will wait when bmd fix it. See
here.
Amd igpu:
I have no such apu, so could not test. If you tested it, please share your results.
Intel igpu + Nvidia optimus:
- GPU model: GeForce 920M
davinci-resolve-beta: 16.0b6-1, linux: 5.2-arch2-1, xorg-xserver: 1.20.5-2, nvidia: 430.26-9, opencl-nvidia 430.26-1, cuda: not installed
- Using nvidia method: works normally
- Using PRIME with nouveau method: not tested, because I am sure it wouldn't work with open source drivers
- Using Bumblebee method: works partly
bumblebee: 3.2.1-20, primus: 20151110-8, cuda: not installed
It requires that some implementation of OpenCL (f.e. opencl-nvidia) to be installed (otherwise crashes), but actually falls back to cuda. If you manually set to use OpenCL instead of cuda, it will fail after relaunching. No matter you run it with optirun or primusrun. To get it back to working condition, remove ~/.local/share/DavinciResolve. Btw, it works on its own shipped cuda libraries, not archlinux's cuda libraries. - Using nvidia-xrun method: works normally
nvidia-xrun-git: 0.3.79.gaf3b734-1, bbswitch: not installed
Note that dr will still crash for above methods if you additionally install proprietary implementation of amd opencl. Probably in future releases of dr it may be fixed by bmd.
update 2020 06 08: need to test with prime + nvidia, because proprietary driver now supports prime.
Nvidia gpu:
Tested configurations in the following format:
GPU model | linux version | xorg-server version | davinci-resolve version | drivers versions | result
- GeForce GTX 1060 | 4.19.4.arch1-1 | 1.20.3-1 | 15.2.1.005 | xf86-video-nouveau 1.0.15-3, opencl-nvidia 415.18-1 | fail - Aborted (core dumped).
In ResolveDebug.txt I have: Updating display GPU information...
OpenCL error -1001, GPUPropertiesUtilUnix.cpp:338.
terminate called after throwing an instance of 'ReactorGPU::GPUException'
terminate called recursively - GeForce GTX 1060 | 4.19.4.arch1-1 | 1.20.3-1 | 15.2.1.005 | nvidia 415.18-4, opencl-nvidia 415.18-1 | success
- GeForce GT 630 | | | 15.2.2.007 | nouveau driver in use | fail - splash screen disappears after several seconds.
No info about quality, dr crashed
OpenCL error -1001, GPUPropertiesUtilUnix.cpp:338.
terminate called after throwing an instance of 'ReactorGPU::GPUException' - GeForce GT 630 | 4.19.4.arch1-1 | 1.20.3-1 | 15.2.1.005 | nvidia 415.18-4, opencl-nvidia-415.18-1 | success
It works fine only with proproetary driver. Install proprietary driver and blacklist/uninstall opensource driver.
Note, that even when using nvidia driver, dr will crash after few seconds of showing splash screen if you forget to update opencl-nvidia to match nvidia driver version. I mention it, because I was experimenting a lot, constantly installing and removing opencl and video drivers, and at that time repo update was made. Partial updates are not supported in Arch, so keep an eye for versions to be matched.
Bmd should at least prevent crashes when nouveau driver in use and opencl-nvidia installed.
Also with nvidia kernel module in use we got this in log:
Found qualified OpenCL board 0: platform - NVIDIA CUDA, vendor - NVIDIA Corporation, id - 0x7f57aac8cb30, device name - GeForce GT 630 id - 0x7f57aac8cbd0, global memory size (MB) - 2002, local memory size (KB) - 48, max global memory alloc size (MB) - 500
independently of the fact if cuda package installed. Looks like it always uses opencl on nvidia, but not opencl. I do not know if this is actually true, but made this note for developers.
AMD GPU:
This is when you have amd gpu only or amd + intel while amd is set as primary in bios.
As of dr v16.0 (#044), such configuration requires proprietary opencl implementation for amd and proprietary opengl implementation for amd.
Testing opencl implementations results in the format:
opencl-driver (file in /etc/OpenCL/vendors) | kernel driver in use | result
- opencl-mesa-18.3.1-1 (mesa.icd) | amdgpu | Skipping unqualified OpenCL platform: Clover
- opencl-amd 18.50.708488-1 (amdocl-orca64.icd and amdocl.icd) | amdgpu | Found qualified OpenCL board 0: platform - AMD Accelerated Parallel Processing, vendor - Advanced Micro Devices, Inc., id - 0x7feb0742de30, device name - Radeon RX 580 Series id - 0x7feb0bfa5610, global memory size (MB) - 7535, local memory size (KB) - 32, max global memory alloc size (MB) - 4048
Davinci resolve will crash if no suitable opencl-driver is installed.
Tested configurations
- GPU model: Radeon RX580
davinci-resolve-beta: 16.0b6-1, linux: 5.2.1.arch1-1, xorg-server: 1.20.5-2, xf86-video-amdgpu: 19.0.1-1, mesa 19.1.2-1, amdgpu-pro-libgl: 19.30_838629-1, opencl-amdgpu-pro-orca: 19.30_838629-1
Works normally.
I also would like to test it with Vega and later gpu cards, but I do not have them. If you have such hardware, please share your test results.
Intel (primary) + (AMD or NVIDIA)This is amd hybrid graphics laptops. It also may be a desktop with intel + amd or nvidia when intel is set as primary in bios. On my desktop it automatically becomes primary if I turn on a desktop with monitor cable attached to intel and not attached to amd. Intel's opengl is suitable (you do not need proprietary amd opengl), but you still need to install proprietary opencl for amd or nvidia.
Tested configurations
- Radeon RX580 | linux 4.20.arch1-1, xorg-server 1.20.3-1, dr 15.2.2.007, xf86-video-amdgpu 18.1.0-1, mesa 18.3.1-1, opencl-amd 18.50.708488-1 | success - amdgpu (not pro) driver in use.
- Radeon R7 M265 | dr 15.2.1, opencl-amd 18.30.641594-1, radeon kernel module in use | fail - crash. In logs I see: amdgpu_device_initialize: DRM version is 2.50.0 but this driver is only compatible with 3.x.x.
- Radeon R7 M265 | dr 16.2.2-1, opencl-amd 20.10.1048554-1, amd kernel module in use | semi-success - started like normal, then showed error window "No OpenCL boards available on chassis 1", after clicking ok, another window appeared "CRITICAL_PREF: DaVinci Resolve could not find any OpenCL capable GPU's. Would you like to review and update your DaVinci Resolve Hardware Configuration? Please ensure that appropriate GPU drivers are installed and your DaVinci Resolve hardware is configured appropriately.", then after pressing ok, looks like it is normal. But actually it is not working. When you add any clip (even just an jpg or png image) to the timeline, it is not able to display it or play. Here is a youtube video (start watch at 2:33):
Other:
- no any opencl-driver (force removed dependency with pacman -Rdd) | Not info about quality, dr crashed
OpenCL error -1001, GPUPropertiesUtilUnix.cpp:338.
terminate called after throwing an instance of 'ReactorGPU::GPUException'
This test was done while nvidia driver in use while gt630, uhd640, rx580 presented in system. In some intel opencl cases output looks the same. Means that dr not thinks that they are not qualified opencl platforms, but even do not sees them. - pocl-git v1.2.r111.g94fba9f5-1 (pocl.icd) | Skipping unqualified OpenCL platform: Portable Computing Language
But interestingly, while at least one icd loader exist, dr not crashes immediately with error -1001.
And even more interesting, in that case (unqualified platform) it allows to use cuda (of course nvidia driver in use) while opencl-nvidia and cuda are not installed! I think bmd could check if nvidia gpu is presented and work with it using cuda while there is no any opencl icd instead of just crashing.