kwin/src/plugins/platforms/drm/abstract_egl_drm_backend.h
Xaver Hugl 7de0f1f2ad platforms/drm: CPU copy for multi-gpu
Not all GPUs can scan out linear buffers, so if import with a dmabuf
fails manually copy the data into a non-linear gbm buffer instead.

BUG: 432707
2021-05-18 14:54:05 +02:00

70 lines
1.6 KiB
C++

/*
* KWin - the KDE window manager
* This file is part of the KDE project.
*
* SPDX-FileCopyrightText: 2020 Xaver Hugl <xaver.hugl@gmail.com>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef KWIN_ABSTRACTEGLDRMBACKEND_H
#define KWIN_ABSTRACTEGLDRMBACKEND_H
#include "abstract_egl_backend.h"
namespace KWin
{
class DrmBackend;
class DrmGpu;
class DrmOutput;
class AbstractEglDrmBackend : public AbstractEglBackend
{
public:
void screenGeometryChanged(const QSize &size) override;
virtual int screenCount() const = 0;
virtual void addOutput(DrmOutput *output) = 0;
virtual void removeOutput(DrmOutput *output) = 0;
virtual bool swapBuffers(DrmOutput *output) {
Q_UNUSED(output)
return false;
}
virtual bool exportFramebuffer(DrmOutput *output, void *data, const QSize &size, uint32_t stride) {
Q_UNUSED(output)
Q_UNUSED(data)
Q_UNUSED(size)
Q_UNUSED(stride)
return false;
}
virtual int exportFramebufferAsDmabuf(DrmOutput *output, uint32_t *format, uint32_t *stride) {
Q_UNUSED(output)
Q_UNUSED(format)
Q_UNUSED(stride)
return 0;
}
virtual QRegion beginFrameForSecondaryGpu(DrmOutput *output) {
Q_UNUSED(output)
return QRegion();
}
DrmGpu *gpu() const {
return m_gpu;
}
static AbstractEglDrmBackend *renderingBackend() {
return static_cast<AbstractEglDrmBackend*>(primaryBackend());
}
protected:
AbstractEglDrmBackend(DrmBackend *drmBackend, DrmGpu *gpu);
DrmBackend *m_backend;
DrmGpu *m_gpu;
};
}
#endif // KWIN_ABSTRACTEGLDRMBACKEND_H