/* KWin - the KDE window manager This file is part of the KDE project. SPDX-FileCopyrightText: 2016 Roman Gilg SPDX-FileCopyrightText: 2022 Xaver Hugl SPDX-License-Identifier: GPL-2.0-or-later */ #pragma once #include "core/output.h" #include "drm_object.h" #include #include #include #include #include namespace KWin { class DrmFramebuffer; class DrmCrtc; class DrmPlane : public DrmObject { Q_GADGET public: DrmPlane(DrmGpu *gpu, uint32_t planeId); bool updateProperties() override; void disable(DrmAtomicCommit *commit) override; bool isCrtcSupported(int pipeIndex) const; QHash> formats() const; bool supportsTransformation(OutputTransform transform) const; std::shared_ptr currentBuffer() const; void setCurrentBuffer(const std::shared_ptr &b); void releaseCurrentBuffer(); void set(DrmAtomicCommit *commit, const QRect &src, const QRect &dst); QList recommendedSizes() const; enum class TypeIndex : uint64_t { Overlay = 0, Primary = 1, Cursor = 2 }; enum class Transformation : uint32_t { Rotate0 = 1 << 0, Rotate90 = 1 << 1, Rotate180 = 1 << 2, Rotate270 = 1 << 3, ReflectX = 1 << 4, ReflectY = 1 << 5 }; Q_ENUM(Transformation) Q_DECLARE_FLAGS(Transformations, Transformation) static Transformations outputTransformToPlaneTransform(OutputTransform transform); enum class PixelBlendMode : uint64_t { None, PreMultiplied, Coverage }; enum class ColorEncoding : uint64_t { BT601_YCbCr, BT709_YCbCr, BT2020_YCbCr }; enum class ColorRange : uint64_t { Limited_YCbCr, Full_YCbCr }; DrmEnumProperty type; DrmProperty srcX; DrmProperty srcY; DrmProperty srcW; DrmProperty srcH; DrmProperty crtcX; DrmProperty crtcY; DrmProperty crtcW; DrmProperty crtcH; DrmProperty fbId; DrmProperty crtcId; DrmEnumProperty rotation; DrmProperty inFormats; DrmProperty alpha; DrmEnumProperty pixelBlendMode; DrmEnumProperty colorEncoding; DrmEnumProperty colorRange; DrmProperty vmHotspotX; DrmProperty vmHotspotY; DrmProperty inFenceFd; DrmProperty sizeHints; private: std::shared_ptr m_current; QHash> m_supportedFormats; uint32_t m_possibleCrtcs; QList m_sizeHints; }; } Q_DECLARE_OPERATORS_FOR_FLAGS(KWin::DrmPlane::Transformations)