Details
-
Bug
-
Resolution: Done
-
P2: Important
-
5.15.0, 5.15.1, 5.15.2, 5.15.3, 6.3.1
-
K767 flytech monitor
meta-qt5 (dunfell)
eglfs (kms integration)
NO X11/wayland
-
-
91d1ec3589 (qt/qtbase/dev) 91d1ec3589 (qt/tqtc-qtbase/dev) dddd08e1e7 (qt/qtbase/6.4) dddd08e1e7 (qt/tqtc-qtbase/6.4) dddd08e1e7 (qt/tqtc-qtbase/6.4.1) dddd08e1e7 (qt/tqtc-qtbase/tqtc/qtinsight-6.4) 7dd9363b5f (qt/tqtc-qtbase/6.2)
Description
Context
We ported an app from Qt 5.14.X to Qt 5.15 in a yocto image and everything i working fine, except when we connect an external screen in clone mode, both sreens start to flicker and they becore very unresponsive.
The probleme can be reproduce with any of the example app if you configure the output in clone mode.
We want to have the Qt 5.15 LTS version in our project. The version Qt 5.14.2 is working fines, and every version in Qt 5.15.X have the issue.
Behavior
In the output of the app, we can see a new warning appearing that was not present in the version 5.14:
2021-03-16T12:38:03 WARNING : QEGLPlatformContext: eglSwapBuffers failed: 3003 (:0, ) 2021-03-16T12:38:03 WARNING : Could not lock GBM surface front buffer! (:0, )
According to the following documentation:
However, this feature can only work if the resolutions are the same, there are no incompatibilities when it comes to accepted buffer formats, and the application doesn't have any output on the QScreen associated with a clone destination. In practice, the latter means that no QWindow associated with the QScreen in question - DP1 in the example - must ever perform a QOpenGLContext::swapBuffers() operation. It's up to the configuration and the application to ensure these.
I think the version 5.15 introduce a call to swapBuffer somewhere, which causes our app to have this behavior.
Setup/Configurations:
We use a yocto image (dunfell) build with meta-qt5 (lts-5.15). The Qt configuration is in the attached files. We used:
PACKAGECONFIG_append = " eglfs gles2 kms gbm accessibility"
The eglfskms.json file used for screen cloning:
{ "device": "/dev/dri/card0", "hwcursor": false, "pbuffers": true, "outputs": [ { "name": "eDP1", "mode": "1024x768" }, { "name": "VGA1", "mode": "1024x768", "clones": "eDP1" }, { "name": "DP1", "mode": "1024x768", "clones": "eDP1" }, { "name": "HDMI1", "mode": "1024x768", "clones": "eDP1" } ] }
The environnement variables exported:
export QT_QPA_PLATFORM=eglfs export QT_QPA_EGLFS_INTEGRATION=eglfs_kms export QT_LOGGING_RULES="qt.qpa.*=true" export QT_QPA_EGLFS_KMS_CONFIG=/usr/share/opm/eglfskms_k767.json export QT_QPA_EGLFS_HIDECURSOR=1
I also included in the attached files the output of the app.
If you need anything else, let me know.
Attachments
Issue Links
- is duplicated by
-
QTBUG-100564 Screen cloning with eglfs_kms does not work on Raspberry Pi 4
- Closed
- resulted from
-
QTBUG-74953 Multi-screen application on eglfs blocks in QEglFSKmsGbmScreen::waitForFlip when atomic drm is enabled
- Closed
For Gerrit Dashboard: QTBUG-91882 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
433619,3 | eglfs: Add env.var. to disable the dedicated drmHandleEvent thread | dev | qt/qtbase | Status: MERGED | +2 | 0 |
434277,2 | eglfs: Add env.var. to disable the dedicated drmHandleEvent thread | 6.3 | qt/qtbase | Status: MERGED | +2 | 0 |
434398,2 | eglfs: Add env.var. to disable the dedicated drmHandleEvent thread | 6.4 | qt/qtbase | Status: MERGED | +2 | 0 |
434404,4 | eglfs: Add env.var. to disable the dedicated drmHandleEvent thread | tqtc/lts-6.2 | qt/tqtc-qtbase | Status: MERGED | +2 | 0 |
434405,3 | eglfs: Add env.var. to disable the dedicated drmHandleEvent thread | tqtc/lts-5.15 | qt/tqtc-qtbase | Status: MERGED | +2 | 0 |
440197,6 | eglfs: kms: Make screen cloning functional by default | dev | qt/qtbase | Status: MERGED | +2 | 0 |
440669,2 | eglfs: kms: Make screen cloning functional by default | 6.4 | qt/qtbase | Status: MERGED | +2 | 0 |
441238,3 | eglfs: kms: Make screen cloning functional by default | tqtc/lts-6.2 | qt/tqtc-qtbase | Status: MERGED | +2 | 0 |