diff --git a/src/backends/drm/drm_egl_backend.cpp b/src/backends/drm/drm_egl_backend.cpp index df73989823..2ba5983a7c 100644 --- a/src/backends/drm/drm_egl_backend.cpp +++ b/src/backends/drm/drm_egl_backend.cpp @@ -142,6 +142,11 @@ std::unique_ptr EglGbmBackend::createSurfaceTextureWayland(Surfa return std::make_unique(this, pixmap); } +GraphicsBufferAllocator *EglGbmBackend::graphicsBufferAllocator() const +{ + return gpu()->graphicsBufferAllocator(); +} + void EglGbmBackend::present(Output *output) { static_cast(output)->present(); diff --git a/src/backends/drm/drm_egl_backend.h b/src/backends/drm/drm_egl_backend.h index 8a4c926b9c..2020ef9579 100644 --- a/src/backends/drm/drm_egl_backend.h +++ b/src/backends/drm/drm_egl_backend.h @@ -50,6 +50,8 @@ public: std::unique_ptr createSurfaceTextureInternal(SurfacePixmapInternal *pixmap) override; std::unique_ptr createSurfaceTextureWayland(SurfacePixmapWayland *pixmap) override; + GraphicsBufferAllocator *graphicsBufferAllocator() const override; + void present(Output *output) override; OutputLayer *primaryLayer(Output *output) override; OutputLayer *cursorLayer(Output *output) override; diff --git a/src/backends/drm/drm_qpainter_backend.cpp b/src/backends/drm/drm_qpainter_backend.cpp index 4d176f7679..891f94ef70 100644 --- a/src/backends/drm/drm_qpainter_backend.cpp +++ b/src/backends/drm/drm_qpainter_backend.cpp @@ -8,6 +8,7 @@ */ #include "drm_qpainter_backend.h" #include "drm_backend.h" +#include "drm_gpu.h" #include "drm_output.h" #include "drm_pipeline.h" #include "drm_qpainter_layer.h" @@ -31,6 +32,11 @@ DrmQPainterBackend::~DrmQPainterBackend() m_backend->setRenderBackend(nullptr); } +GraphicsBufferAllocator *DrmQPainterBackend::graphicsBufferAllocator() const +{ + return m_backend->primaryGpu()->graphicsBufferAllocator(); +} + void DrmQPainterBackend::present(Output *output) { static_cast(output)->present(); diff --git a/src/backends/drm/drm_qpainter_backend.h b/src/backends/drm/drm_qpainter_backend.h index 6ce543eed7..50b5017bbc 100644 --- a/src/backends/drm/drm_qpainter_backend.h +++ b/src/backends/drm/drm_qpainter_backend.h @@ -28,6 +28,8 @@ public: DrmQPainterBackend(DrmBackend *backend); ~DrmQPainterBackend(); + GraphicsBufferAllocator *graphicsBufferAllocator() const override; + void present(Output *output) override; OutputLayer *primaryLayer(Output *output) override; OutputLayer *cursorLayer(Output *output) override; diff --git a/src/backends/virtual/virtual_egl_backend.h b/src/backends/virtual/virtual_egl_backend.h index 1f1a676dbf..34a4b502bd 100644 --- a/src/backends/virtual/virtual_egl_backend.h +++ b/src/backends/virtual/virtual_egl_backend.h @@ -59,7 +59,7 @@ public: void init() override; VirtualBackend *backend() const; - GraphicsBufferAllocator *graphicsBufferAllocator() const; + GraphicsBufferAllocator *graphicsBufferAllocator() const override; private: bool initializeEgl(); diff --git a/src/backends/virtual/virtual_qpainter_backend.h b/src/backends/virtual/virtual_qpainter_backend.h index aa947d6253..e48baf0b94 100644 --- a/src/backends/virtual/virtual_qpainter_backend.h +++ b/src/backends/virtual/virtual_qpainter_backend.h @@ -50,7 +50,7 @@ public: VirtualQPainterBackend(VirtualBackend *backend); ~VirtualQPainterBackend() override; - GraphicsBufferAllocator *graphicsBufferAllocator() const; + GraphicsBufferAllocator *graphicsBufferAllocator() const override; void present(Output *output) override; VirtualQPainterLayer *primaryLayer(Output *output) override; diff --git a/src/backends/wayland/wayland_egl_backend.h b/src/backends/wayland/wayland_egl_backend.h index 9bd716e7f3..04a0107386 100644 --- a/src/backends/wayland/wayland_egl_backend.h +++ b/src/backends/wayland/wayland_egl_backend.h @@ -91,7 +91,7 @@ public: ~WaylandEglBackend() override; WaylandBackend *backend() const; - GraphicsBufferAllocator *graphicsBufferAllocator() const; + GraphicsBufferAllocator *graphicsBufferAllocator() const override; std::unique_ptr createSurfaceTextureInternal(SurfacePixmapInternal *pixmap) override; std::unique_ptr createSurfaceTextureWayland(SurfacePixmapWayland *pixmap) override; diff --git a/src/backends/wayland/wayland_qpainter_backend.h b/src/backends/wayland/wayland_qpainter_backend.h index b432a868ab..ca0ad3d457 100644 --- a/src/backends/wayland/wayland_qpainter_backend.h +++ b/src/backends/wayland/wayland_qpainter_backend.h @@ -81,7 +81,7 @@ public: explicit WaylandQPainterBackend(WaylandBackend *b); ~WaylandQPainterBackend() override; - GraphicsBufferAllocator *graphicsBufferAllocator() const; + GraphicsBufferAllocator *graphicsBufferAllocator() const override; void present(Output *output) override; OutputLayer *primaryLayer(Output *output) override; diff --git a/src/backends/x11/windowed/x11_windowed_egl_backend.h b/src/backends/x11/windowed/x11_windowed_egl_backend.h index e2cd3d5e0e..7fd942db0c 100644 --- a/src/backends/x11/windowed/x11_windowed_egl_backend.h +++ b/src/backends/x11/windowed/x11_windowed_egl_backend.h @@ -73,7 +73,7 @@ public: ~X11WindowedEglBackend() override; X11WindowedBackend *backend() const; - GraphicsBufferAllocator *graphicsBufferAllocator() const; + GraphicsBufferAllocator *graphicsBufferAllocator() const override; std::unique_ptr createSurfaceTextureInternal(SurfacePixmapInternal *pixmap) override; std::unique_ptr createSurfaceTextureWayland(SurfacePixmapWayland *pixmap) override; diff --git a/src/backends/x11/windowed/x11_windowed_qpainter_backend.h b/src/backends/x11/windowed/x11_windowed_qpainter_backend.h index aedef9a063..8af0897833 100644 --- a/src/backends/x11/windowed/x11_windowed_qpainter_backend.h +++ b/src/backends/x11/windowed/x11_windowed_qpainter_backend.h @@ -69,7 +69,7 @@ public: X11WindowedQPainterBackend(X11WindowedBackend *backend); ~X11WindowedQPainterBackend() override; - GraphicsBufferAllocator *graphicsBufferAllocator() const; + GraphicsBufferAllocator *graphicsBufferAllocator() const override; void present(Output *output) override; OutputLayer *primaryLayer(Output *output) override; diff --git a/src/core/renderbackend.cpp b/src/core/renderbackend.cpp index 8a5339b994..b7d62ce40d 100644 --- a/src/core/renderbackend.cpp +++ b/src/core/renderbackend.cpp @@ -32,6 +32,11 @@ bool RenderBackend::checkGraphicsReset() return false; } +GraphicsBufferAllocator *RenderBackend::graphicsBufferAllocator() const +{ + return nullptr; +} + bool RenderBackend::testImportBuffer(GraphicsBuffer *buffer) { return false; diff --git a/src/core/renderbackend.h b/src/core/renderbackend.h index f782e35ff0..0724bb889e 100644 --- a/src/core/renderbackend.h +++ b/src/core/renderbackend.h @@ -17,6 +17,7 @@ namespace KWin { class GraphicsBuffer; +class GraphicsBufferAllocator; class Output; class OverlayWindow; class OutputLayer; @@ -44,6 +45,8 @@ public: virtual OutputLayer *cursorLayer(Output *output); virtual void present(Output *output) = 0; + virtual GraphicsBufferAllocator *graphicsBufferAllocator() const; + virtual bool testImportBuffer(GraphicsBuffer *buffer); virtual QHash> supportedFormats() const;