What's the end game when it comes to 3D acceleration?

First, it is needed to clarify that 3D acceleration can work without any kind of support on display server and GUI toolkit side. It can even be used on PC without display and running GUI. You can render into arbitrary GPU buffer.

So, even without display server support, you can render into GPU buffer, copy its contents into regular CPU memory and display it with existing BView::DrawBitmap API. This is actually already possible for Nvidia Turing+ GPUs with my experimental Nvidia GPU driver port (see Haiku ❤ Nvidia (porting Nvidia driver for Turing+ GPUs)).

Second, acceleration and display output are two almost unrelated things. GPU acceleration is for doing some computations faster, but CPU still can do it with the same results by using for example Mesa llvmpipe, just slower. Display output (also called modesetting) driver allows setting screen resolution, refresh rate (including variable refresh rate), supporting multiple displays, V-Sync, hardware cursor, video overlays. If there are no display output driver, it is often still possible to use BIOS/UEFI framebuffer, but you will be not able to use multiple screens, change resolution or refresh rate or render without tearing.

Currently Haiku have no any kind of GPU acceleration support and very primitive display output control support, so no multiple displays and no rendering without tearing yet.

I am currently working on “app_server_neo” project that will introduce proper display output control support and 2D vector graphics hardware acceleration using Skia library and Vulkan API. This features will work only on Nvidia GPUs for first time. Project is currently far for being complete and too early to show results. It still use current app_server protocol and not based on Wayland or X11.

20 Likes