Skip to content

MaliBridge v0.4

Choose a tag to compare

@ASEbrahim ASEbrahim released this 15 Oct 11:43
· 113 commits to main since this release

MaliBridge v0.4

First test APK: DroidDeck-MaliBridge-v0.4-test.apk is DroidDeck with MaliBridge built in. Install it on a Mali device and start a Steam session; see INSTALL.md.

  • Second device, the Mali-G925: on a Galaxy Tab S11 Ultra (Mali-G925, Dimensity 9400, Android 16) the same build passes the self-test and runs games 1.4-2x faster than on the Mali-G720: Hollow Knight runs well (player report), Silksong 72-96 fps, Half-Life 2 95-103, Stardew Valley 57-62, Subnautica 28-40 (while thermally throttled), Risk of Rain 2 30-43 at 1280x720 (20-28 in a crowded boss fight, clip attached).
  • The Witcher 3 starts on the Mali-G925. It refused the GPU with "DirectX 12 required": the G925 driver has only VK_KHR_vertex_attribute_divisor, without the zero divisor, and vkd3d-proton looks for the EXT extension. The bridge now offers VK_EXT_vertex_attribute_divisor there and runs its own divisor emulation, as on the G720. The intro cinematic plays at 60 fps. A table of EXT names that newer drivers have only as KHR ones (index_type_uint8, line_rasterization, robustness2, global_priority, load_store_op_none) is handled the same way.
  • Skyrim Special Edition now runs. It exited about 1.5 s after start: Mali refuses dma-buf images at LINEAR tiling, and Zink in the game's process asked for one. Such images are now created without the dma-buf handle type (their memory is still exported). On the Mali-G720 it plays at about 60 fps (its cap) on Medium.
  • Shader warm-up: Steam's "Processing Vulkan shaders" step used to fill a cache that nothing read, so games started with an empty one. The pipeline cache is now kept per Steam game (by app id), and Steam's pre-caching fills the cache the game loads. Processes that save the same cache at once merge their pipelines, and a game that is killed keeps what it compiled.
  • Faster texture loading: BC texture transcoding now picks its quality by mip size (VKBRIDGE_BC_TRANSCODE_QUALITY=auto, the default): levels of 1024x1024 texels or more use the fast encoder, smaller ones the full search.
  • Compile watchdog: a pipeline compile that is still running in the driver after 10 s is interrupted, and the pipeline is built again with a fallback: Unreal Engine 4's colour-grading shader gets a neutral stand-in (no colour grade), any other fragment shader a constant colour as the last resort. What worked is remembered, so later runs do not wait again. Switches: VKBRIDGE_COMPILE_WARN_S, VKBRIDGE_COMPILE_TIMEOUT_S, VKBRIDGE_COMPILE_FALLBACKS, VKBRIDGE_LAYER_GS_FOLD.
  • Failed waits survived: the Mali-G925 driver sometimes fails vkWaitSemaphores with VK_ERROR_INITIALIZATION_FAILED (-3). The wait is now checked again and succeeds when the semaphores are signalled, instead of ending the game (VKBRIDGE_WAIT_FIX=0 turns this off).

Known issue on the Mali-G925: its shader compiler never finishes Unreal Engine 4's colour-grading shader (Stray), and The Witcher 3 stops after its intro in what looks like the same way. The compile watchdog above is the first answer; it has not yet been confirmed on the device. A rewrite of the shader that the G925 compiles is being worked on.

Mali-G720 (Galaxy Tab S10+) with v0.4: self-test 13 of 13; no bridge errors and no compile-watchdog stops in any game. Half-Life 2 chapter 1 67-88 fps (59-74 before), Skyrim SE 60 (its cap) on the main menu, Subnautica 64-65 on the menu, Stardew Valley 60 (cap), Risk of Rain 2 28-41 at 1280x720 in play (18-30 at half resolution before). Shader warm-up on the device: Half-Life 2's first start took 122 s while Steam pre-compiled 64 MB of shaders; the second start loaded them all and the game window was up in 15 s.

The host suite passes 41 of 41. The protocol hash is unchanged (4a9da939fdf65896).

Attached files

  • DroidDeck-MaliBridge-v0.4-test.apk: test build of DroidDeck with MaliBridge (Android arm64). Signed with a test key: uninstall the official DroidDeck first. Source: branch mali-test-build of ASEbrahim/DroidDeck (GPL-3.0).
  • libvkbridge_server.so, libvkbridge_jni.so: server (Android arm64-v8a, API 26+)
  • libvulkan_droidbridge.so, droidbridge_icd.json: client ICD (Linux glibc, aarch64)
  • risk-of-rain-2-s11-ultra.mp4: a Risk of Rain 2 boss fight on the S11 Ultra