【发布时间】:2019-05-11 18:37:21
【问题描述】:
我有一个使用 DRM 和 KMS API 直接呈现到屏幕的嵌入式进程。它在最小的 Yocto 发行版上运行(没有桌面或 Wayland)。 我想渲染到从另一个进程连接到同一个 GPU 的第二个屏幕。第一个进程打开“/dev/dri/card0”并成为事实上的 DRM 主机,它可以在主屏幕上执行 drmModeSetCrtc 和 drmModePageFlip 以显示帧缓冲区。但是,如果我调用 drmDropMaster 它就不能再进行翻页了。因此,第二个进程不能成为 DRM 主进程并使用相同的技术渲染到其他显示器。
有很多关于如何使用直接渲染管理器 (DRM) 和内核模式设置 (KMS) 渲染到一个屏幕的示例,但我发现没有一个可以从另一个进程渲染到第二个屏幕。
一旦设置了显示模式,我希望没有master,但是页面翻转也是一个受限的API。如果这无法实现,也许可以举个例子说明如何使用 drmAuthMagic 授予第二个进程权限?
【问题讨论】:
-
这与 OpenGL 有什么关系?我的意思是,如果您使用 Mesa,那么一些 glX 上下文函数将帮助您将每个 Display 附加到上下文。
-
@Ripi2:GLX 假设 X11,它没有在这里运行。对于大多数纯 KMS+GBM 环境,OpenGL 是使用的事实上的标准图形 API。因此,虽然不完全与 OpenGL 相关,但它足够接近,opengl 标签的读者可能知道答案。
-
@Ripi2:没有 DRM 或 KMS 的标签。一旦通过了内核安全性,我最终想要使用 OpenGL。我希望可能有一个内核补丁可以完全绕过它。
-
@datenwolf:感谢有趣的阅读。我没有想到,但 VR 与我的应用程序密切相关,因为延迟是一个主要问题,它需要驱动外部显示器。我意识到我的问题非常具体,可能没有简单的解决方案。
标签: opengl embedded-linux yocto mesa