File indexing completed on 2025-07-06 10:47:34

0001 /*
0002     KWin - the KDE window manager
0003     This file is part of the KDE project.
0004 
0005     SPDX-FileCopyrightText: 2018 Roman Gilg <subdiff@gmail.com>
0006     SPDX-FileCopyrightText: 2021 Xaver Hugl <xaver.hugl@gmail.com>
0007 
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 #pragma once
0011 
0012 #include "drm_abstract_output.h"
0013 
0014 #include <QObject>
0015 #include <QRect>
0016 
0017 namespace KWin
0018 {
0019 
0020 class SoftwareVsyncMonitor;
0021 class VirtualBackend;
0022 class DrmPipelineLayer;
0023 
0024 class DrmVirtualOutput : public DrmAbstractOutput
0025 {
0026     Q_OBJECT
0027 
0028 public:
0029     DrmVirtualOutput(const QString &name, DrmGpu *gpu, const QSize &size, qreal scale);
0030     ~DrmVirtualOutput() override;
0031 
0032     bool present() override;
0033     DrmOutputLayer *primaryLayer() const override;
0034     void recreateSurface();
0035 
0036 private:
0037     void vblank(std::chrono::nanoseconds timestamp);
0038     void setDpmsMode(DpmsMode mode) override;
0039 
0040     std::shared_ptr<DrmOutputLayer> m_layer;
0041     bool m_pageFlipPending = true;
0042 
0043     std::unique_ptr<SoftwareVsyncMonitor> m_vsyncMonitor;
0044 };
0045 
0046 }