34 QEglFSKmsGbmScreen(QEglFSKmsDevice *device,
const QKmsOutput &output,
bool headless);
35 ~QEglFSKmsGbmScreen();
37 QPlatformCursor *cursor()
const override;
39 gbm_surface *createSurface(EGLConfig eglConfig);
42 void initCloning(QPlatformScreen *screenThisScreenClones,
43 const QList<QPlatformScreen *> &screensCloningThisScreen);
45 void waitForFlip() override;
48 virtual void updateFlipStatus();
50 virtual uint32_t gbmFlags() {
return GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING; }
54 void ensureModeSet(uint32_t fb);
55 void cloneDestFlipFinished(QEglFSKmsGbmScreen *cloneDestScreen);
56 void waitForFlipWithEventReader(QEglFSKmsGbmScreen *screen);
57 static void nonThreadedPageFlipHandler(
int fd,
58 unsigned int sequence,
63 gbm_surface *m_gbm_surface;
65 gbm_bo *m_gbm_bo_current;
66 gbm_bo *m_gbm_bo_next;
70 QWaitCondition m_flipCond;
71 static QMutex s_nonThreadedFlipMutex;
73 QScopedPointer<QEglFSKmsGbmCursor> m_cursor;
78 static void bufferDestroyedHandler(gbm_bo *bo,
void *data);
79 FrameBuffer *framebufferForBufferObject(gbm_bo *bo);
81 QEglFSKmsGbmScreen *m_cloneSource;
82 struct CloneDestination {
83 QEglFSKmsGbmScreen *screen =
nullptr;
84 bool cloneFlipPending =
false;
86 QList<CloneDestination> m_cloneDests;
88 bool needsNewModeSetForNextFb =
false;