KWin
Loading...
Searching...
No Matches
drm_connector.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: 2021 Xaver Hugl <xaver.hugl@gmail.com>
7
8 SPDX-License-Identifier: GPL-2.0-or-later
9*/
10#pragma once
11
12#include <QPoint>
13#include <QSize>
14
15#include <QSize>
16
17#include "core/output.h"
18#include "drm_blob.h"
19#include "drm_object.h"
20#include "drm_pointer.h"
21#include "utils/edid.h"
22
23namespace KWin
24{
25
26class DrmPipeline;
27class DrmConnector;
28class DrmCrtc;
29
34{
35public:
36 DrmConnectorMode(DrmConnector *connector, drmModeModeInfo nativeMode, Flags additionalFlags);
37
38 drmModeModeInfo *nativeMode();
39 std::shared_ptr<DrmBlob> blob();
40 std::chrono::nanoseconds vblankTime() const;
41
42 bool operator==(const DrmConnectorMode &otherMode);
43 bool operator==(const drmModeModeInfo &otherMode);
44
45private:
46 DrmConnector *m_connector;
47 drmModeModeInfo m_nativeMode;
48 std::shared_ptr<DrmBlob> m_blob;
49};
50
51class DrmConnector : public DrmObject
52{
53public:
54 DrmConnector(DrmGpu *gpu, uint32_t connectorId);
55
56 bool updateProperties() override;
57 void disable(DrmAtomicCommit *commit) override;
58
59 bool isCrtcSupported(DrmCrtc *crtc) const;
60 bool isConnected() const;
61 bool isNonDesktop() const;
62 bool isInternal() const;
63 DrmPipeline *pipeline() const;
64
65 const Edid *edid() const;
66 QString connectorName() const;
67 QString modelName() const;
68 QSize physicalSize() const;
72 QByteArray mstPath() const;
73
74 QList<std::shared_ptr<DrmConnectorMode>> modes() const;
75 std::shared_ptr<DrmConnectorMode> findMode(const drmModeModeInfo &modeInfo) const;
76
78
79 enum class UnderscanOptions : uint64_t {
80 Off = 0,
81 On = 1,
82 Auto = 2,
83 };
84 enum class BroadcastRgbOptions : uint64_t {
85 Automatic = 0,
86 Full = 1,
87 Limited = 2
88 };
89 enum class LinkStatus : uint64_t {
90 Good = 0,
91 Bad = 1
92 };
93 enum class DrmContentType : uint64_t {
94 None = 0,
95 Graphics = 1,
96 Photo = 2,
97 Cinema = 3,
98 Game = 4
99 };
100 enum class PanelOrientation : uint64_t {
101 Normal = 0,
102 UpsideDown = 1,
103 LeftUp = 2,
104 RightUp = 3
105 };
106 enum class ScalingMode : uint64_t {
107 None = 0,
108 Full = 1,
109 Center = 2,
110 Full_Aspect = 3
111 };
112 enum class Colorspace : uint64_t {
113 Default,
114 BT709_YCC,
115 opRGB,
118 };
119
138
143
144private:
145 QList<std::shared_ptr<DrmConnectorMode>> generateCommonModes();
146 std::shared_ptr<DrmConnectorMode> generateMode(const QSize &size, float refreshRate);
147
149 std::unique_ptr<DrmPipeline> m_pipeline;
150 Edid m_edid;
151 QSize m_physicalSize = QSize(-1, -1);
152 QList<std::shared_ptr<DrmConnectorMode>> m_driverModes;
153 QList<std::shared_ptr<DrmConnectorMode>> m_modes;
154 uint32_t m_possibleCrtcs = 0;
155 QByteArray m_mstPath;
156
157 friend QDebug &operator<<(QDebug &s, const KWin::DrmConnector *obj);
158};
159
160QDebug &operator<<(QDebug &s, const KWin::DrmConnector *obj);
161
162}
static DrmContentType kwinToDrmContentType(ContentType type)
DrmEnumProperty< BroadcastRgbOptions > broadcastRGB
DrmProperty underscanHBorder
bool isNonDesktop() const
Output::SubPixel subpixel() const
DrmConnector(DrmGpu *gpu, uint32_t connectorId)
static BroadcastRgbOptions rgbRangeToBroadcastRgb(Output::RgbRange rgbRange)
DrmEnumProperty< DrmContentType > contentType
DrmEnumProperty< LinkStatus > linkStatus
static Output::RgbRange broadcastRgbToRgbRange(BroadcastRgbOptions rgbRange)
std::shared_ptr< DrmConnectorMode > findMode(const drmModeModeInfo &modeInfo) const
bool isConnected() const
QByteArray mstPath() const
DrmEnumProperty< ScalingMode > scalingMode
void disable(DrmAtomicCommit *commit) override
friend QDebug & operator<<(QDebug &s, const KWin::DrmConnector *obj)
DrmProperty nonDesktop
QString connectorName() const
bool isCrtcSupported(DrmCrtc *crtc) const
DrmProperty vrrCapable
bool updateProperties() override
QSize physicalSize() const
DrmPipeline * pipeline() const
const Edid * edid() const
bool isInternal() const
DrmProperty hdrMetadata
static OutputTransform toKWinTransform(PanelOrientation orientation)
QString modelName() const
DrmEnumProperty< Colorspace > colorspace
QList< std::shared_ptr< DrmConnectorMode > > modes() const
DrmEnumProperty< PanelOrientation > panelOrientation
DrmProperty underscanVBorder
DrmEnumProperty< UnderscanOptions > underscan
std::shared_ptr< DrmBlob > blob()
bool operator==(const DrmConnectorMode &otherMode)
DrmConnectorMode(DrmConnector *connector, drmModeModeInfo nativeMode, Flags additionalFlags)
drmModeModeInfo * nativeMode()
std::chrono::nanoseconds vblankTime() const
DrmGpu * gpu() const
uint32_t type() const
std::unique_ptr< T, DrmDeleter< T > > DrmUniquePtr
QDebug & operator<<(QDebug &s, const KWin::DrmConnector *obj)
ContentType
Definition globals.h:284