Skip to content

MaliBridge v0.3

Choose a tag to compare

@ASEbrahim ASEbrahim released this 14 Oct 05:15
· 129 commits to main since this release

MaliBridge v0.3

Two compatibility fixes ported as ideas from Lee Gao's MIT layers, plus tools for the descriptor-batching bug.

  • Null images get a stand-in of the right shape. A null image descriptor used to be replaced by one 2D RGBA8 image whatever the shader declared, which is undefined behaviour when the shader reads a cube, 3D, 1D, array, uint or sint image. The server now reads each pipeline's SPIR-V and picks a stand-in of the declared shape and numeric class (the idea comes from compat_layer). VKBRIDGE_NULLDESC_2D=1 brings back the old behaviour.
  • Copies from an uncompressed image into a BC image (vkCmdCopyImage, D3D11 CopyResource between block-compatible formats) now go through the BC decode/transcode path, so the emulated texture gets the blocks (the idea comes from bcn_layer). Copies out of a BC image into an uncompressed one are still not supported.
  • Descriptor batching stays off by default: the Risk of Rain 2 black flicker has no root cause yet. Two new client knobs split batching into its halves for testing: VKBRIDGE_DESC_BATCH=1 plus VKBRIDGE_DESC_BATCH_NOPACK=1 (framing only) or VKBRIDGE_DESC_BATCH_NOFRAME=1 (packed updates only). New host reproducers: flicker_check, d3d11_flicker, nulldesc_check.

Checked on the Mali-G720: Subnautica loads a save and plays (29-32 fps in a base), Stray reaches its menu (27-33 fps), with clean server logs. Host suite 30/30. New README row: Doki Doki Literature Club (title screen 91-92 fps, clip attached).

The protocol hash is unchanged (4a9da939fdf65896), so v0.2 / v0.2.1 / v0.3 servers and clients work together, but take both from here.

Attached files

  • libvkbridge_server.so, libvkbridge_jni.so: server (Android arm64-v8a, API 26+)
  • libvulkan_droidbridge.so, droidbridge_icd.json: client ICD (Linux glibc, aarch64)
  • doki-doki-literature-club.mp4: title screen on the G720