Repository navigation
MaliBridge v0.4
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 offersVK_EXT_vertex_attribute_divisorthere 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
vkWaitSemaphoreswithVK_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=0turns 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: branchmali-test-buildof 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