diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-05-13 14:27:45 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-05-13 16:08:01 +0200 |
commit | ff334fd57414be90ab6b40f91e16f0bdb1835762 (patch) | |
tree | bb74d8217781394163870cb3399f0984136498c8 /src/plugins/platforms/kms/qkmsscreen.cpp | |
parent | ec4c93a852ddc1d1437232241de492ad20d4cbb1 (diff) | |
parent | b5552bab40f2e165cf7196993ffc83785f4d8264 (diff) |
Merge "Merge remote-tracking branch 'origin/stable' into dev" into refs/staging/dev
Diffstat (limited to 'src/plugins/platforms/kms/qkmsscreen.cpp')
-rw-r--r-- | src/plugins/platforms/kms/qkmsscreen.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/src/plugins/platforms/kms/qkmsscreen.cpp b/src/plugins/platforms/kms/qkmsscreen.cpp index ad1a45b459..a930aa6545 100644 --- a/src/plugins/platforms/kms/qkmsscreen.cpp +++ b/src/plugins/platforms/kms/qkmsscreen.cpp @@ -63,18 +63,18 @@ static drmModeModeInfo builtin_1024x768 = { "1024x768" }; -QKmsScreen::QKmsScreen(QKmsDevice *device, int connectorId) +QKmsScreen::QKmsScreen(QKmsDevice *device, const drmModeRes *resources, const drmModeConnector *connector) : m_device(device), m_current_bo(0), m_next_bo(0), - m_connectorId(connectorId), + m_connectorId(connector->connector_id), m_depth(32), m_format(QImage::Format_Invalid), m_eglWindowSurface(EGL_NO_SURFACE), m_modeSet(false) { m_cursor = new QKmsCursor(this); - initializeScreenMode(); + initializeScreenMode(resources, connector); } QKmsScreen::~QKmsScreen() @@ -114,14 +114,9 @@ QPlatformCursor *QKmsScreen::cursor() const return m_cursor; } -void QKmsScreen::initializeScreenMode() +void QKmsScreen::initializeScreenMode(const drmModeRes *resources, const drmModeConnector *connector) { //Determine optimal mode for screen - drmModeRes *resources = drmModeGetResources(m_device->fd()); - if (!resources) - qFatal("drmModeGetResources failed"); - - drmModeConnector *connector = drmModeGetConnector(m_device->fd(), m_connectorId); drmModeModeInfo *mode = 0; for (int i = 0; i < connector->count_modes; ++i) { if (connector->modes[i].type & DRM_MODE_TYPE_PREFERRED) { @@ -129,8 +124,12 @@ void QKmsScreen::initializeScreenMode() break; } } - if (!mode) - mode = &builtin_1024x768; + if (!mode) { + if (connector->count_modes > 0) + mode = &connector->modes[0]; + else + mode = &builtin_1024x768; + } drmModeEncoder *encoder = drmModeGetEncoder(m_device->fd(), connector->encoders[0]); if (encoder == 0) @@ -162,8 +161,6 @@ void QKmsScreen::initializeScreenMode() qDebug() << "created gbm surface" << m_gbmSurface << m_mode.hdisplay << m_mode.vdisplay; //Cleanup drmModeFreeEncoder(encoder); - drmModeFreeConnector(connector); - drmModeFreeResources(resources); } QSurfaceFormat QKmsScreen::tweakFormat(const QSurfaceFormat &format) |