16 , m_default_fb_handle(uint32_t(-1))
17 , m_default_fb_id(uint32_t(-1))
21 struct drm_mode_create_dumb createRequest;
22 createRequest.width =
output.size.width();
23 createRequest.height =
output.size.height();
24 createRequest.bpp = 32;
25 createRequest.flags = 0;
27 qCDebug(qLcEglfsKmsDebug,
"Creating dumb fb %dx%d", createRequest.width, createRequest.height);
29 int ret = drmIoctl(
fd, DRM_IOCTL_MODE_CREATE_DUMB, &createRequest);
31 qFatal(
"Unable to create dumb buffer.\n");
33 m_default_fb_handle = createRequest.handle;
35 uint32_t handles[4] = { 0, 0, 0, 0 };
36 uint32_t pitches[4] = { 0, 0, 0, 0 };
37 uint32_t
offsets[4] = { 0, 0, 0, 0 };
39 handles[0] = createRequest.handle;
40 pitches[0] = createRequest.pitch;
43 ret = drmModeAddFB2(
fd, createRequest.width, createRequest.height, DRM_FORMAT_ARGB8888, handles,
44 pitches,
offsets, &m_default_fb_id, 0);
46 qFatal(
"Unable to add fb\n");
48 qCDebug(qLcEglfsKmsDebug,
"Added dumb fb %dx%d handle:%u pitch:%d id:%u", createRequest.width, createRequest.height,
49 createRequest.handle, createRequest.pitch, m_default_fb_id);
57 if (m_default_fb_id != uint32_t(-1)) {
58 ret = drmModeRmFB(
fd, m_default_fb_id);
63 if (m_default_fb_handle != uint32_t(-1)) {
64 struct drm_mode_destroy_dumb destroyRequest;
65 destroyRequest.handle = m_default_fb_handle;
67 ret = drmIoctl(
fd, DRM_IOCTL_MODE_DESTROY_DUMB, &destroyRequest);
72 const int remainingScreenCount =
qGuiApp->screens().size();
73 qCDebug(qLcEglfsKmsDebug,
"Screen dtor. Remaining screens: %d", remainingScreenCount);
74 if (!remainingScreenCount && !
device()->screenConfig()->separateScreens())