From 6a4a68dea484568b46456f720583f78b95327d08 Mon Sep 17 00:00:00 2001 From: Xaver Hugl Date: Thu, 21 Mar 2024 16:36:54 +0100 Subject: [PATCH] backends: expose the DrmDevice instead of an allocator --- src/backends/drm/drm_egl_backend.cpp | 4 ++-- src/backends/drm/drm_egl_backend.h | 2 +- src/backends/drm/drm_qpainter_backend.cpp | 4 ++-- src/backends/drm/drm_qpainter_backend.h | 2 +- src/backends/virtual/virtual_egl_backend.cpp | 6 +++--- src/backends/virtual/virtual_egl_backend.h | 2 +- src/backends/virtual/virtual_qpainter_backend.cpp | 1 + src/backends/virtual/virtual_qpainter_backend.h | 2 +- src/backends/wayland/wayland_egl_backend.cpp | 8 ++++---- src/backends/wayland/wayland_egl_backend.h | 2 +- src/backends/wayland/wayland_qpainter_backend.h | 2 +- src/backends/x11/windowed/x11_windowed_egl_backend.cpp | 6 +++--- src/backends/x11/windowed/x11_windowed_egl_backend.h | 2 +- .../x11/windowed/x11_windowed_qpainter_backend.cpp | 2 +- src/backends/x11/windowed/x11_windowed_qpainter_backend.h | 2 +- src/core/renderbackend.cpp | 2 +- src/core/renderbackend.h | 4 ++-- .../scenes/opengl/abstract_egl_backend.cpp | 2 +- src/plugins/qpa/window.cpp | 3 ++- src/plugins/screencast/screencaststream.cpp | 5 +++-- 20 files changed, 33 insertions(+), 30 deletions(-) diff --git a/src/backends/drm/drm_egl_backend.cpp b/src/backends/drm/drm_egl_backend.cpp index ebaa73c0fc..c11245dfcd 100644 --- a/src/backends/drm/drm_egl_backend.cpp +++ b/src/backends/drm/drm_egl_backend.cpp @@ -137,9 +137,9 @@ std::unique_ptr EglGbmBackend::createSurfaceTextureWayland(Surfa return std::make_unique(this, pixmap); } -GraphicsBufferAllocator *EglGbmBackend::graphicsBufferAllocator() const +DrmDevice *EglGbmBackend::drmDevice() const { - return gpu()->drmDevice()->allocator(); + return gpu()->drmDevice(); } void EglGbmBackend::present(Output *output, const std::shared_ptr &frame) diff --git a/src/backends/drm/drm_egl_backend.h b/src/backends/drm/drm_egl_backend.h index 32132f50bf..a440a60686 100644 --- a/src/backends/drm/drm_egl_backend.h +++ b/src/backends/drm/drm_egl_backend.h @@ -44,7 +44,7 @@ public: std::unique_ptr createSurfaceTextureWayland(SurfacePixmap *pixmap) override; - GraphicsBufferAllocator *graphicsBufferAllocator() const override; + DrmDevice *drmDevice() const override; void present(Output *output, const std::shared_ptr &frame) override; OutputLayer *primaryLayer(Output *output) override; diff --git a/src/backends/drm/drm_qpainter_backend.cpp b/src/backends/drm/drm_qpainter_backend.cpp index 386aef404c..2830e289cf 100644 --- a/src/backends/drm/drm_qpainter_backend.cpp +++ b/src/backends/drm/drm_qpainter_backend.cpp @@ -32,9 +32,9 @@ DrmQPainterBackend::~DrmQPainterBackend() m_backend->setRenderBackend(nullptr); } -GraphicsBufferAllocator *DrmQPainterBackend::graphicsBufferAllocator() const +DrmDevice *DrmQPainterBackend::drmDevice() const { - return m_backend->primaryGpu()->drmDevice()->allocator(); + return m_backend->primaryGpu()->drmDevice(); } void DrmQPainterBackend::present(Output *output, const std::shared_ptr &frame) diff --git a/src/backends/drm/drm_qpainter_backend.h b/src/backends/drm/drm_qpainter_backend.h index 6f90d041b5..bb19dc0875 100644 --- a/src/backends/drm/drm_qpainter_backend.h +++ b/src/backends/drm/drm_qpainter_backend.h @@ -28,7 +28,7 @@ public: DrmQPainterBackend(DrmBackend *backend); ~DrmQPainterBackend(); - GraphicsBufferAllocator *graphicsBufferAllocator() const override; + DrmDevice *drmDevice() const override; void present(Output *output, const std::shared_ptr &frame) override; OutputLayer *primaryLayer(Output *output) override; diff --git a/src/backends/virtual/virtual_egl_backend.cpp b/src/backends/virtual/virtual_egl_backend.cpp index f663b2d7b6..41bde6f9db 100644 --- a/src/backends/virtual/virtual_egl_backend.cpp +++ b/src/backends/virtual/virtual_egl_backend.cpp @@ -40,7 +40,7 @@ std::optional VirtualEglLayer::beginFrame() const QSize nativeSize = m_output->modeSize(); if (!m_swapchain || m_swapchain->size() != nativeSize) { - m_swapchain = EglSwapchain::create(m_backend->graphicsBufferAllocator(), m_backend->openglContext(), nativeSize, DRM_FORMAT_XRGB8888, {DRM_FORMAT_MOD_INVALID}); + m_swapchain = EglSwapchain::create(m_backend->drmDevice()->allocator(), m_backend->openglContext(), nativeSize, DRM_FORMAT_XRGB8888, {DRM_FORMAT_MOD_INVALID}); if (!m_swapchain) { return std::nullopt; } @@ -97,9 +97,9 @@ VirtualBackend *VirtualEglBackend::backend() const return m_backend; } -GraphicsBufferAllocator *VirtualEglBackend::graphicsBufferAllocator() const +DrmDevice *VirtualEglBackend::drmDevice() const { - return m_backend->drmDevice()->allocator(); + return m_backend->drmDevice(); } bool VirtualEglBackend::initializeEgl() diff --git a/src/backends/virtual/virtual_egl_backend.h b/src/backends/virtual/virtual_egl_backend.h index 038babdcfa..e8a33af2e0 100644 --- a/src/backends/virtual/virtual_egl_backend.h +++ b/src/backends/virtual/virtual_egl_backend.h @@ -61,7 +61,7 @@ public: void init() override; VirtualBackend *backend() const; - GraphicsBufferAllocator *graphicsBufferAllocator() const override; + DrmDevice *drmDevice() const override; private: bool initializeEgl(); diff --git a/src/backends/virtual/virtual_qpainter_backend.cpp b/src/backends/virtual/virtual_qpainter_backend.cpp index c79c301665..790fbdb4d6 100644 --- a/src/backends/virtual/virtual_qpainter_backend.cpp +++ b/src/backends/virtual/virtual_qpainter_backend.cpp @@ -7,6 +7,7 @@ SPDX-License-Identifier: GPL-2.0-or-later */ #include "virtual_qpainter_backend.h" +#include "core/drmdevice.h" #include "core/graphicsbufferview.h" #include "core/shmgraphicsbufferallocator.h" #include "platformsupport/scenes/qpainter/qpainterswapchain.h" diff --git a/src/backends/virtual/virtual_qpainter_backend.h b/src/backends/virtual/virtual_qpainter_backend.h index d4d6eee724..8edf221b05 100644 --- a/src/backends/virtual/virtual_qpainter_backend.h +++ b/src/backends/virtual/virtual_qpainter_backend.h @@ -53,7 +53,7 @@ public: VirtualQPainterBackend(VirtualBackend *backend); ~VirtualQPainterBackend() override; - GraphicsBufferAllocator *graphicsBufferAllocator() const override; + GraphicsBufferAllocator *graphicsBufferAllocator() const; void present(Output *output, const std::shared_ptr &frame) override; VirtualQPainterLayer *primaryLayer(Output *output) override; diff --git a/src/backends/wayland/wayland_egl_backend.cpp b/src/backends/wayland/wayland_egl_backend.cpp index 133b9ec5ce..4a84138e53 100644 --- a/src/backends/wayland/wayland_egl_backend.cpp +++ b/src/backends/wayland/wayland_egl_backend.cpp @@ -80,7 +80,7 @@ std::optional WaylandEglPrimaryLayer::beginFrame() qCWarning(KWIN_WAYLAND_BACKEND) << "Could not find a suitable render format"; return std::nullopt; } - m_swapchain = EglSwapchain::create(m_backend->graphicsBufferAllocator(), m_backend->openglContext(), nativeSize, format, modifiers); + m_swapchain = EglSwapchain::create(m_backend->drmDevice()->allocator(), m_backend->openglContext(), nativeSize, format, modifiers); if (!m_swapchain) { return std::nullopt; } @@ -184,7 +184,7 @@ std::optional WaylandEglCursorLayer::beginFrame() qCWarning(KWIN_WAYLAND_BACKEND) << "Could not find a suitable render format"; return std::nullopt; } - m_swapchain = EglSwapchain::create(m_backend->graphicsBufferAllocator(), m_backend->openglContext(), bufferSize, format, modifiers); + m_swapchain = EglSwapchain::create(m_backend->drmDevice()->allocator(), m_backend->openglContext(), bufferSize, format, modifiers); if (!m_swapchain) { return std::nullopt; } @@ -249,9 +249,9 @@ WaylandBackend *WaylandEglBackend::backend() const return m_backend; } -GraphicsBufferAllocator *WaylandEglBackend::graphicsBufferAllocator() const +DrmDevice *WaylandEglBackend::drmDevice() const { - return m_backend->drmDevice()->allocator(); + return m_backend->drmDevice(); } void WaylandEglBackend::cleanupSurfaces() diff --git a/src/backends/wayland/wayland_egl_backend.h b/src/backends/wayland/wayland_egl_backend.h index fa2e89bea6..bb5498484a 100644 --- a/src/backends/wayland/wayland_egl_backend.h +++ b/src/backends/wayland/wayland_egl_backend.h @@ -99,7 +99,7 @@ public: ~WaylandEglBackend() override; WaylandBackend *backend() const; - GraphicsBufferAllocator *graphicsBufferAllocator() const override; + DrmDevice *drmDevice() const override; std::unique_ptr createSurfaceTextureWayland(SurfacePixmap *pixmap) override; diff --git a/src/backends/wayland/wayland_qpainter_backend.h b/src/backends/wayland/wayland_qpainter_backend.h index fa347dcd84..0f1b938c70 100644 --- a/src/backends/wayland/wayland_qpainter_backend.h +++ b/src/backends/wayland/wayland_qpainter_backend.h @@ -86,7 +86,7 @@ public: explicit WaylandQPainterBackend(WaylandBackend *b); ~WaylandQPainterBackend() override; - GraphicsBufferAllocator *graphicsBufferAllocator() const override; + GraphicsBufferAllocator *graphicsBufferAllocator() const; void present(Output *output, const std::shared_ptr &frame) override; OutputLayer *primaryLayer(Output *output) override; diff --git a/src/backends/x11/windowed/x11_windowed_egl_backend.cpp b/src/backends/x11/windowed/x11_windowed_egl_backend.cpp index 9f38861be7..24c7ba3725 100644 --- a/src/backends/x11/windowed/x11_windowed_egl_backend.cpp +++ b/src/backends/x11/windowed/x11_windowed_egl_backend.cpp @@ -44,7 +44,7 @@ std::optional X11WindowedEglPrimaryLayer::beginFrame( if (!formatTable.contains(format)) { return std::nullopt; } - m_swapchain = EglSwapchain::create(m_backend->graphicsBufferAllocator(), m_backend->openglContext(), bufferSize, format, formatTable[format]); + m_swapchain = EglSwapchain::create(m_backend->drmDevice()->allocator(), m_backend->openglContext(), bufferSize, format, formatTable[format]); if (!m_swapchain) { return std::nullopt; } @@ -193,9 +193,9 @@ X11WindowedBackend *X11WindowedEglBackend::backend() const return m_backend; } -GraphicsBufferAllocator *X11WindowedEglBackend::graphicsBufferAllocator() const +DrmDevice *X11WindowedEglBackend::drmDevice() const { - return m_backend->drmDevice()->allocator(); + return m_backend->drmDevice(); } bool X11WindowedEglBackend::initializeEgl() diff --git a/src/backends/x11/windowed/x11_windowed_egl_backend.h b/src/backends/x11/windowed/x11_windowed_egl_backend.h index 304d24ec0d..88e3bd70a2 100644 --- a/src/backends/x11/windowed/x11_windowed_egl_backend.h +++ b/src/backends/x11/windowed/x11_windowed_egl_backend.h @@ -75,7 +75,7 @@ public: ~X11WindowedEglBackend() override; X11WindowedBackend *backend() const; - GraphicsBufferAllocator *graphicsBufferAllocator() const override; + DrmDevice *drmDevice() const override; std::unique_ptr createSurfaceTextureWayland(SurfacePixmap *pixmap) override; std::pair, ColorDescription> textureForOutput(Output *output) const override; diff --git a/src/backends/x11/windowed/x11_windowed_qpainter_backend.cpp b/src/backends/x11/windowed/x11_windowed_qpainter_backend.cpp index efc3565386..c1ef98ee59 100644 --- a/src/backends/x11/windowed/x11_windowed_qpainter_backend.cpp +++ b/src/backends/x11/windowed/x11_windowed_qpainter_backend.cpp @@ -36,7 +36,7 @@ std::optional X11WindowedQPainterPrimaryLayer::beginF { const QSize bufferSize = m_output->modeSize(); if (!m_swapchain || m_swapchain->size() != bufferSize) { - m_swapchain = std::make_unique(m_backend->graphicsBufferAllocator(), bufferSize, m_output->backend()->driFormatForDepth(m_output->depth())); + m_swapchain = std::make_unique(m_backend->drmDevice()->allocator(), bufferSize, m_output->backend()->driFormatForDepth(m_output->depth())); } m_current = m_swapchain->acquire(); diff --git a/src/backends/x11/windowed/x11_windowed_qpainter_backend.h b/src/backends/x11/windowed/x11_windowed_qpainter_backend.h index 2b23b323e8..55cf94021a 100644 --- a/src/backends/x11/windowed/x11_windowed_qpainter_backend.h +++ b/src/backends/x11/windowed/x11_windowed_qpainter_backend.h @@ -74,7 +74,7 @@ public: X11WindowedQPainterBackend(X11WindowedBackend *backend); ~X11WindowedQPainterBackend() override; - GraphicsBufferAllocator *graphicsBufferAllocator() const override; + GraphicsBufferAllocator *graphicsBufferAllocator() const; void present(Output *output, const std::shared_ptr &frame) override; OutputLayer *primaryLayer(Output *output) override; diff --git a/src/core/renderbackend.cpp b/src/core/renderbackend.cpp index 98276385ce..d501faea03 100644 --- a/src/core/renderbackend.cpp +++ b/src/core/renderbackend.cpp @@ -78,7 +78,7 @@ bool RenderBackend::checkGraphicsReset() return false; } -GraphicsBufferAllocator *RenderBackend::graphicsBufferAllocator() const +DrmDevice *RenderBackend::drmDevice() const { return nullptr; } diff --git a/src/core/renderbackend.h b/src/core/renderbackend.h index b902a28984..780609d62c 100644 --- a/src/core/renderbackend.h +++ b/src/core/renderbackend.h @@ -17,7 +17,6 @@ namespace KWin { class GraphicsBuffer; -class GraphicsBufferAllocator; class Output; class OverlayWindow; class OutputLayer; @@ -26,6 +25,7 @@ class SurfacePixmapX11; class SurfaceTexture; class PresentationFeedback; class RenderLoop; +class DrmDevice; class PresentationFeedback { @@ -81,7 +81,7 @@ public: virtual OutputLayer *cursorLayer(Output *output); virtual void present(Output *output, const std::shared_ptr &frame) = 0; - virtual GraphicsBufferAllocator *graphicsBufferAllocator() const; + virtual DrmDevice *drmDevice() const; virtual bool testImportBuffer(GraphicsBuffer *buffer); virtual QHash> supportedFormats() const; diff --git a/src/platformsupport/scenes/opengl/abstract_egl_backend.cpp b/src/platformsupport/scenes/opengl/abstract_egl_backend.cpp index 35c8755001..6a77ac3442 100644 --- a/src/platformsupport/scenes/opengl/abstract_egl_backend.cpp +++ b/src/platformsupport/scenes/opengl/abstract_egl_backend.cpp @@ -113,7 +113,7 @@ void AbstractEglBackend::initWayland() if (m_deviceId) { QString renderNode = m_display->renderNode(); if (renderNode.isEmpty()) { - drmDevice *device = nullptr; + ::drmDevice *device = nullptr; if (drmGetDeviceFromDevId(deviceId(), 0, &device) != 0) { qCWarning(KWIN_OPENGL) << "drmGetDeviceFromDevId() failed:" << strerror(errno); } else { diff --git a/src/plugins/qpa/window.cpp b/src/plugins/qpa/window.cpp index 2f7ec53cac..114c52302a 100644 --- a/src/plugins/qpa/window.cpp +++ b/src/plugins/qpa/window.cpp @@ -12,6 +12,7 @@ #include "utils/drm_format_helper.h" #include "compositor.h" +#include "core/drmdevice.h" #include "core/renderbackend.h" #include "core/shmgraphicsbufferallocator.h" #include "internalwindow.h" @@ -55,7 +56,7 @@ Swapchain *Window::swapchain(const QHash> &formats) static ShmGraphicsBufferAllocator shmAllocator; allocator = &shmAllocator; } else { - allocator = Compositor::self()->backend()->graphicsBufferAllocator(); + allocator = Compositor::self()->backend()->drmDevice()->allocator(); } for (auto it = formats.begin(); it != formats.end(); it++) { diff --git a/src/plugins/screencast/screencaststream.cpp b/src/plugins/screencast/screencaststream.cpp index e6de39f49a..b1fcb3ebfa 100644 --- a/src/plugins/screencast/screencaststream.cpp +++ b/src/plugins/screencast/screencaststream.cpp @@ -8,6 +8,7 @@ #include "screencaststream.h" #include "compositor.h" +#include "core/drmdevice.h" #include "core/graphicsbufferallocator.h" #include "core/outputbackend.h" #include "core/renderbackend.h" @@ -850,7 +851,7 @@ std::optional ScreenCastStream::testCreateDmaBuf( return std::nullopt; } - GraphicsBuffer *buffer = backend->graphicsBufferAllocator()->allocate(GraphicsBufferOptions{ + GraphicsBuffer *buffer = backend->drmDevice()->allocator()->allocate(GraphicsBufferOptions{ .size = size, .format = format, .modifiers = modifiers, @@ -883,7 +884,7 @@ std::shared_ptr ScreenCastStream::createDmaBufTexture(c return nullptr; } - GraphicsBuffer *buffer = backend->graphicsBufferAllocator()->allocate(GraphicsBufferOptions{ + GraphicsBuffer *buffer = backend->drmDevice()->allocator()->allocate(GraphicsBufferOptions{ .size = QSize(params.width, params.height), .format = params.format, .modifiers = {params.modifier},