/* KWin - the KDE window manager This file is part of the KDE project. SPDX-FileCopyrightText: 2023 Xaver Hugl SPDX-License-Identifier: GPL-2.0-or-later */ #pragma once #include "kwin_export.h" #include #include #include #include #include #include namespace KWin { struct DmaBufAttributes; class GLTexture; class KWIN_EXPORT EglDisplay { public: struct DrmFormatInfo { QList allModifiers; QList nonExternalOnlyModifiers; QList externalOnlyModifiers; }; EglDisplay(::EGLDisplay display, const QList &extensions, bool owning = true); ~EglDisplay(); QList extensions() const; ::EGLDisplay handle() const; bool hasExtension(const QByteArray &name) const; QString renderNode() const; std::optional renderDevNode() const; bool supportsBufferAge() const; bool supportsNativeFence() const; QHash> nonExternalOnlySupportedDrmFormats() const; QHash allSupportedDrmFormats() const; bool isExternalOnly(uint32_t format, uint64_t modifier) const; EGLImageKHR createImage(EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list) const; void destroyImage(EGLImageKHR image) const; EGLImageKHR importDmaBufAsImage(const DmaBufAttributes &dmabuf) const; EGLImageKHR importDmaBufAsImage(const DmaBufAttributes &dmabuf, int plane, int format, const QSize &size) const; static bool shouldUseOpenGLES(); static std::unique_ptr create(::EGLDisplay display, bool owning = true); private: QHash queryImportFormats() const; QString determineRenderNode() const; const ::EGLDisplay m_handle; const QList m_extensions; const bool m_owning; const QString m_renderNode; const std::optional m_renderDevNode; const bool m_supportsBufferAge; const bool m_supportsNativeFence; QHash m_importFormats; struct { PFNEGLCREATEIMAGEKHRPROC createImageKHR = nullptr; PFNEGLDESTROYIMAGEKHRPROC destroyImageKHR = nullptr; PFNEGLQUERYDMABUFFORMATSEXTPROC queryDmaBufFormatsEXT = nullptr; PFNEGLQUERYDMABUFMODIFIERSEXTPROC queryDmaBufModifiersEXT = nullptr; } m_functions; }; }