implement linux dmabuf v6, and with it do multi GPU copies ourselves
Instead of the client doing multi GPU copies and providing a buffer for the main device, the client provides the original buffer on the GPU it's actually doing its rendering, and hints the device we should import the buffer on. Whenever KWin needs to render on a different GPU than the one the buffer resides on, it now does those multi GPU copies explicitly.
The main benefit of doing this right now is that when KWin does direct scanout, it can use the original buffer without doing any copies, with can be hugely beneficial to performance. On my eGPU setup, a simple fullscreen eglgears_wayland with a copy to the integrated GPU and back to the external GPU reaches only about 40fps, while doing 120 with this commit and the matching implementation in Mesa.
In the future, we should also do compositing on the GPU the display is actually connected to, but this is a big step in the right direction.
See https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/268 and https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33344