Files
sharpemu/docs/bink2-bridge.md
T
Miguel Cruz 864cbb0fa0 [AGC/Vulkan] Extend PS5 runtime and rendering compatibility (#216)
* [Core] Add POSIX native execution and PS5 SELF support

Extend the native backend, guest TLS, fixed-address memory, and loader paths needed by PS5 titles on Windows, Linux, and macOS. Keep workstation GC so high-core-count hosts do not reserve over fixed guest image bases.

* [HLE] Expand PS5 service and media compatibility

Add the kernel, threading, save-data, networking, audio, video-codec, font, dialog, and service exports required by newer PS5 software. Preserve every SysAbi NID currently registered by main while adding the compatibility surface used by ASTRO BOT.

* [AGC/Vulkan] Extend Gen5 shader and presentation support

Expand PM4 handling, Gen5 shader translation, MRT and packed export support, guest image tracking, depth initialization, texture aliasing, and Vulkan presentation. Add the performance overlay and address-filtered diagnostics used to validate ASTRO BOT with original shaders.

* [Core] Align static TLS reservation across hosts

* [Pad] Align primary user ID with UserService

* [Gpu] Preserve runtime scalar buffers across renderer seam

* [AGC] Restore omitted command helper exports

* [Vulkan] Reuse primary views for promoted MRT targets

* [Vulkan] Preserve scratch storage bindings in compute dispatches
2026-07-16 02:02:34 +03:00

2.0 KiB

Bink 2 bridge

Demon's Souls plays Bink 2 (.bk2) files through a Bink implementation linked directly into eboot.bin. It does not use libSceVideodec, therefore an HLE video decoder cannot observe or replace those frames.

SharpEmu observes successful guest .bk2 opens and, when a Bink bridge is available, presents its decoded BGRA frames at the normal guest-flip boundary. This preserves the game's own timing and lets the host Vulkan presenter display the movie without trying to execute the PS5-specific Bink GPU decode path.

Without an adapter, Bink movies are skipped by default: their open call returns not-found so games that mark cinematics as optional progress to their next state instead of waiting on an empty Bink GPU texture.

Set SHARPEMU_BINK_MODE=dummy to retain the open and show a built-in, non-decoded placeholder frame. This requires no SDK, but is a visual diagnostic only; it does not decode the movie or alter its game logic. Set SHARPEMU_BINK_MODE=native to force native bridge mode.

Supplying the adapter

Bink 2 is proprietary. Obtain a compatible Mac Bink 2 SDK from RAD Game Tools, then compile sharpemu_bink2_bridge.c against the SDK's bink.h and Mac library. The adapter deliberately contains only a three-function C ABI so the managed emulator never depends on RAD's private binary ABI.

Place the resulting libsharpemu_bink2_bridge.dylib next to the SharpEmu executable, or point to it explicitly:

SHARPEMU_BINK2_BRIDGE=/absolute/path/libsharpemu_bink2_bridge.dylib \
  ./SharpEmu /path/to/eboot.bin

The expected exports are sharpemu_bink2_open_utf8, sharpemu_bink2_decode_next_bgra, and sharpemu_bink2_close. The supplied adapter opens one movie, exposes BGRA pixels, and advances after each decoded frame. The managed side validates dimensions and retains ownership of the destination buffer.

If the bridge is absent in native mode, SharpEmu logs one informational line and retains the existing guest rendering path.