7de0f1f2ad
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
70 lines
1.6 KiB
C++
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
|