Roadmap to Vulkan
Vulkan brings some advantages like async compute, better defined behavior and in general more control over the specifics of what's happening. This is a rough plan on how to get there, and how to do it in steps, without having one giant merge request
Basic infrastructure
- require Vulkan 1.3 and all the extensions that make our lives easier. We have OpenGL as a fallback, so compatibility can effectively be ignored
- add Vulkan support to the Wayland backend, to create a device and allow for testing
- export texture to OpenGL and use OpenGL compositing with a Vulkan backend at first
- port shaders to Vulkan, add CMake command to compile it to SPIR-V at built time
- scene: paint items, without any effects as a start
Libkwineffects
- add infrastructure for Vulkan objects
- add infrastructure for Vulkan <-> OpenGL interop
- port offscreen effects to use Vulkan <-> OpenGL interop
- import Vulkan textures into QtQuick
- port:
- contrast to Vulkan
- blur to Vulkan
- colorpicker to Vulkan
- invert to Vulkan
- magnifier to Vulkan
- mouseclick to QML
- mousemark to QML
- screenedge to QML
- screenshot to Vulkan
- screentransform to Vulkan
- showpaint to Vulkan
- snaphelper to QML
- touchpoints to QML
- trackmouse to QML
- zoom to Vulkan
- startupfeedback to Vulkan or QML
Other plugins
- qpa: port to Vulkan, or use OpenGL interop
- screencast: port to get a buffer instead of a texture from the backend -> screencast code can mostly stay untouched besides that
Other backends
- virtual backend: should be very straight forward, it's just one texture
- drm backend: write a replacement for
EglGbmBackend
+EglGbmLayer
. To simplify multi gpu, only support setups where all GPUs support Vulkan
Long term goals
- make use of asynchronous compute for simple scenes (no active effects)
- port effects from Vulkan <-> OpenGL interop to use Vulkan directly?
- port shader loading to Qt's shader infrastructure? (QTBUG-113331)