From 834087c3242cbb3d85a5b8b155788a368f09b836 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Tue, 10 May 2016 15:06:26 +0200 Subject: eglfs: Fix DRM+KMS backends The native display was simply invalid. Task-number: QTBUG-53225 Change-Id: I682fb1d91dbea3dab971a079060d181fc313da46 Reviewed-by: Robert Griebl --- .../eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp | 4 ++-- .../eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.h | 2 +- .../deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp | 5 +++-- .../deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.h | 2 +- .../eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h | 3 +++ .../eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.h | 8 ++++---- .../deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp | 2 +- .../deviceintegration/eglfs_kms_support/qeglfskmsintegration.h | 1 - .../eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp | 2 +- .../eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.h | 2 +- 10 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp index 9bb489d6b4..278752bddf 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp @@ -116,9 +116,9 @@ void QEglFSKmsGbmDevice::close() m_globalCursor = Q_NULLPTR; } -EGLNativeDisplayType QEglFSKmsGbmDevice::device() const +EGLNativeDisplayType QEglFSKmsGbmDevice::nativeDisplay() const { - return 0; + return reinterpret_cast(m_gbm_device); } gbm_device * QEglFSKmsGbmDevice::gbmDevice() const diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.h index 6203a6dc7f..6a45f9ffa0 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.h +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.h @@ -59,7 +59,7 @@ public: bool open() Q_DECL_OVERRIDE; void close() Q_DECL_OVERRIDE; - EGLNativeDisplayType device() const Q_DECL_OVERRIDE; + EGLNativeDisplayType nativeDisplay() const Q_DECL_OVERRIDE; gbm_device *gbmDevice() const; QPlatformCursor *globalCursor() const; diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp index e09f2fdb18..743f714cf0 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp @@ -39,6 +39,7 @@ #include "qeglfskmsegldevice.h" #include "qeglfskmsegldevicescreen.h" +#include "qeglfskmsegldeviceintegration.h" #include @@ -68,9 +69,9 @@ void QEglFSKmsEglDevice::close() setFd(-1); } -EGLNativeDisplayType QEglFSKmsEglDevice::device() const +EGLNativeDisplayType QEglFSKmsEglDevice::nativeDisplay() const { - return 0; + return static_cast(m_integration)->eglDevice(); } QEglFSKmsScreen *QEglFSKmsEglDevice::createScreen(QEglFSKmsIntegration *integration, QEglFSKmsDevice *device, QEglFSKmsOutput output, QPoint position) diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.h index f85ec27fa2..b1c98f3fe6 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.h +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.h @@ -50,7 +50,7 @@ public: virtual bool open() Q_DECL_OVERRIDE; virtual void close() Q_DECL_OVERRIDE; - virtual EGLNativeDisplayType device() const Q_DECL_OVERRIDE; + virtual EGLNativeDisplayType nativeDisplay() const Q_DECL_OVERRIDE; virtual QEglFSKmsScreen *createScreen(QEglFSKmsIntegration *integration, QEglFSKmsDevice *device, diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h index 43c1945a7f..f04c42267a 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h @@ -62,6 +62,9 @@ public: QEglFSWindow *createWindow(QWindow *window) const Q_DECL_OVERRIDE; virtual bool separateScreens() const Q_DECL_OVERRIDE; + + EGLDeviceEXT eglDevice() const { return m_egl_device; } + protected: QEglFSKmsDevice *createDevice(const QString &devicePath) Q_DECL_OVERRIDE; diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.h index ffa8bcbaa5..041c063695 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.h +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsdevice.h @@ -61,7 +61,7 @@ public: virtual void createScreens(); - virtual EGLNativeDisplayType device() const = 0; + virtual EGLNativeDisplayType nativeDisplay() const = 0; int fd() const; QString devicePath() const; @@ -72,9 +72,6 @@ protected: QPoint position); void setFd(int fd); -private: - Q_DISABLE_COPY(QEglFSKmsDevice) - QEglFSKmsIntegration *m_integration; QString m_path; int m_dri_fd; @@ -91,6 +88,9 @@ private: unsigned int tv_sec, unsigned int tv_usec, void *user_data); + +private: + Q_DISABLE_COPY(QEglFSKmsDevice) }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp index a5473eb94a..07ea7d4439 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp @@ -90,7 +90,7 @@ void QEglFSKmsIntegration::platformDestroy() EGLNativeDisplayType QEglFSKmsIntegration::platformDisplay() const { Q_ASSERT(m_device); - return reinterpret_cast(m_device->device()); + return m_device->nativeDisplay(); } bool QEglFSKmsIntegration::usesDefaultScreen() diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.h index c630d93fce..34ac5385a5 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.h +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.h @@ -77,7 +77,6 @@ public: protected: virtual QEglFSKmsDevice *createDevice(const QString &devicePath) = 0; -private: void loadConfig(); QEglFSKmsDevice *m_device; diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp index f614351a40..e6b256f6b2 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp @@ -73,7 +73,7 @@ QEglFSKmsScreen::QEglFSKmsScreen(QEglFSKmsIntegration *integration, QEglFSKmsDevice *device, QEglFSKmsOutput output, QPoint position) - : QEglFSScreen(eglGetDisplay(reinterpret_cast(device->device()))) + : QEglFSScreen(eglGetDisplay(device->nativeDisplay())) , m_integration(integration) , m_device(device) , m_output(output) diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.h index ed26ca0419..aa698e1b5d 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.h +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.h @@ -111,7 +111,7 @@ public: QPlatformScreen::PowerState powerState() const Q_DECL_OVERRIDE; void setPowerState(QPlatformScreen::PowerState state) Q_DECL_OVERRIDE; -private: +protected: QEglFSKmsIntegration *m_integration; QEglFSKmsDevice *m_device; -- cgit v1.2.3