News: 0001622890

  ARM Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life (Terry Pratchett, Jingo)

KDE's KWin Compositor Lands First Step Toward Vulkan Support

([KDE] 88 Minutes Ago KWin + Vulkan Work)


Merged today was the very first step toward implementing Vulkan support within KDE's KWin compositor as an alternative to OpenGL rendering.

For years there has been talk about implementing Vulkan support within the KWin Wayland compositor while now we are finally beginning to see some mainline activity around it. A merge request opened three weeks ago was [1]generic multi-GPU copy swapchain with Vulkan support with initial Vulkan support for the DRM back-end.

Xaver Hugl who authored the code explained in the [2]merge request :

"This MR adds the swapchain, uses it in the drm backend, and adds Vulkan support to it. In my testing, performance seems to be the same as OpenGL with AMD iGPU + AMD eGPU, and the same with Intel iGPU + Nvidia dGPU.

With Nvidia as primary GPU, Vulkan makes some performance improvements possible, however, this MR as it is doesn't unlock those yet. [As far as I can tell], we need to do two copies if we render on EGL, first one to an intermediary linear buffer, then a copy to the scanout buffer.

"

The very basic Vulkan infrastructure is part of this merge along with the swapchain bits, including for multi-GPU scenarios.

This merge checks off the first step of the basic Vulkan infrastructure laid out in KWin's [3]roadmap to Vulkan support dating back to 2023. There still is more work to be done on the basic infrastructure as well as enabling Vulkan for KWin effects, plug-ins, other backends, and more.

In any case we're off to an exciting start to see Vulkan code finally beginning to land in the mainline KWin codebase. Hopefully more of it will follow soon.



[1] https://invent.kde.org/plasma/kwin/-/merge_requests/8926

[2] https://invent.kde.org/plasma/kwin/-/merge_requests/8926

[3] https://invent.kde.org/plasma/kwin/-/issues/169



: is not an identifier