File indexing completed on 2025-04-20 10:57:34
0001 /* 0002 KWin - the KDE window manager 0003 This file is part of the KDE project. 0004 0005 SPDX-FileCopyrightText: 2022 Xaver Hugl <xaver.hugl@gmail.com> 0006 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 #pragma once 0010 #include "drm_layer.h" 0011 0012 #include "drm_dmabuf_feedback.h" 0013 #include "drm_egl_layer_surface.h" 0014 0015 #include <QMap> 0016 #include <QPointer> 0017 #include <QRegion> 0018 #include <epoxy/egl.h> 0019 #include <optional> 0020 0021 namespace KWin 0022 { 0023 0024 class EglGbmBackend; 0025 class GbmBuffer; 0026 0027 class EglGbmLayer : public DrmPipelineLayer 0028 { 0029 public: 0030 EglGbmLayer(EglGbmBackend *eglBackend, DrmPipeline *pipeline); 0031 0032 std::optional<OutputLayerBeginFrameInfo> beginFrame() override; 0033 void aboutToStartPainting(const QRegion &damagedRegion) override; 0034 bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override; 0035 bool scanout(SurfaceItem *surfaceItem) override; 0036 bool checkTestBuffer() override; 0037 std::shared_ptr<DrmFramebuffer> currentBuffer() const override; 0038 bool hasDirectScanoutBuffer() const override; 0039 QRegion currentDamage() const override; 0040 std::shared_ptr<GLTexture> texture() const override; 0041 void releaseBuffers() override; 0042 0043 private: 0044 std::shared_ptr<DrmFramebuffer> m_scanoutBuffer; 0045 QRegion m_currentDamage; 0046 0047 EglGbmLayerSurface m_surface; 0048 DmabufFeedback m_dmabufFeedback; 0049 }; 0050 0051 }