You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
4.2 KiB
162 lines
4.2 KiB
/* |
|
KWin - the KDE window manager |
|
This file is part of the KDE project. |
|
|
|
SPDX-FileCopyrightText: 2016 Roman Gilg <subdiff@gmail.com> |
|
SPDX-FileCopyrightText: 2021 Xaver Hugl <xaver.hugl@gmail.com> |
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later |
|
*/ |
|
#pragma once |
|
|
|
#include <QPoint> |
|
#include <QSize> |
|
|
|
#include <QSize> |
|
|
|
#include "core/output.h" |
|
#include "drm_blob.h" |
|
#include "drm_object.h" |
|
#include "drm_pointer.h" |
|
#include "utils/edid.h" |
|
|
|
namespace KWin |
|
{ |
|
|
|
class DrmPipeline; |
|
class DrmConnector; |
|
class DrmCrtc; |
|
|
|
/** |
|
* The DrmConnectorMode class represents a native mode and the associated blob. |
|
*/ |
|
class DrmConnectorMode : public OutputMode |
|
{ |
|
public: |
|
DrmConnectorMode(DrmConnector *connector, drmModeModeInfo nativeMode, Flags additionalFlags); |
|
|
|
drmModeModeInfo *nativeMode(); |
|
std::shared_ptr<DrmBlob> blob(); |
|
std::chrono::nanoseconds vblankTime() const; |
|
|
|
bool operator==(const DrmConnectorMode &otherMode); |
|
bool operator==(const drmModeModeInfo &otherMode); |
|
|
|
private: |
|
DrmConnector *m_connector; |
|
drmModeModeInfo m_nativeMode; |
|
std::shared_ptr<DrmBlob> m_blob; |
|
}; |
|
|
|
class DrmConnector : public DrmObject |
|
{ |
|
public: |
|
DrmConnector(DrmGpu *gpu, uint32_t connectorId); |
|
|
|
bool updateProperties() override; |
|
void disable(DrmAtomicCommit *commit) override; |
|
|
|
bool isCrtcSupported(DrmCrtc *crtc) const; |
|
bool isConnected() const; |
|
bool isNonDesktop() const; |
|
bool isInternal() const; |
|
DrmPipeline *pipeline() const; |
|
|
|
const Edid *edid() const; |
|
QString connectorName() const; |
|
QString modelName() const; |
|
QSize physicalSize() const; |
|
/** |
|
* @returns the mst path of the connector. Is empty if invalid |
|
*/ |
|
QByteArray mstPath() const; |
|
|
|
QList<std::shared_ptr<DrmConnectorMode>> modes() const; |
|
std::shared_ptr<DrmConnectorMode> findMode(const drmModeModeInfo &modeInfo) const; |
|
|
|
Output::SubPixel subpixel() const; |
|
|
|
enum class UnderscanOptions : uint64_t { |
|
Off = 0, |
|
On = 1, |
|
Auto = 2, |
|
}; |
|
enum class BroadcastRgbOptions : uint64_t { |
|
Automatic = 0, |
|
Full = 1, |
|
Limited = 2 |
|
}; |
|
enum class LinkStatus : uint64_t { |
|
Good = 0, |
|
Bad = 1 |
|
}; |
|
enum class DrmContentType : uint64_t { |
|
None = 0, |
|
Graphics = 1, |
|
Photo = 2, |
|
Cinema = 3, |
|
Game = 4 |
|
}; |
|
enum class PanelOrientation : uint64_t { |
|
Normal = 0, |
|
UpsideDown = 1, |
|
LeftUp = 2, |
|
RightUp = 3 |
|
}; |
|
enum class ScalingMode : uint64_t { |
|
None = 0, |
|
Full = 1, |
|
Center = 2, |
|
Full_Aspect = 3 |
|
}; |
|
enum class Colorspace : uint64_t { |
|
Default, |
|
BT709_YCC, |
|
opRGB, |
|
BT2020_RGB, |
|
BT2020_YCC, |
|
}; |
|
|
|
DrmProperty crtcId; |
|
DrmProperty nonDesktop; |
|
DrmProperty dpms; |
|
DrmProperty edidProp; |
|
DrmProperty overscan; |
|
DrmProperty vrrCapable; |
|
DrmEnumProperty<UnderscanOptions> underscan; |
|
DrmProperty underscanVBorder; |
|
DrmProperty underscanHBorder; |
|
DrmEnumProperty<BroadcastRgbOptions> broadcastRGB; |
|
DrmProperty maxBpc; |
|
DrmEnumProperty<LinkStatus> linkStatus; |
|
DrmEnumProperty<DrmContentType> contentType; |
|
DrmEnumProperty<PanelOrientation> panelOrientation; |
|
DrmProperty hdrMetadata; |
|
DrmEnumProperty<ScalingMode> scalingMode; |
|
DrmEnumProperty<Colorspace> colorspace; |
|
DrmProperty path; |
|
|
|
static DrmContentType kwinToDrmContentType(ContentType type); |
|
static OutputTransform toKWinTransform(PanelOrientation orientation); |
|
static BroadcastRgbOptions rgbRangeToBroadcastRgb(Output::RgbRange rgbRange); |
|
static Output::RgbRange broadcastRgbToRgbRange(BroadcastRgbOptions rgbRange); |
|
|
|
private: |
|
QList<std::shared_ptr<DrmConnectorMode>> generateCommonModes(); |
|
std::shared_ptr<DrmConnectorMode> generateMode(const QSize &size, float refreshRate); |
|
|
|
DrmUniquePtr<drmModeConnector> m_conn; |
|
std::unique_ptr<DrmPipeline> m_pipeline; |
|
Edid m_edid; |
|
QSize m_physicalSize = QSize(-1, -1); |
|
QList<std::shared_ptr<DrmConnectorMode>> m_driverModes; |
|
QList<std::shared_ptr<DrmConnectorMode>> m_modes; |
|
uint32_t m_possibleCrtcs = 0; |
|
QByteArray m_mstPath; |
|
|
|
friend QDebug &operator<<(QDebug &s, const KWin::DrmConnector *obj); |
|
}; |
|
|
|
QDebug &operator<<(QDebug &s, const KWin::DrmConnector *obj); |
|
|
|
}
|
|
|