Add a pure virtual method to Platform to describe the supported compositors
Summary: So far KWin does not know which Compositors the platform actually supports. This results in KWin happily trying to use the OpenGL compositor on fbdev or the QPainter compositor on hwcomposer although that is obviously going to fail as the platform doesn't support this. By adding a pure virtual method all Platforms can define what they support. In a later step the Compositor can use this to create an appropriate scene and also perform proper fallback handling in case the scene creation fails. Test Plan: Compiles Reviewers: #kwin, #plasma Subscribers: plasma-devel, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D8316
This commit is contained in:
parent
aed7ff64c4
commit
09489a4c2b
11 changed files with 59 additions and 0 deletions
|
@ -376,6 +376,12 @@ public:
|
||||||
* Default implementation creates an EffectsHandlerImp;
|
* Default implementation creates an EffectsHandlerImp;
|
||||||
**/
|
**/
|
||||||
virtual void createEffectsHandler(Compositor *compositor, Scene *scene);
|
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<CompositingType> supportedCompositors() const = 0;
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void pointerMotion(const QPointF &position, quint32 time);
|
void pointerMotion(const QPointF &position, quint32 time);
|
||||||
|
|
|
@ -738,4 +738,13 @@ void DrmBackend::outputDpmsChanged()
|
||||||
setOutputsEnabled(enabled);
|
setOutputsEnabled(enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVector<CompositingType> DrmBackend::supportedCompositors() const
|
||||||
|
{
|
||||||
|
#if HAVE_GBM
|
||||||
|
return QVector<CompositingType>{OpenGLCompositing, QPainterCompositing};
|
||||||
|
#else
|
||||||
|
return QVector<CompositingType>{QPainterCompositing};
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,6 +118,8 @@ public:
|
||||||
return m_gbmDevice;
|
return m_gbmDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVector<CompositingType> supportedCompositors() const override;
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void turnOutputsOn();
|
void turnOutputsOn();
|
||||||
|
|
||||||
|
|
|
@ -78,6 +78,10 @@ public:
|
||||||
return m_bgr;
|
return m_bgr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVector<CompositingType> supportedCompositors() const override {
|
||||||
|
return QVector<CompositingType>{QPainterCompositing};
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void openFrameBuffer();
|
void openFrameBuffer();
|
||||||
bool queryScreenInfo();
|
bool queryScreenInfo();
|
||||||
|
|
|
@ -82,6 +82,10 @@ public:
|
||||||
return m_outputBlank;
|
return m_outputBlank;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVector<CompositingType> supportedCompositors() const override {
|
||||||
|
return QVector<CompositingType>{OpenGLCompositing};
|
||||||
|
}
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void outputBlankChanged();
|
void outputBlankChanged();
|
||||||
|
|
||||||
|
|
|
@ -85,6 +85,10 @@ public:
|
||||||
m_gbmDevice = device;
|
m_gbmDevice = device;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVector<CompositingType> supportedCompositors() const override {
|
||||||
|
return QVector<CompositingType>{OpenGLCompositing, QPainterCompositing};
|
||||||
|
}
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void sizeChanged();
|
void sizeChanged();
|
||||||
void outputGeometriesChanged(const QVector<QRect> &geometries);
|
void outputGeometriesChanged(const QVector<QRect> &geometries);
|
||||||
|
|
|
@ -653,6 +653,16 @@ void WaylandBackend::updateWindowTitle()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVector<CompositingType> WaylandBackend::supportedCompositors() const
|
||||||
|
{
|
||||||
|
#if HAVE_WAYLAND_EGL
|
||||||
|
return QVector<CompositingType>{OpenGLCompositing, QPainterCompositing};
|
||||||
|
#else
|
||||||
|
return QVector<CompositingType>{QPainterCompositing};
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // KWin
|
} // KWin
|
||||||
|
|
|
@ -148,6 +148,8 @@ public:
|
||||||
|
|
||||||
void togglePointerConfinement();
|
void togglePointerConfinement();
|
||||||
|
|
||||||
|
QVector<CompositingType> supportedCompositors() const override;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void shellSurfaceSizeChanged(const QSize &size);
|
void shellSurfaceSizeChanged(const QSize &size);
|
||||||
void systemCompositorDied();
|
void systemCompositorDied();
|
||||||
|
|
|
@ -410,4 +410,17 @@ void X11StandalonePlatform::createEffectsHandler(Compositor *compositor, Scene *
|
||||||
new EffectsHandlerImplX11(compositor, scene);
|
new EffectsHandlerImplX11(compositor, scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVector<CompositingType> X11StandalonePlatform::supportedCompositors() const
|
||||||
|
{
|
||||||
|
QVector<CompositingType> compositors;
|
||||||
|
#if HAVE_EPOXY_GLX
|
||||||
|
compositors << OpenGLCompositing;
|
||||||
|
#endif
|
||||||
|
#ifdef KWIN_HAVE_XRENDER_COMPOSITING
|
||||||
|
compositors << XRenderCompositing;
|
||||||
|
#endif
|
||||||
|
compositors << NoCompositing;
|
||||||
|
return compositors;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,6 +65,7 @@ public:
|
||||||
void invertScreen() override;
|
void invertScreen() override;
|
||||||
|
|
||||||
void createEffectsHandler(Compositor *compositor, Scene *scene) override;
|
void createEffectsHandler(Compositor *compositor, Scene *scene) override;
|
||||||
|
QVector<CompositingType> supportedCompositors() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void doHideCursor() override;
|
void doHideCursor() override;
|
||||||
|
|
|
@ -69,6 +69,10 @@ public:
|
||||||
QPainterBackend* createQPainterBackend() override;
|
QPainterBackend* createQPainterBackend() override;
|
||||||
void warpPointer(const QPointF &globalPos) override;
|
void warpPointer(const QPointF &globalPos) override;
|
||||||
|
|
||||||
|
QVector<CompositingType> supportedCompositors() const override {
|
||||||
|
return QVector<CompositingType>{OpenGLCompositing, QPainterCompositing};
|
||||||
|
}
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void sizeChanged();
|
void sizeChanged();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue