diff --git a/platform.h b/platform.h --- a/platform.h +++ b/platform.h @@ -376,6 +376,12 @@ * Default implementation creates an EffectsHandlerImp; **/ virtual void createEffectsHandler(Compositor *compositor, Scene *scene); + /** + * The CompositingTypes supported by the Platform. + * The first item should be the most preferred one. + * @since 5.11 + **/ + virtual QVector supportedCompositors() const = 0; public Q_SLOTS: void pointerMotion(const QPointF &position, quint32 time); diff --git a/plugins/platforms/drm/drm_backend.h b/plugins/platforms/drm/drm_backend.h --- a/plugins/platforms/drm/drm_backend.h +++ b/plugins/platforms/drm/drm_backend.h @@ -118,6 +118,8 @@ return m_gbmDevice; } + QVector supportedCompositors() const override; + public Q_SLOTS: void turnOutputsOn(); diff --git a/plugins/platforms/drm/drm_backend.cpp b/plugins/platforms/drm/drm_backend.cpp --- a/plugins/platforms/drm/drm_backend.cpp +++ b/plugins/platforms/drm/drm_backend.cpp @@ -738,4 +738,13 @@ setOutputsEnabled(enabled); } +QVector DrmBackend::supportedCompositors() const +{ +#if HAVE_GBM + return QVector{OpenGLCompositing, QPainterCompositing}; +#else + return QVector{QPainterCompositing}; +#endif +} + } diff --git a/plugins/platforms/fbdev/fb_backend.h b/plugins/platforms/fbdev/fb_backend.h --- a/plugins/platforms/fbdev/fb_backend.h +++ b/plugins/platforms/fbdev/fb_backend.h @@ -78,6 +78,10 @@ return m_bgr; } + QVector supportedCompositors() const override { + return QVector{QPainterCompositing}; + } + private: void openFrameBuffer(); bool queryScreenInfo(); diff --git a/plugins/platforms/hwcomposer/hwcomposer_backend.h b/plugins/platforms/hwcomposer/hwcomposer_backend.h --- a/plugins/platforms/hwcomposer/hwcomposer_backend.h +++ b/plugins/platforms/hwcomposer/hwcomposer_backend.h @@ -82,6 +82,10 @@ return m_outputBlank; } + QVector supportedCompositors() const override { + return QVector{OpenGLCompositing}; + } + Q_SIGNALS: void outputBlankChanged(); diff --git a/plugins/platforms/virtual/virtual_backend.h b/plugins/platforms/virtual/virtual_backend.h --- a/plugins/platforms/virtual/virtual_backend.h +++ b/plugins/platforms/virtual/virtual_backend.h @@ -85,6 +85,10 @@ m_gbmDevice = device; } + QVector supportedCompositors() const override { + return QVector{OpenGLCompositing, QPainterCompositing}; + } + Q_SIGNALS: void sizeChanged(); void outputGeometriesChanged(const QVector &geometries); diff --git a/plugins/platforms/wayland/wayland_backend.h b/plugins/platforms/wayland/wayland_backend.h --- a/plugins/platforms/wayland/wayland_backend.h +++ b/plugins/platforms/wayland/wayland_backend.h @@ -148,6 +148,8 @@ void togglePointerConfinement(); + QVector supportedCompositors() const override; + Q_SIGNALS: void shellSurfaceSizeChanged(const QSize &size); void systemCompositorDied(); diff --git a/plugins/platforms/wayland/wayland_backend.cpp b/plugins/platforms/wayland/wayland_backend.cpp --- a/plugins/platforms/wayland/wayland_backend.cpp +++ b/plugins/platforms/wayland/wayland_backend.cpp @@ -653,6 +653,16 @@ } } +QVector WaylandBackend::supportedCompositors() const +{ +#if HAVE_WAYLAND_EGL + return QVector{OpenGLCompositing, QPainterCompositing}; +#else + return QVector{QPainterCompositing}; +#endif +} + + } } // KWin diff --git a/plugins/platforms/x11/standalone/x11_platform.h b/plugins/platforms/x11/standalone/x11_platform.h --- a/plugins/platforms/x11/standalone/x11_platform.h +++ b/plugins/platforms/x11/standalone/x11_platform.h @@ -65,6 +65,7 @@ void invertScreen() override; void createEffectsHandler(Compositor *compositor, Scene *scene) override; + QVector supportedCompositors() const override; protected: void doHideCursor() override; diff --git a/plugins/platforms/x11/standalone/x11_platform.cpp b/plugins/platforms/x11/standalone/x11_platform.cpp --- a/plugins/platforms/x11/standalone/x11_platform.cpp +++ b/plugins/platforms/x11/standalone/x11_platform.cpp @@ -410,4 +410,17 @@ new EffectsHandlerImplX11(compositor, scene); } +QVector X11StandalonePlatform::supportedCompositors() const +{ + QVector compositors; +#if HAVE_EPOXY_GLX + compositors << OpenGLCompositing; +#endif +#ifdef KWIN_HAVE_XRENDER_COMPOSITING + compositors << XRenderCompositing; +#endif + compositors << NoCompositing; + return compositors; +} + } diff --git a/plugins/platforms/x11/windowed/x11windowed_backend.h b/plugins/platforms/x11/windowed/x11windowed_backend.h --- a/plugins/platforms/x11/windowed/x11windowed_backend.h +++ b/plugins/platforms/x11/windowed/x11windowed_backend.h @@ -69,6 +69,10 @@ QPainterBackend* createQPainterBackend() override; void warpPointer(const QPointF &globalPos) override; + QVector supportedCompositors() const override { + return QVector{OpenGLCompositing, QPainterCompositing}; + } + Q_SIGNALS: void sizeChanged();