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: 2017 Roman Gilg <subdiff@gmail.com> 0006 SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org> 0007 SPDX-FileCopyrightText: 2022 Xaver Hugl <xaver.hugl@gmail.com> 0008 0009 SPDX-License-Identifier: GPL-2.0-or-later 0010 */ 0011 #pragma once 0012 0013 #include "drm_buffer.h" 0014 0015 #include <epoxy/egl.h> 0016 #include <gbm.h> 0017 0018 struct gbm_bo; 0019 0020 namespace KWaylandServer 0021 { 0022 class ClientBuffer; 0023 class LinuxDmaBufV1ClientBuffer; 0024 } 0025 0026 namespace KWin 0027 { 0028 0029 class GbmSurface; 0030 class GLTexture; 0031 0032 class GbmBuffer : public DrmGpuBuffer 0033 { 0034 public: 0035 GbmBuffer(DrmGpu *gpu, gbm_bo *bo, uint32_t flags); 0036 GbmBuffer(DrmGpu *gpu, gbm_bo *bo, const std::shared_ptr<GbmSurface> &surface); 0037 GbmBuffer(DrmGpu *gpu, gbm_bo *bo, KWaylandServer::LinuxDmaBufV1ClientBuffer *clientBuffer, uint32_t flags); 0038 ~GbmBuffer() override; 0039 0040 gbm_bo *bo() const; 0041 void *mappedData() const; 0042 KWaylandServer::ClientBuffer *clientBuffer() const; 0043 uint32_t flags() const; 0044 0045 struct Map 0046 { 0047 void *data; 0048 uint32_t stride; 0049 }; 0050 Map map(uint32_t flags); 0051 0052 static std::shared_ptr<GbmBuffer> importBuffer(DrmGpu *gpu, KWaylandServer::LinuxDmaBufV1ClientBuffer *clientBuffer); 0053 static std::shared_ptr<GbmBuffer> importBuffer(DrmGpu *gpu, GbmBuffer *buffer, uint32_t flags = GBM_BO_USE_SCANOUT); 0054 0055 private: 0056 void createFds() override; 0057 0058 gbm_bo *const m_bo; 0059 const std::shared_ptr<GbmSurface> m_surface; 0060 KWaylandServer::ClientBuffer *const m_clientBuffer = nullptr; 0061 const uint32_t m_flags; 0062 void *m_data = nullptr; 0063 void *m_mapping = nullptr; 0064 uint32_t m_mapStride = 0; 0065 }; 0066 0067 }