/* KWin - the KDE window manager This file is part of the KDE project. SPDX-FileCopyrightText: 2018 Roman Gilg SPDX-FileCopyrightText: 2021 Xaver Hugl SPDX-License-Identifier: GPL-2.0-or-later */ #pragma once #include "drm_abstract_output.h" #include #include namespace KWin { class SoftwareVsyncMonitor; class VirtualBackend; class DrmVirtualOutput : public DrmAbstractOutput { Q_OBJECT public: DrmVirtualOutput(DrmGpu *gpu); ~DrmVirtualOutput() override; bool present(const QSharedPointer &buffer, QRegion damagedRegion) override; QSize sourceSize() const override; bool isFormatSupported(uint32_t drmFormat) const override; QVector supportedModifiers(uint32_t drmFormat) const override; int gammaRampSize() const override { return 200; } bool setGammaRamp(const GammaRamp &gamma) override { Q_UNUSED(gamma); return true; } bool needsSoftwareTransformation() const override { return false; } private: void vblank(std::chrono::nanoseconds timestamp); void applyMode(int modeIndex) override; void updateMode(const QSize &size, uint32_t refreshRate) override; void setDpmsMode(DpmsMode mode) override; void updateEnablement(bool enable) override; QSharedPointer m_currentBuffer; bool m_pageFlipPending = true; int m_modeIndex = 0; int m_identifier; SoftwareVsyncMonitor *m_vsyncMonitor; }; }