33 QEglFSKmsGbmScreen(QEglFSKmsDevice *device,
const QKmsOutput &output,
bool headless);
34 ~QEglFSKmsGbmScreen();
36 QPlatformCursor *cursor()
const override;
38 gbm_surface *createSurface(EGLConfig eglConfig);
41 void initCloning(QPlatformScreen *screenThisScreenClones,
42 const QList<QPlatformScreen *> &screensCloningThisScreen);
44 void waitForFlip() override;
47 virtual void updateFlipStatus();
49 virtual uint32_t gbmFlags() {
return GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING; }
53 void ensureModeSet(uint32_t fb);
54 void cloneDestFlipFinished(QEglFSKmsGbmScreen *cloneDestScreen);
55 void waitForFlipWithEventReader(QEglFSKmsGbmScreen *screen);
56 static void nonThreadedPageFlipHandler(
int fd,
57 unsigned int sequence,
62 gbm_surface *m_gbm_surface;
64 gbm_bo *m_gbm_bo_current;
65 gbm_bo *m_gbm_bo_next;
69 QWaitCondition m_flipCond;
70 static QMutex s_nonThreadedFlipMutex;
72 QScopedPointer<QEglFSKmsGbmCursor> m_cursor;
77 static void bufferDestroyedHandler(gbm_bo *bo,
void *data);
78 FrameBuffer *framebufferForBufferObject(gbm_bo *bo);
80 QEglFSKmsGbmScreen *m_cloneSource;
81 struct CloneDestination {
82 QEglFSKmsGbmScreen *screen =
nullptr;
83 bool cloneFlipPending =
false;
85 QList<CloneDestination> m_cloneDests;
87 bool needsNewModeSetForNextFb =
false;