Vulkan lavapipe software rendering is working on Haiku

curiosity question, the high frames on linux, could it be because some sort of multithreading or something similar is active?

CPU threads are probably unrelated. Problems that can affect performance:

  1. Driver do not set power state so GPU may run at low power or failsafe mode.
  2. GFX ring is reset before each command sequence to avoid driver bug. It need more investigation to fix.
  3. Interrupts are not supported yet. Pooling is used to detect command buffers completion.
  4. Command buffer scheduler is too primitive and it waits completion in scheduling function instead of dedicated wait function. Related to (2).
11 Likes

Linux with power_dpm_state set to low:

10 Likes

So, your driver is about 3x slower. Probably I would guess #2 and #4 on your list are most related (command ring resets are usually pretty expensive), but possibly #3 also if you are not just busy-looping.

Pooling timer thread is used with 1 ms pooling period. Decreasing pooling period to 100 ns have almost no effect on FPS, but increase CPU usage.

1 Like

Thats great news X512. You’ve already reached 1/3 Linux performance by using combo of external Radeon + Intel GPU. With Linux you’re probably using just the Radeon, so a memcpy + sync less to begin with. The HW mux benchmarks I’ve seen for laptops show up to 20% performance benefit when using hw mux in dual GPU config which is common with laptops (naturally, single GPU option will be faster). With your Linux benchmark, I’d expect that only Radeon is used effectively becoming a single GPU solution.

So 1/3 performance this early with the dual GPU dance is amazing progress. A celebration in Ilya’s honour.

23 Likes

Some details how it work.

Loaded images:
screenshot47

Waiting for command buffer execution stack trace. Most major components are present (libdrm2, libdrm_amdgpu, RADV, RadeonGfx).
screenshot48

Threads. Last thread is WSI presenter thread that copy swap chain image to BBitmap and display it.

screenshot49

Buffer table:

 id kind     address    size
  1 GTT      0x80017000 0x00001000
  2 GTT      0x80018000 0x00001000
  3 VRAM MAP 0x0040a000 0x00040000
  4 GTT      0x80019000 0x00384000
  5 VRAM     0x10000000 0x003c3000
  6 VRAM     0x103c3000 0x003c3000
  7 VRAM     0x10786000 0x004c3000
  8 VRAM     0x10c49000 0x00040000
  9 VRAM     0x10e07000 0x00aac000
 10 GTT      0x803dd000 0x00004000
 11 VRAM MAP 0x00454000 0x00001000
 12 VRAM     0x10c89000 0x00001000
 13 GTT      0x8039e000 0x00002000
 14 VRAM     0x10c90000 0x00001000
 15 VRAM     0x10c8a000 0x00005000
 16 VRAM     0x10c8f000 0x00001000
 17 VRAM MAP 0x00455000 0x00001000
 18 GTT      0x803a0000 0x00002000
 19 VRAM     0x10cb1000 0x00156000
 20 VRAM     0x10c91000 0x0001a000
 21 VRAM     0x10cab000 0x00006000
 22 VRAM MAP 0x00456000 0x00001000
 23 VRAM     0x118b3000 0x00040000
 24 VRAM MAP 0x00462000 0x00001000
 25 GTT      0x8039d000 0x00001000
 26 GTT      0x803bf000 0x00004000
 27 GTT      0x803c5000 0x00004000
 28 GTT      0x803c9000 0x00004000
 29 GTT      0x803a4000 0x00001000
 30 GTT      0x803cf000 0x00003000
 31 GTT      0x803c3000 0x00001000
17 Likes

Are there any vulkan 3d game engines that can be easily pprted to haiku ? Iirc i thought there was a open source doom or quake for vulkan project

Might be useful soon to have one of those.

2 Likes

Godot 4.0 uses Vulkan. Our engine is not ready 100% using Vulkan but close. I guess there are more out there.

Edit: e.g. Ogre has also Vulkan support.

3 Likes

Should be even possible to port Unreal! :smiley:
Not sure about NDA or something but I know you can subscribe to Unreal Repo and then you have access.

2 Likes

Looks like @X512 gets the ball rolling here <3

3 Likes

At the very least, having any 3d game would be useful, because the performance testing will reqyire it let alone the bug hunting

1 Like

I think our engine is perfect for testing lots of 3d driver features/issues. I can assist also.

1 Like

Port it, Contact HiakuPorts to get it into the repository, also games welcomed as well. You can also start a repo, and if you have games that run users can buy from you as well.

2 Likes

If you mean our engine. It is ported. Just a few Makefile adjustments to compile with GLFW3 and Vulkan.

2 Likes

We also have a game in our pipeline. We can release this for Haiku if 3D graphics drivers are OK for that

Edit: Link: WARSTORY: Scottish Jacobites Press Kit – Mindty Kollektiv

Does it have some sample open source games?

1 Like

Lots of engine feature tests and a editor u can try with sample assets that are included as well. We can also compile our game to test on Haiku.

3 Likes

Definitely compile to test on haiku

2 Likes

Maybe it can be already compiled, libvulkan with Vulkan headers is already present in HaikuPorts.

2 Likes