使用 NVidia GPU 的屏幕 EGL 显示

Onscreen EGL display using NVidia GPU

我正在尝试使用 EGL 打开 OpenGL 上下文,该上下文直接在连接到 Linux 上的 NVidia GPU 的显示器上绘制。

当使用 eglGetDisplay(EGL_DEFAULT_DISPLAY) 打开 EGL 显示时,它似乎创建了一个屏幕外渲染上下文。

使用eglGetPlatformDisplayEXT,它没有找到任何显示。

是否可以将其设置为当程序在没有 X11/Wayland(或另一个访问 GPU 的进程)的情况下启动时,它会创建一个直接在屏幕上呈现的 OpenGL 上下文。

此外,如果 X11 设置为仅访问主 GPU,则可以使 EGL 渲染到连接到辅助 GPU 的屏幕上。

它应该提供一个加速的 OpenGL 上下文,然后可以与 CUDA 上下文共享。目标是尽可能高效地显示由 CUDA 内核生成的图像,而不通过窗口服务器。

Is it possible to set it up such that when the program is launched without X11/Wayland

NVidia 的 Linux 驱动程序与 X.org 基础设施密切相关;它仍然没有按照预期的方式正确支持 Wayland。相反,NVidia 用自己的 "method" 硬塞来直接访问显示器,他们称之为 "EGL Stream";可以在 https://github.com/NVIDIA/egl-wayland

找到它与 Wayland 的集成

从技术上讲,您可以使用 EGL Streams 直接访问显示器而无需 X 服务器。

Also, it is possible if X11 is set up to access only the primary GPU, make EGL render onto a screen connected to the secondary GPU.

理论上,EGL Streams 也应该可以做到这一点,假设您将 X 服务器配置为仅使用您希望它使用的那个设备;这可以通过在 xorg.conf.

Device 部分指定 BusID 来完成