File indexing completed on 2025-04-20 10:57:33
0001 /* 0002 KWin - the KDE window manager 0003 This file is part of the KDE project. 0004 0005 SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org> 0006 SPDX-FileCopyrightText: 2022 Xaver Hugl <xaver.hugl@gmail.com> 0007 0008 SPDX-License-Identifier: GPL-2.0-or-later 0009 */ 0010 #pragma once 0011 0012 #include "utils/filedescriptor.h" 0013 0014 #include <QImage> 0015 #include <QSize> 0016 #include <array> 0017 #include <memory> 0018 #include <optional> 0019 0020 namespace KWin 0021 { 0022 0023 class DrmGpu; 0024 class DrmFramebuffer; 0025 0026 class DrmGpuBuffer 0027 { 0028 public: 0029 DrmGpuBuffer(DrmGpu *gpu, QSize size, uint32_t format, uint64_t modifier, const std::array<uint32_t, 4> &handles, const std::array<uint32_t, 4> &strides, const std::array<uint32_t, 4> &offsets, uint32_t planeCount); 0030 virtual ~DrmGpuBuffer() = default; 0031 0032 DrmGpu *gpu() const; 0033 uint32_t format() const; 0034 uint64_t modifier() const; 0035 QSize size() const; 0036 const std::array<FileDescriptor, 4> &fds(); 0037 std::array<uint32_t, 4> handles() const; 0038 std::array<uint32_t, 4> strides() const; 0039 std::array<uint32_t, 4> offsets() const; 0040 uint32_t planeCount() const; 0041 0042 protected: 0043 virtual void createFds(); 0044 0045 DrmGpu *const m_gpu; 0046 const QSize m_size; 0047 const uint32_t m_format; 0048 const uint64_t m_modifier; 0049 const std::array<uint32_t, 4> m_handles; 0050 const std::array<uint32_t, 4> m_strides; 0051 const std::array<uint32_t, 4> m_offsets; 0052 const uint32_t m_planeCount; 0053 std::array<FileDescriptor, 4> m_fds; 0054 }; 0055 0056 class DrmFramebuffer 0057 { 0058 public: 0059 DrmFramebuffer(const std::shared_ptr<DrmGpuBuffer> &buffer, uint32_t fbId); 0060 ~DrmFramebuffer(); 0061 0062 uint32_t framebufferId() const; 0063 /** 0064 * may be nullptr 0065 */ 0066 DrmGpuBuffer *buffer() const; 0067 0068 void releaseBuffer(); 0069 0070 static std::shared_ptr<DrmFramebuffer> createFramebuffer(const std::shared_ptr<DrmGpuBuffer> &buffer); 0071 0072 protected: 0073 const uint32_t m_framebufferId; 0074 DrmGpu *const m_gpu; 0075 std::shared_ptr<DrmGpuBuffer> m_buffer; 0076 }; 0077 0078 }