Vulkan、DRI、X11 和 KMS:它们有何关系?

Vulkan、DRI、X11 和 KMS:它们有何关系?

我认为我对从程序获取图形代码到硬件的软件链有很好的理解,但我希望有人纠正我的任何错误。

当我编写一个使用 Vulkan 渲染和呈现 3D 场景的程序(假设是用 C 语言)时,我必须链接到libvulkan.libvulkan实际上只是将我的命令发送到我平台的 Vulkan 库。该库libdrm使用接口进行调用,与内核驱动程序进行对话/dev/dri/renderX。然后该驱动程序与我的硬件进行交互。

回顾一下:

program -> libvulkan -> libvulkan_platform -> libdrm -> /dev/dri/renderX -> kernel drm driver -> hardware

它是否正确?

此外,一旦 GPU 渲染了我的帧,它们就需要呈现在屏幕上。这是通过使用 Vulkan 窗口系统集成 (WSI) 层将它们发送到平台的窗口库(X11、wayland 等)来完成的。然而,当我在 Vulkan 中编写程序时,我也使用glfw.它从哪里来?然后,窗口服务器必须在显示器上显示合成的帧,也使用 libdrm。它通过接口与内核KMS驱动程序交互/dev/dri/cardX,然后内核KMS驱动程序与硬件交互。

回顾一下:

program -> libvulkan (wsi) -> glfw??? -> libX11, libwayland-client -> X server (Xorg) + modesetting_drv, Wayland compositor -> libdrm -> /dev/dri/cardX -> platform KMS driver -> hardware

它是否正确?

相关内容