Repository navigation
Releases: ASEbrahim/MaliBridge
Release list
MaliBridge v0.5.3.1
APK: DroidDeck-MaliBridge-v0.5.3.1.apk
A hotfix for v0.5.3: on some phones (for example the Galaxy A16 and Galaxy F15), Steam closed right after tapping Play. This should resolve it. Everything else is the same as v0.5.3.
If you're on v0.5.3 and Steam starts fine, you don't need to update.
MaliBridge v0.5.3
If Steam closes right after you tap Play, use v0.5.3.1.
APK: DroidDeck-MaliBridge-v0.5.3.apk, with the Mali bridge on from the start. New here? See the install guide and Does my device work?
Highlights
- Steam mode on older Mali GPUs (G77, G710, G610, G57 and others on the same driver generation): Steam no longer stops at "starting display and audio". Thanks zachlagan and FireAngelx.
- OpenGL 4.6 on most Malis (G720, G615, G610, G710, G925, Dimensity 9500, Pixel 8), so LÖVE and Godot games start. G57 and G68 get OpenGL 4.2. Thanks 937797140.
- Dimensity 9500: a fix for scrambled textures (Library of Ruina, Lobotomy Corporation, Hollow Knight, Hades). Thanks ItsNotYJ and Ainlyy.
- Little Nightmares III: a fix for the black screen on the Dimensity 9500. Thanks mmtmt123.
- Huawei Kirin and Exynos 9820: a fix for Steam not starting. Thanks FireAngelx and timothyjustiniano.
- Xiaomi XRing O1: should work without a workaround. Thanks AzusaKe and AHin16.
Other changes
- Galaxy S26+ (Xclipse): a fix for Steam not starting.
- Share logs now includes Proton's log for each game.
- Stopping a session no longer looks like a crash in the logs.
- The session report shows the real MaliBridge version.
Tested
- Galaxy Tab S10+ (G720): Celeste, Stardew Valley, Risk of Rain Returns, Inscryption, Hollow Knight, Cuphead and Hades all run as before.
- Not confirmed on these phones yet: Dimensity 9500 textures, Little Nightmares III, Kirin/Exynos 9820, XRing O1, Xclipse, and Steam mode on a real G77/G710. Please tell me how it goes on yours.
Coming next
Optimization across the board. I have good plans in place.
Support
If MaliBridge helps you, you can support it on Ko-fi. Patreon is coming soon.
Attached files
DroidDeck-MaliBridge-v0.5.3.apk: DroidDeck Mali with MaliBridge built in (Android arm64).
MaliBridge v0.5.2
MaliBridge v0.5.2
APK: DroidDeck-MaliBridge-v0.5.2.apk. It installs over v0.5.1 and keeps your data (Steam login and games). New here? See the install guide and Does my device work?
What's better
- Resident Evil 2's flickering on the Tab S11 Ultra is fixed. Objects no longer blink in and out. It's on by itself for RE2 on the S11 Ultra's GPU (Mali-G925), nothing to set. I played it and saw no visual issues.
- Pixel 8, 8a and 8 Pro: DirectX games should start now. Before, every DirectX game stopped before its first frame on these phones (NieR's "No Graphic Memory", Cuphead's error box, Dead Space). Thanks to jsphonorio and mimic-ops for the logs.
- Steam's first download should finish. It no longer starts over when the app goes into the background, and a stalled connection gets retried instead of hanging.
- Xiaomi XRing O3 should work. The self-test and Steam's window should get through now. Thanks again to tutu123321-eng and ttrnf.
- Dimensity 9500 (Mali-G1-Ultra) should start cleanly. Some texture support was being turned off at start-up there by mistake.
- Fewer repeat stutters in big games. Games like Resident Evil 2 should no longer redo the same work on every launch.
- More reliable downloads, including from China. Runtime, package and Nightlies downloads retry and use mirrors, and when one still fails, it tells you why.
- Older Mali phones should run DirectX 9-11 games again. If your phone's Vulkan is 1.1 or 1.2, DroidDeck Mali now picks a DXVK that still runs there. There's a setting to keep Proton's own.
- RE Engine games should be less likely to hang a few minutes in (Resident Evil, Devil May Cry 5, Monster Hunter Rise).
- Driver fixes for the Tab S10+ and S11 Ultra GPUs, and a faster bridge server.
Tested
- Galaxy Tab S11 Ultra (Mali-G925): self-test 13 of 13; Resident Evil 2 (DX11) with no flicker, about 42 fps in the police station.
- Galaxy Tab S10+ (Mali-G720), on a v0.5.2 test build: self-test 13 of 13; my usual games run as before (Celeste 60 fps, Stardew Valley 60, Risk of Rain Returns 60, Inscryption 77-91, Hollow Knight 64 in King's Pass, Cuphead and Hades well over 100 in the menus).
- Pixel 8 / 8a / 8 Pro, XRing O3, Dimensity 9500 and the older Malis: built from your logs, not confirmed on a device yet. Please post in Device reports.
Known issues
- Mali-G68 devices (Galaxy A16 5G, Tab S9 FE+) go black after the self-test. I need logs for this one, see #3.
- Dark Souls II shows a black screen on the S11 Ultra (Mali-G925).
- Resident Evil 2's DX12 version is too dark on the S11 Ultra. The DX11 version is fine.
- Anti-cheat games (EAC and similar) are out of scope.
- The ones from v0.5.1 are still open (The Witcher 3 on the G925, Just Cause 2, the CPU-bound games).
Attached file
DroidDeck-MaliBridge-v0.5.2.apk: DroidDeck Mali with MaliBridge built in (Android arm64), signed with MaliBridge's own key.
SHA256:82c22f8681d0ee8b0b21f189bbfe5d260ba31a87cca8f38965700faa6c125b47
Source for this release isn't published yet.
MaliBridge v0.5.1
MaliBridge v0.5.1
Test APK: DroidDeck-MaliBridge-v0.5.1-test.apk, with the Mali bridge on from the start. Players only need the .apk; the other files are for developers building their own launcher. New here? See the install guide and Does my device work?
Highlights
- Fixed a bridge crash when Steam's web view restarts while a game launches. This bug is also in v0.5.
- Xiaomi XRing O3 (Mali-G2-Ultra) gets further. v0.5 fixed images on this GPU, but buffers still found no memory type: its driver wants different memory types for buffers than for images. The bridge now offers one for each. Thanks to tutu123321-eng and ttrnf for the detailed reports.
- More gamescope builds work. Some builds (like the non-Adreno test branch's) pick an imported image's memory type from what the driver reports for it. The bridge reported none, so Steam never drew. Fixed.
- 14 more games measured on the Galaxy Tab S10+: GRIS (excellent, ~105 fps), Garry's Mod (very playable, 49-54 fps on gm_construct), Dark Souls Remastered, Phoenix Wright, Poppy Playtime, The Forest and more. 31 games I've tested are now playable or better. See Games that run.
- Safer extension calls. An app could get a function for an extension the GPU doesn't have and crash calling it (Lee Gao found this with calibrated timestamps). Those calls now answer "not supported" instead.
Other changes
- The Mali bridge is on by default.
- Builds are signed with MaliBridge's own key, so only official MaliBridge builds can update them. If you installed a build from before Oct 19 (or one from elsewhere), uninstall it first: Android won't update across different signatures. This removes its Steam login and installed games.
- Two copies of DroidDeck no longer clash over controller vibration.
- The session report's
run-ashint names the right app. - Docs: a quick start, device tables (tested, and help wanted), and an FAQ (storage, which Proton, PanVK, anti-cheat, what to send when something fails). A device report form for issues.
Tested
- Galaxy Tab S10+ (Mali-G720): self-test 13 of 13; Steam's window draws; Risk of Rain Returns 59-60 fps; Inscryption 63-74 fps; four launch-and-quit rounds with no crash (the crash above happened once before the fix). Half-Life 2 is unchanged from v0.5 (about 74 fps on the train ride).
- Galaxy Tab S11 Ultra (Mali-G925): the test suite checks that its memory setup is unchanged; all 94 tests pass.
- Xiaomi XRing O3: the fix is built from the testers' posted memory table and isn't confirmed on the device yet.
Known issues
Same as in v0.5: The Witcher 3 stalls after loading a save on the G925, Stray uses plain colours on the G925, Just Cause 2 doesn't start (Steam's copy protection times out), and the CPU-bound games (The Forest, ASTRONEER, Outer Wilds) are limited by the processor. On the S10+, Outer Wilds runs short of memory.
Attached files
DroidDeck-MaliBridge-v0.5.1-test.apk: DroidDeck Mali with MaliBridge built in (Android arm64). 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)
MaliBridge v0.5
MaliBridge v0.5
Re-signed on Oct 19, 2026 with MaliBridge's own key, so only official MaliBridge builds can update it. The code is unchanged. If you installed v0.5 before Oct 19, uninstall it first (Android won't update across different signatures). This removes the Steam login and installed games. Newer: v0.5.1.
Test APK: DroidDeck-MaliBridge-v0.5-test.apk is DroidDeck with MaliBridge built in. Install it on a Mali device, turn on the Mali bridge in Settings and start a Steam session; see INSTALL.md.
Highlights
On a Galaxy Tab S10+ (Mali-G720) or Galaxy Tab S11 Ultra (Mali-G925), v0.5 works well: of the 36 games we've tested on these two tablets, 26 run well, most at or near their frame cap, through Steam with the tablets' own GPU drivers.
| Game | Mali-G925 (Tab S11 Ultra) | Mali-G720 (Tab S10+) |
|---|---|---|
| Half-Life 2 | Excellent, ~94 fps | Excellent, ~74 fps |
| Hollow Knight: Silksong | Excellent, 72-96 fps | Excellent, 62-66 fps |
| Risk of Rain Returns | Excellent, 59-60 fps | Excellent, 59-60 fps, boss fight included |
| Stardew Valley | Excellent, 57-62 fps | Excellent, 60 fps (cap) |
| Dark Souls Remastered | Very playable, 54-60 fps (cap 60) | not tested yet |
| Garry's Mod | Excellent, 82-104 fps | not tested yet |
| GRIS | Excellent, ~119 fps | not tested yet |
| Ace Attorney Trilogy | Excellent, ~118 fps | not tested yet |
| Stray | not rated yet, ~58 fps on the title screen | Barely runs, 17 fps |
| Subnautica | Very playable, 28-40 in play | Playable, 20-24 in play (Detail High) |
Ratings, worst to best: barely runs, kinda playable, playable, very playable, excellent. The full list of 36 is in the README. On other Mali GPUs this is still a test: results depend on the GPU and its driver. The start-up checks and safe mode (below) exist so that a new device starts with the safest settings. Logs from other devices are very welcome (INSTALL.md has the steps).
What's new
This release is mostly about knowing what a device can do before a game finds out. The server now checks the driver at start, applies fixes for known Mali driver bugs, and starts in a new safe mode by default. Tested on two tablets (Galaxy Tab S10+ with a Mali-G720, Galaxy Tab S11 Ultra with a Mali-G925), plus reports from players.
Safe mode, on by default
- Safe mode (the default): wherever the bridge has not confirmed that this GPU and driver handle something correctly, it keeps its workaround. Performance mode (Settings, "Safe mode: off") uses the driver's own paths where the start-up checks passed, waits 20 s instead of 10 s before stepping in on a slow shader compile, and uses cached readback for the frame copy.
- We recommend starting in safe mode, and trying performance mode once a game works.
- On our two tablets the difference is small. Median fps, one run per game and mode:
| Game (scene) | G720 safe | G720 performance | G925 safe | G925 performance |
|---|---|---|---|---|
| Half-Life 2 (train ride) | 74.1 | 75.9 | 93.7 | 93.7 |
| Subnautica (menu) | 62.0 | 62.3 | 81.3 | 81.5 |
| Stray (title) | 17.1 | 15.8 | 58.4 | 58.0 |
| Stardew Valley (title, 60 cap) | 60.0 | 60.0 | 60.0 | 60.0 |
| Risk of Rain 2 (title) | 35.6 | 35.8 | 56.8 | no clean run |
| Skyrim SE (main menu, 60 cap) | 60.7 | 60.7 | not tested | not tested |
Safe mode matters most on GPUs we have not tested.
- The switch applies from the next session.
VKBRIDGE_MODE=safe|performancesets it outside DroidDeck.
New games and device results
- Stray runs on the Mali-G925. The G925's compiler never finishes Unreal Engine 4's colour-grading shader. The compile watchdog from v0.4 is now confirmed on the device: the first launch waits 10 s once, then uses a neutral colour grade in its place, and later launches use it at once. The title screen runs at about 58 fps. The colours are plain rather than the game's own grading until the shader rewrite is done.
- Dark Souls Remastered on the Mali-G925 (owner-played, 10 minutes, safe mode): median 53.7 fps, lowest 43.9, never below 40, and 60 fps (its cap) while the tablet is cool. Cutscenes render correctly, no crash.
- Garry's Mod on the Mali-G925 (owner-played): median 104 fps on a plain map; median 82 fps on the Golden City Sandbox map, lowest 34.
- The Witcher 3 (DX12) on the Mali-G925: the intro plays at 60 fps (see known issues for what happens after loading a save).
- Community games on the Mali-G925. We picked 13 owned games that players often try on Mali (from GameNative's public crowd reports) and played them with v0.5 test builds, some ourselves and some by the owner. Median or typical fps in play:
| Game | G925 | Note |
|---|---|---|
| Phoenix Wright: Ace Attorney Trilogy | ~118 | the 120 Hz display rate |
| GRIS | ~119 | |
| A Dance of Fire and Ice | 106-113 | no input delay noticed with a Bluetooth PS5 controller |
| Risk of Rain Returns | 59-60 | needs the video texture fix below; also 59-60 on the Mali-G720, boss fight included |
| Stick Fight: The Game | 59-60 | its cap |
| Helltaker | ~59 | |
| Don't Starve Together | 60 | only with PROTON_USE_WINED3D=1 (known issues) |
| Muck | 45-48 | |
| R.E.P.O. | ~40 | |
| Poppy Playtime (Ch. 1) | 28-32 | neutral colour grade, as Stray |
| The Forest | 30-45 | CPU-bound, the same at any resolution |
| Outer Wilds | 17-80 | ~75-80 in space, 35-45 on the starting planet, ~17 at the black hole |
| ASTRONEER | 17-20 | renders correctly; CPU-bound |
For context only: GameNative's crowd reports (another app, many Mali devices) rate Outer Wilds, The Forest and ASTRONEER low on Mali. That is not a like-for-like comparison.
- These games, plus Dark Souls Remastered and Garry's Mod, were tested on the Mali-G925. On the Mali-G720 only Risk of Rain Returns has been tested so far (59-60 fps).
New device support and fixes
- Driver bug fixes. A layer just above the driver fixes ten known Mali driver bugs, each decided per device from the driver version, the bug's known range, a start-up check where there is one, and the mode. The log says why each one is on or off.
VKBRIDGE_ERRATA=+name,-nameforces one.wait_retry: waits that fail withVK_ERROR_INITIALIZATION_FAILEDafter a signal are retried for the app's whole timeout. v0.4 covered semaphore and fence waits; now idle waits, query waits and fence status too.viewport_flip: for drivers that ignore a negative viewport height (reported on a Mali-G715 r54p2). Checked at start. Untested on an affected driver: we have none; on our tablets it was verified forced on.bitwise_scalar: integer vector bitwise ops on a swizzle are miscompiled on r18p0-r53p0. Both tablets fail this check.dyn_reemit: dynamic state lost or mis-applied across pipeline binds.vb_split:vkCmdBindVertexBuffers2strides applied by array index.view_quarantine: stale state for a recycled image view handle invkCmdBeginRendering(r49p1-r49p2, r50p0-r51p0; on for the G925).view_counts: a 2D-array view of a 3D image withVK_REMAINING_ARRAY_LAYERS. Without the fix the G720 driver crashed the server.cull_nontri: dynamic cull mode culling points and lines below r52.clamp_zero: a clamp with a zero limit miscompiled into a min or max (Godot's fullscreen triangle).dedicated_import: imports carrying a dedicated-allocation struct for a resource not made for that handle type (older drivers).
- Video textures on the Mali-G925: games that decode intro videos through Media Foundation froze, because the driver refuses multi-planar (NV12) images created with
MUTABLE_FORMAT | EXTENDED_USAGE, which DXVK uses for them. Where the format already covers the usage, the client now leaves out the extended usage flag. Risk of Rain Returns now runs at 59-60 fps on both tablets.VKBRIDGE_PLANAR_EXT_FIX=0turns it off. - Xiaomi XRing O3 (Mali-G2-Ultra): every image failed there (self-test 9 of 13, "no memory type for the image") because the driver does not list its first device-local type for images. The client now backs its device-local type with one that images allow. The host suite imitates that driver and passes, but the fix is not yet tested on the device.
- Fixes from The412Banner's testing of an early copy of the bridge on Mali-G615 and Mali-G925 phones: a crash in
vkBeginCommandBufferfrom a malformed begin info (the decoders now refuse a single-element pointer without the count 1), and the self-test now says when no memory type is host-visible. Crash lines now name the faulting library and offset, and inside a replayed command buffer its last commands. - Polygon mode LINE and POINT (wireframe,
fillModeNonSolid; DXVK 3 will not start without it) are now drawn as lines and points instead of solid. This covers indexed draws (edges written by a compute shader), strips, fans, restarts, dynamic topology (vkd3d-proton) and secondary command buffers (DXVK 3 records render passes into them on Mali). The G925 driver lacksfillModeNonSolidtoo, so it uses this as well. The device test passes 21 of 21 on both tablets. In game, Half-Life 2's wireframe (mat_wireframe 1) now draws as lines on the Mali-G720, where v0.4 drew it solid; it has not been checked in a game on the G925. - Shift barriers: a no-op after each left shift by a constant, so Mali's compiler cannot fold the shift into speculative memory accesses that fault the GPU (Lee Gao's MaliOptimizationBarrierPass, ported to C). On for every Arm GPU;
VKBRIDGE_SHL_BARRIER=0turns it off. - Pixel 9 (Mali-G715): the memory-sharing log now says why each strategy failed, and dma-buf is skipped where the driver exports nothing. Not retested on the device with v0.5.
- The server logs which
*_SCALEDve...
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
MaliBridge v0.3.2
MaliBridge v0.3.2
- Mali memory types: Mali drivers list a lazily allocated memory type (
0x11) and a protected one (0x21) next to the normal ones. Export emulation now never picks either of them, and an image whose dma-heap allocation fails falls back to plain memory. The server, client and smoke test now log every memory type, the path each allocation takes, and the VkResult of any failure. This came out of a Pixel 9 (Mali-G715, r54p3) log: that tester's build carried an older copy of the bridge whose client treated the lazily allocated type as ordinary video memory, so every image allocation failed. A newlazymemhost imitation reproduces that failure. - Server fix: the pipeline cache directory is now a copy of the string. The in-app start freed the string after
server_init, while the cache code kept a pointer to it. Found by The412Banner (DroidDeck test branch, e40cd361). - New README rows: Half-Life 2 runs at 59-74 fps in the opening chapter (clip attached), and Portal 2 runs at about 45-50 fps in play with drops to around 30.
On the Mali-G720 the self-test passes 13 of 13 checks; the host suite passes 31 of 31. The protocol hash is unchanged (4a9da939fdf65896).
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)half-life-2.mp4: the opening of Half-Life 2 on the G720
MaliBridge v0.3.1
MaliBridge v0.3.1
VKBRIDGE_BC_TRANSCODE_QUALITY=fast(server side; also from<cache dir>/env): a cheaper search in the ETC2/EAC/ASTC encoders for faster texture uploads. On the Mali-G720 a 4096x4096x2 BC7 upload takes 216.9 ms instead of 272.8 ms (-20%), and image quality drops by 0.3-1.2 dB PSNR inbcn_check transcode, with every check still passing.defaultis bit-identical to v0.3.highexists but gave no gain on the test images, for 371 ms.- Client fix: when two threads made their first call at the same moment, each could pick its own process token, and the server would treat them as two processes. They now share one.
- Host testing:
make TSAN=1builds a ThreadSanitizer client and server intohost/out-tsan. A TSAN run of the batching path found no race, which rules out an ARM memory-ordering explanation for the Risk of Rain 2 flicker. Descriptor batching stays off by default.
The new BC copy-in tests from v0.3 also pass on the G720. The protocol hash is unchanged (4a9da939fdf65896).
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)
MaliBridge v0.3
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=1brings back the old behaviour. - Copies from an uncompressed image into a BC image (
vkCmdCopyImage, D3D11CopyResourcebetween 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=1plusVKBRIDGE_DESC_BATCH_NOPACK=1(framing only) orVKBRIDGE_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
MaliBridge v0.2.1
MaliBridge v0.2.1
Descriptor batching is now off by default. With it on, Risk of Rain 2 (Unity, DXVK) showed black flickering on the Mali-G720; with it off the game plays cleanly at about 20 fps. The batching gave no measurable fps gain in the games tested (they are GPU-bound), so correctness wins until the bug is found.
VKBRIDGE_DESC_BATCH=1(client side) turns the batching on.VKBRIDGE_NO_DESC_BATCH=1still forces it off.- Everything else is as in v0.2: faster ASTC transcoding, BC6H -> ASTC HDR, the compat fixes. The protocol hash is unchanged (
4a9da939fdf65896): server and client from v0.2 and v0.2.1 interoperate, but take both from here.
New in the README's games table: Inscryption (runs well, 68-83 fps) and Risk of Rain 2 (runs, 15-23 fps in the first stage).
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)