20#include <QtGui/private/qtguiglobal_p.h>
21#include <qpa/qplatformscreen.h>
23#include <QtCore/QVariant>
24#include <QtCore/QThreadStorage>
27#include <xf86drmMode.h>
28#include <drm_fourcc.h>
36#define DRM_PLANE_TYPE_OVERLAY 0
39#define DRM_PLANE_TYPE_PRIMARY 1
42#define DRM_PLANE_TYPE_CURSOR 2
45#ifndef DRM_CLIENT_CAP_UNIVERSAL_PLANES
46#define DRM_CLIENT_CAP_UNIVERSAL_PLANES 2
48#ifndef DRM_CLIENT_CAP_ATOMIC
49#define DRM_CLIENT_CAP_ATOMIC 3
52#ifndef DRM_MODE_PROP_EXTENDED_TYPE
53#define DRM_MODE_PROP_EXTENDED_TYPE 0x0000ffc0
55#ifndef DRM_MODE_PROP_TYPE
56#define DRM_MODE_PROP_TYPE(n) ((n) << 6
)
58#ifndef DRM_MODE_PROP_OBJECT
61#ifndef DRM_MODE_PROP_SIGNED_RANGE
124 Q_DECLARE_FLAGS(Rotations,
Rotation)
152Q_DECLARE_OPERATORS_FOR_FLAGS(
QKmsPlane::Rotations)
217#if QT_CONFIG(drm_atomic)
236 QPlatformScreen *screenThisScreenClones,
237 const QList<QPlatformScreen *> &screensCloningThisScreen);
240 const QPoint &virtualPos,
241 const QList<QPlatformScreen *> &virtualSiblings) = 0;
243 virtual void updateScreen(QPlatformScreen *screen,
const QPoint &virtualPos,
244 const QList<QPlatformScreen *> &virtualSiblings);
248 int crtcForConnector(drmModeResPtr resources, drmModeConnectorPtr connector);
251 drmModePropertyPtr
connectorProperty(drmModeConnectorPtr connector,
const QByteArray &name);
265#if QT_CONFIG(drm_atomic)
virtual void * nativeDisplay() const =0
QPlatformScreen * m_headlessScreen
void enumerateProperties(drmModeObjectPropertiesPtr objProps, PropCallback callback)
void checkConnectedScreens()
QList< QKmsPlane > m_planes
drmModePropertyPtr connectorProperty(drmModeConnectorPtr connector, const QByteArray &name)
virtual void unregisterScreen(QPlatformScreen *screen)
void parseCrtcProperties(uint32_t crtcId, QKmsOutput *output)
QKmsScreenConfig * screenConfig() const
virtual QPlatformScreen * createHeadlessScreen()
QKmsScreenConfig * m_screenConfig
QMap< uint32_t, OrderedScreen > m_registeredScreens
virtual QPlatformScreen * createScreen(const QKmsOutput &output)=0
int crtcForConnector(drmModeResPtr resources, drmModeConnectorPtr connector)
std::function< void(drmModePropertyPtr, quint64)> PropCallback
void parseConnectorProperties(uint32_t connectorId, QKmsOutput *output)
QKmsDevice(QKmsScreenConfig *screenConfig, const QString &path=QString())
QString devicePath() const
virtual void updateScreen(QPlatformScreen *screen, const QPoint &virtualPos, const QList< QPlatformScreen * > &virtualSiblings)
virtual void registerScreen(QPlatformScreen *screen, bool isPrimary, const QPoint &virtualPos, const QList< QPlatformScreen * > &virtualSiblings)=0
bool m_has_atomic_support
drmModePropertyBlobPtr connectorPropertyBlob(drmModeConnectorPtr connector, const QByteArray &name)
bool createScreenInfoForConnector(drmModeResPtr resources, drmModeConnectorPtr connector, ScreenInfo &vinfo)
virtual void registerScreenCloning(QPlatformScreen *screen, QPlatformScreen *screenThisScreenClones, const QList< QPlatformScreen * > &screensCloningThisScreen)
virtual void updateScreenOutput(QPlatformScreen *screen, const QKmsOutput &output)
void registerScreens(QList< uint32_t > newConnects=QList< uint32_t >())
QSize headlessSize() const
QMap< QString, QVariantMap > m_outputSettings
virtual ~QKmsScreenConfig()
bool separateScreens() const
VirtualDesktopLayout virtualDesktopLayout() const
virtual void loadConfig()
@ VirtualDesktopLayoutVertical
@ VirtualDesktopLayoutHorizontal
VirtualDesktopLayout m_virtualDesktopLayout
QMap< QString, QVariantMap > outputSettings() const
QString devicePath() const
bool supportsPBuffers() const
Q_STATIC_LOGGING_CATEGORY(lcAccessibilityCore, "qt.accessibility.core")
QDebug operator<<(QDebug dbg, const NSObject *nsObject)
static void assignPlane(QKmsOutput *output, QKmsPlane *plane)
static const char *const connector_type_names[]
QDebug operator<<(QDebug dbg, const QKmsDevice::OrderedScreen &s)
static bool orderedScreenLessThan(const QKmsDevice::OrderedScreen &a, const QKmsDevice::OrderedScreen &b)
static bool propTypeIs(drmModePropertyPtr prop, uint32_t type)
static QByteArray nameForConnector(const drmModeConnectorPtr connector)
static bool parseModeline(const QByteArray &text, drmModeModeInfoPtr mode)
#define DRM_PLANE_TYPE_OVERLAY
#define DRM_CLIENT_CAP_UNIVERSAL_PLANES
#define DRM_PLANE_TYPE_PRIMARY
#define DRM_MODE_PROP_SIGNED_RANGE
#define DRM_PLANE_TYPE_CURSOR
#define DRM_MODE_PROP_TYPE(n)
#define DRM_MODE_PROP_EXTENDED_TYPE
#define DRM_MODE_PROP_OBJECT
OrderedScreen(QPlatformScreen *screen, const ScreenInfo &vinfo)
void restoreMode(QKmsDevice *device)
uint32_t modeIdPropertyId
struct QKmsPlane * eglfs_plane
drmModePropertyPtr dpms_prop
void setPowerState(QKmsDevice *device, QPlatformScreen::PowerState state)
QList< QKmsPlane > available_planes
drmModeCrtcPtr saved_crtc
QList< drmModeModeInfo > modes
drmModePropertyBlobPtr edid_blob
QPlatformScreen::SubpixelAntialiasingType subpixelAntialiasingTypeHint() const
void cleanup(QKmsDevice *device)
uint32_t activePropertyId
bool drm_format_requested_by_user
uint32_t crtcIdPropertyId
uint32_t srcheightPropertyId
uint32_t framebufferPropertyId
uint32_t crtcwidthPropertyId
uint32_t rotationPropertyId
Rotations initialRotation
QList< uint32_t > supportedFormats
uint32_t crtcheightPropertyId
uint32_t srcwidthPropertyId
uint32_t blendOpPropertyId
Rotations availableRotations