backends: expose the DrmDevice instead of an allocator

wilder/Plasma/6.2
Xaver Hugl 2 years ago
parent 221c6aaf2b
commit 6a4a68dea4
  1. 4
      src/backends/drm/drm_egl_backend.cpp
  2. 2
      src/backends/drm/drm_egl_backend.h
  3. 4
      src/backends/drm/drm_qpainter_backend.cpp
  4. 2
      src/backends/drm/drm_qpainter_backend.h
  5. 6
      src/backends/virtual/virtual_egl_backend.cpp
  6. 2
      src/backends/virtual/virtual_egl_backend.h
  7. 1
      src/backends/virtual/virtual_qpainter_backend.cpp
  8. 2
      src/backends/virtual/virtual_qpainter_backend.h
  9. 8
      src/backends/wayland/wayland_egl_backend.cpp
  10. 2
      src/backends/wayland/wayland_egl_backend.h
  11. 2
      src/backends/wayland/wayland_qpainter_backend.h
  12. 6
      src/backends/x11/windowed/x11_windowed_egl_backend.cpp
  13. 2
      src/backends/x11/windowed/x11_windowed_egl_backend.h
  14. 2
      src/backends/x11/windowed/x11_windowed_qpainter_backend.cpp
  15. 2
      src/backends/x11/windowed/x11_windowed_qpainter_backend.h
  16. 2
      src/core/renderbackend.cpp
  17. 4
      src/core/renderbackend.h
  18. 2
      src/platformsupport/scenes/opengl/abstract_egl_backend.cpp
  19. 3
      src/plugins/qpa/window.cpp
  20. 5
      src/plugins/screencast/screencaststream.cpp

@ -137,9 +137,9 @@ std::unique_ptr<SurfaceTexture> EglGbmBackend::createSurfaceTextureWayland(Surfa
return std::make_unique<BasicEGLSurfaceTextureWayland>(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<OutputFrame> &frame)

@ -44,7 +44,7 @@ public:
std::unique_ptr<SurfaceTexture> createSurfaceTextureWayland(SurfacePixmap *pixmap) override;
GraphicsBufferAllocator *graphicsBufferAllocator() const override;
DrmDevice *drmDevice() const override;
void present(Output *output, const std::shared_ptr<OutputFrame> &frame) override;
OutputLayer *primaryLayer(Output *output) override;

@ -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<OutputFrame> &frame)

@ -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<OutputFrame> &frame) override;
OutputLayer *primaryLayer(Output *output) override;

@ -40,7 +40,7 @@ std::optional<OutputLayerBeginFrameInfo> 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()

@ -61,7 +61,7 @@ public:
void init() override;
VirtualBackend *backend() const;
GraphicsBufferAllocator *graphicsBufferAllocator() const override;
DrmDevice *drmDevice() const override;
private:
bool initializeEgl();

@ -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"

@ -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<OutputFrame> &frame) override;
VirtualQPainterLayer *primaryLayer(Output *output) override;

@ -80,7 +80,7 @@ std::optional<OutputLayerBeginFrameInfo> 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<OutputLayerBeginFrameInfo> 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()

@ -99,7 +99,7 @@ public:
~WaylandEglBackend() override;
WaylandBackend *backend() const;
GraphicsBufferAllocator *graphicsBufferAllocator() const override;
DrmDevice *drmDevice() const override;
std::unique_ptr<SurfaceTexture> createSurfaceTextureWayland(SurfacePixmap *pixmap) override;

@ -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<OutputFrame> &frame) override;
OutputLayer *primaryLayer(Output *output) override;

@ -44,7 +44,7 @@ std::optional<OutputLayerBeginFrameInfo> 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()

@ -75,7 +75,7 @@ public:
~X11WindowedEglBackend() override;
X11WindowedBackend *backend() const;
GraphicsBufferAllocator *graphicsBufferAllocator() const override;
DrmDevice *drmDevice() const override;
std::unique_ptr<SurfaceTexture> createSurfaceTextureWayland(SurfacePixmap *pixmap) override;
std::pair<std::shared_ptr<GLTexture>, ColorDescription> textureForOutput(Output *output) const override;

@ -36,7 +36,7 @@ std::optional<OutputLayerBeginFrameInfo> X11WindowedQPainterPrimaryLayer::beginF
{
const QSize bufferSize = m_output->modeSize();
if (!m_swapchain || m_swapchain->size() != bufferSize) {
m_swapchain = std::make_unique<QPainterSwapchain>(m_backend->graphicsBufferAllocator(), bufferSize, m_output->backend()->driFormatForDepth(m_output->depth()));
m_swapchain = std::make_unique<QPainterSwapchain>(m_backend->drmDevice()->allocator(), bufferSize, m_output->backend()->driFormatForDepth(m_output->depth()));
}
m_current = m_swapchain->acquire();

@ -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<OutputFrame> &frame) override;
OutputLayer *primaryLayer(Output *output) override;

@ -78,7 +78,7 @@ bool RenderBackend::checkGraphicsReset()
return false;
}
GraphicsBufferAllocator *RenderBackend::graphicsBufferAllocator() const
DrmDevice *RenderBackend::drmDevice() const
{
return nullptr;
}

@ -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<OutputFrame> &frame) = 0;
virtual GraphicsBufferAllocator *graphicsBufferAllocator() const;
virtual DrmDevice *drmDevice() const;
virtual bool testImportBuffer(GraphicsBuffer *buffer);
virtual QHash<uint32_t, QList<uint64_t>> supportedFormats() const;

@ -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 {

@ -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<uint32_t, QList<uint64_t>> &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++) {

@ -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<ScreenCastDmaBufTextureParams> 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<ScreenCastDmaBufTexture> 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},

Loading…
Cancel
Save