Changeset View
Changeset View
Standalone View
Standalone View
plugins/platforms/drm/drm_output.h
Context not available. | |||||
26 | #include <QPoint> | 26 | #include <QPoint> | ||
---|---|---|---|---|---|
27 | #include <QPointer> | 27 | #include <QPointer> | ||
28 | #include <QSize> | 28 | #include <QSize> | ||
29 | #include <QVector> | ||||
29 | #include <xf86drmMode.h> | 30 | #include <xf86drmMode.h> | ||
30 | 31 | | |||
31 | namespace KWayland | 32 | namespace KWayland | ||
Context not available. | |||||
44 | 45 | | |||
45 | class DrmBackend; | 46 | class DrmBackend; | ||
46 | class DrmBuffer; | 47 | class DrmBuffer; | ||
48 | class DrmPlane; | ||||
49 | class DrmConnector; | ||||
50 | class DrmCrtc; | ||||
47 | 51 | | |||
48 | class DrmOutput : public QObject | 52 | class DrmOutput : public QObject | ||
49 | { | 53 | { | ||
Context not available. | |||||
60 | void hideCursor(); | 64 | void hideCursor(); | ||
61 | void moveCursor(const QPoint &globalPos); | 65 | void moveCursor(const QPoint &globalPos); | ||
62 | bool present(DrmBuffer *buffer); | 66 | bool present(DrmBuffer *buffer); | ||
67 | bool presentAtomically(DrmBuffer *buffer); | ||||
68 | bool presentLegacy(DrmBuffer *buffer); | ||||
63 | void pageFlipped(); | 69 | void pageFlipped(); | ||
64 | bool init(drmModeConnector *connector); | 70 | bool init(drmModeConnector *connector); | ||
65 | void restoreSaved(); | 71 | void restoreSaved(); | ||
Context not available. | |||||
75 | QRect geometry() const; | 81 | QRect geometry() const; | ||
76 | QString name() const; | 82 | QString name() const; | ||
77 | int currentRefreshRate() const; | 83 | int currentRefreshRate() const; | ||
84 | // These values are defined by the kernel | ||||
78 | enum class DpmsMode { | 85 | enum class DpmsMode { | ||
79 | On = DRM_MODE_DPMS_ON, | 86 | On = DRM_MODE_DPMS_ON, | ||
80 | Standby = DRM_MODE_DPMS_STANDBY, | 87 | Standby = DRM_MODE_DPMS_STANDBY, | ||
Context not available. | |||||
97 | friend class DrmBackend; | 104 | friend class DrmBackend; | ||
98 | DrmOutput(DrmBackend *backend); | 105 | DrmOutput(DrmBackend *backend); | ||
99 | void cleanupBlackBuffer(); | 106 | void cleanupBlackBuffer(); | ||
100 | bool setMode(DrmBuffer *buffer); | 107 | bool setModeLegacy(DrmBuffer *buffer); | ||
101 | void initEdid(drmModeConnector *connector); | 108 | void initEdid(drmModeConnector *connector); | ||
102 | void initDpms(drmModeConnector *connector); | 109 | void initDpms(drmModeConnector *connector); | ||
103 | bool isCurrentMode(const drmModeModeInfo *mode) const; | 110 | bool isCurrentMode(const drmModeModeInfo *mode) const; | ||
104 | void initUuid(); | 111 | void initUuid(); | ||
105 | void setGlobalPos(const QPoint &pos); | 112 | void setGlobalPos(const QPoint &pos); | ||
106 | 113 | | |||
114 | bool initPrimaryPlane(); | ||||
115 | bool initCursorPlane(); | ||||
116 | int atomicReqModesetPopulate(drmModeAtomicReq *req, bool enable); | ||||
117 | | ||||
107 | DrmBackend *m_backend; | 118 | DrmBackend *m_backend; | ||
108 | QPoint m_globalPos; | 119 | QPoint m_globalPos; | ||
109 | quint32 m_crtcId = 0; | 120 | quint32 m_crtcId = 0; | ||
Context not available. | |||||
112 | bool m_lastGbm = false; | 123 | bool m_lastGbm = false; | ||
113 | drmModeModeInfo m_mode; | 124 | drmModeModeInfo m_mode; | ||
114 | DrmBuffer *m_currentBuffer = nullptr; | 125 | DrmBuffer *m_currentBuffer = nullptr; | ||
126 | DrmBuffer *m_nextBuffer = nullptr; | ||||
115 | DrmBuffer *m_blackBuffer = nullptr; | 127 | DrmBuffer *m_blackBuffer = nullptr; | ||
116 | struct CrtcCleanup { | 128 | struct CrtcCleanup { | ||
117 | static void inline cleanup(_drmModeCrtc *ptr) { | 129 | static void inline cleanup(_drmModeCrtc *ptr) { | ||
118 | drmModeFreeCrtc(ptr); | 130 | drmModeFreeCrtc(ptr); // TODO: Atomically? See compositor-drm.c l.3670 | ||
119 | } | 131 | } | ||
120 | }; | 132 | }; | ||
121 | Edid m_edid; | 133 | Edid m_edid; | ||
Context not available. | |||||
126 | KWin::ScopedDrmPointer<_drmModeProperty, &drmModeFreeProperty> m_dpms; | 138 | KWin::ScopedDrmPointer<_drmModeProperty, &drmModeFreeProperty> m_dpms; | ||
127 | DpmsMode m_dpmsMode = DpmsMode::On; | 139 | DpmsMode m_dpmsMode = DpmsMode::On; | ||
128 | QByteArray m_uuid; | 140 | QByteArray m_uuid; | ||
129 | }; | | |||
130 | 141 | | |||
142 | DrmConnector *m_conn = nullptr; | ||||
143 | DrmCrtc *m_crtc = nullptr; | ||||
144 | uint32_t m_blobId = 0; | ||||
145 | DrmPlane* m_primaryPlane = nullptr; | ||||
146 | DrmPlane* m_cursorPlane = nullptr; | ||||
147 | QVector<DrmPlane*> m_planesFlipList; | ||||
148 | }; | ||||
131 | 149 | | |||
132 | } | 150 | } | ||
133 | 151 | | |||
Context not available. |