나는 그래픽 코드를 하드웨어에 가져오는 프로그램에서 소프트웨어 체인을 잘 이해하고 있다고 생각하지만 실수가 있으면 누군가가 나를 바로잡아 주기를 바랍니다.
Vulkan을 사용하여 3D 장면(C로 가정)을 렌더링하고 렌더링하는 프로그램을 작성할 때 실제로 명령을 플랫폼으로 보내는 Vulkan 라이브러리 libvulkan
에 연결해야 합니다. libvulkan
라이브러리는 libdrm
인터페이스를 사용하여 커널 드라이버와 통신하기 위한 호출을 만듭니다 /dev/dri/renderX
. 그런 다음 드라이버는 내 하드웨어와 상호 작용합니다.
요약하자면:
program -> libvulkan -> libvulkan_platform -> libdrm -> /dev/dri/renderX -> kernel drm driver -> hardware
맞습니까?
또한 GPU가 프레임을 렌더링한 후에는 화면에 렌더링해야 합니다. 이는 Vulkan Window System Integration(WSI) 레이어를 사용하여 플랫폼의 윈도우 라이브러리(X11, wayland 등)로 전송하여 수행됩니다. 하지만 Vulkan에서 프로그램을 작성할 때 glfw
.where is it from? 도 사용합니다. 그런 다음 윈도우 서버는 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
맞습니까?