KWin
Loading...
Searching...
No Matches
drm_plane.h
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2016 Roman Gilg <subdiff@gmail.com>
6 SPDX-FileCopyrightText: 2022 Xaver Hugl <xaver.hugl@gmail.com>
7
8 SPDX-License-Identifier: GPL-2.0-or-later
9*/
10#pragma once
11
12#include "drm_object.h"
13
14#include <QMap>
15#include <QPoint>
16#include <QSize>
17#include <memory>
18#include <qobjectdefs.h>
19
20namespace KWin
21{
22
23class DrmFramebuffer;
24class DrmCrtc;
25
26class DrmPlane : public DrmObject
27{
28 Q_GADGET
29public:
30 DrmPlane(DrmGpu *gpu, uint32_t planeId);
31
32 bool updateProperties() override;
33 void disable(DrmAtomicCommit *commit) override;
34
35 bool isCrtcSupported(int pipeIndex) const;
36 QMap<uint32_t, QList<uint64_t>> formats() const;
37
38 std::shared_ptr<DrmFramebuffer> currentBuffer() const;
39 void setCurrentBuffer(const std::shared_ptr<DrmFramebuffer> &b);
41
42 void set(DrmAtomicCommit *commit, const QPoint &srcPos, const QSize &srcSize, const QRect &dst);
43
44 enum class TypeIndex : uint64_t {
45 Overlay = 0,
46 Primary = 1,
47 Cursor = 2
48 };
49 enum class Transformation : uint32_t {
50 Rotate0 = 1 << 0,
51 Rotate90 = 1 << 1,
52 Rotate180 = 1 << 2,
53 Rotate270 = 1 << 3,
54 ReflectX = 1 << 4,
55 ReflectY = 1 << 5
56 };
57 Q_ENUM(Transformation)
58 Q_DECLARE_FLAGS(Transformations, Transformation)
59 enum class PixelBlendMode : uint64_t {
60 None,
63 };
64 enum class ColorEncoding : uint64_t {
68 };
69 enum class ColorRange : uint64_t {
72 };
73
94
95 static int32_t transformationToDegrees(Transformations transformation);
96
97private:
98 std::shared_ptr<DrmFramebuffer> m_current;
99
100 QMap<uint32_t, QList<uint64_t>> m_supportedFormats;
101 uint32_t m_possibleCrtcs;
102};
103
104}
105
106Q_DECLARE_OPERATORS_FOR_FLAGS(KWin::DrmPlane::Transformations)
Replacement for QCursor.
Definition cursor.h:102
DrmGpu * gpu() const
DrmEnumProperty< TypeIndex > type
Definition drm_plane.h:74
DrmProperty vmHotspotX
Definition drm_plane.h:91
DrmEnumProperty< Transformations > rotation
Definition drm_plane.h:85
DrmProperty inFenceFd
Definition drm_plane.h:93
void setCurrentBuffer(const std::shared_ptr< DrmFramebuffer > &b)
DrmProperty inFormats
Definition drm_plane.h:86
DrmProperty srcY
Definition drm_plane.h:76
void disable(DrmAtomicCommit *commit) override
DrmProperty crtcX
Definition drm_plane.h:79
DrmProperty alpha
Definition drm_plane.h:87
DrmProperty crtcW
Definition drm_plane.h:81
DrmProperty srcW
Definition drm_plane.h:77
DrmEnumProperty< ColorRange > colorRange
Definition drm_plane.h:90
DrmProperty fbId
Definition drm_plane.h:83
DrmEnumProperty< PixelBlendMode > pixelBlendMode
Definition drm_plane.h:88
DrmProperty srcH
Definition drm_plane.h:78
DrmProperty srcX
Definition drm_plane.h:75
QMap< uint32_t, QList< uint64_t > > formats() const
std::shared_ptr< DrmFramebuffer > currentBuffer() const
bool updateProperties() override
Definition drm_plane.cpp:72
DrmEnumProperty< ColorEncoding > colorEncoding
Definition drm_plane.h:89
void set(DrmAtomicCommit *commit, const QPoint &srcPos, const QSize &srcSize, const QRect &dst)
DrmProperty vmHotspotY
Definition drm_plane.h:92
DrmProperty crtcId
Definition drm_plane.h:84
DrmPlane(DrmGpu *gpu, uint32_t planeId)
Definition drm_plane.cpp:25
DrmProperty crtcH
Definition drm_plane.h:82
void releaseCurrentBuffer()
bool isCrtcSupported(int pipeIndex) const
DrmProperty crtcY
Definition drm_plane.h:80
static int32_t transformationToDegrees(Transformations transformation)