bloodborne_pc README

The project's README from github.com/deadinside28/bloodborne_pc. As one markdown file: README.md.

THIS PROJECT IS NOT RELATED TO SHADPS4. ALL QUESTIONS RELATED TO THIS PROJECT SHOULD BE SENT TO THE DISCORD SERVER https://discord.gg/KYZRKk9CB, NOT TO THE SHADPS4 SERVER.

bbport — a native Linux port of Bloodborne

English · Русский

bbport runs the original PlayStation 4 executable of Bloodborne (CUSA03173, game version 1.09) directly on an x86-64 Linux PC. It is not a general emulator. The game's own x86-64 code executes natively; a small runtime written for this one game replaces the PS4 system libraries; the GPU work is translated to Vulkan by a renderer derived from shadPS4 and heavily extended for this game, including temporal upscaling with AMD FSR 3.1, FSR 4 and FSR 4.1.1.

No game files are included. You need your own dump of Bloodborne (CUSA03173, v1.09). This project is not affiliated with Sony Interactive Entertainment, FromSoftware or AMD.

Status: experimental, playable. The game boots, loads saves and plays (the Hunter's Dream and several areas of Yharnam were played with it) with sound, gamepad and saving. A full play-through has not been verified, and only one machine (Linux, AMD Radeon RX 7800 XT, Mesa/RADV) has been tested thoroughly.

Highlights

How it differs from shadPS4

shadPS4 bbport
Scope General PS4 emulator, many games One game: Bloodborne v1.09
Loading Its own ELF loader and kernel emulation at run time The eboot is converted offline (scripts/) into an image with PS4 libc/Fios2 linked in; a C loader maps it and jumps into the game (loader and runtime: ~5k lines)
System libraries Broad HLE of the PS4 OS A small runtime (src/runtime_*.c) that implements exactly what Bloodborne calls: memory, threads, sync, files, audio (incl. ATRAC9), pad, saves, AppContent
GPU shadPS4 video core and shader recompiler The same core (vendored, GPL) with ~200 marked changes (bbport:) plus new modules: two-stage draw pipeline, render-state and texture-set memoization, render-scale proxies, motion vectors, FSR 3.1/4/4.1.1, frame capture and GPU profiler
GPU thread One thread processes the whole command stream (the bottleneck in Bloodborne) Decode and draw recording run on separate threads; the work scales with the hardware threads (Steam Deck included)
Upscaling — Temporal (FSR 3.1, FSR 4, FSR 4.1.1) with the game's own motion vectors and jitter
Game patches Patch files applied by the emulator The same community patches, compiled at start (scripts/patches.py); render resolution, effects and FPS from the launcher

Without shadPS4 there would be no bbport: its renderer and shader recompiler are the base of the graphics side.

Requirements

Build and run

git clone --recursive <this repository> bbport && cd bbport
bash build.sh                        # builds out/bb-probe and out/gpu/libbbgpu.so
BB_GAME_DIR=/path/to/CUSA03173 bash run.sh

or the launcher (pick the game folder, settings, Start):

bash launcher/bb-launcher.sh         # launcher/install-desktop.sh adds it to the app menu

By default the game folder is expected next to the repository (../CUSA03173). Saves and the shader cache go to user/ (the launcher lets you choose another folder); settings to bbport.ini. A gamepad is used through SDL3; there is a keyboard fallback.

Resolution and preset changes: for outputs other than 1080p (720p on the Steam Deck, 1440p, 4K) the whole game renders at the preset's resolution, set by a patch at start — the fastest path. Changing the output or the preset in the in-game menu then needs Apply and restart the game. The Live resolution changes setting (launcher, in-game menu, bbport.ini live_resolution=0|1|auto; off by default) instead keeps the game at 1080p internally and scales its render targets at run time, so 720p/1080p/1440p/4K and the presets switch without a restart. It costs more: the game then believes it renders 1080p and draws more (e.g. ~8× more small lights), and some targets are copied between sizes — use it on strong desktop GPUs only (auto turns it on for discrete GPUs with 8+ GB that are not pre-Turing NVIDIA). 1080p output and TAA always use the live path.

TAA: a separate native-resolution temporal AA mode in the launcher and overlay, switchable live without an FSR model. The saved FSR preset is restored when returning to FSR. FSR Native AA adds reconstruction on top of full-resolution rendering and can be slower than disabling AA. TAA also adds work compared with no temporal AA. The RCAS switch and the 0–2 sharpness control also work with TAA. Sharpening runs after temporal accumulation and leaves its history and HUD unchanged.

Mods: the launcher accepts separate loose-file mod folders (with dvdroot_ps4/, an extra wrapper folder, or the game folders such as chr/ directly; file name case does not matter), with enable switches and load order. A sibling CUSA03173-mods/ overlay also works. The original game is preserved; later mods override conflicting files. Third-party patches: shadPS4-format XML patch files in the data directory's patches/, switched on and off in the launcher. See mods and patches.

Launcher language: Russian or English (follows the system language by default).

Free camera and game debug menu (v1.09): enable the corresponding switches in the launcher or in-game menu and restart. Free camera uses Lance McDonald's GoldHEN patch: hold Cross and press L3 to cycle modes (keyboard: hold Space and press Z). It needs no fonts and conflicts with Enemy Control. For the game debug menu, install DbgFont14h.ccm and DbgFont14h.tpf from Debug Menu and XML Patch into the game's dvdroot_ps4/font/ first. Startup rejects missing or empty font files instead of launching the unsafe patch. Open it with the left touchpad / Tab; Backspace is the right touchpad. Touch coordinates are forwarded from SDL gamepads; Back/Select emulates a left click on pads without a touch surface. The port's settings menu remains Insert / L3+R3.

GPU occlusion queries still use synthetic pixel counters (PixelPipeStatDump), and IT_SET_PREDICATION is unimplemented. Free camera allows visual investigation; it does not implement GPU occlusion culling.

Upscaler assets (not included; FSR 3.1 needs none):

bash tools/fetch_fsr4_assets.sh      # FSR 4 v07 (MIT, built from AMD's source by Q2RTX)
# FSR 4.1.1, from your own AMD DLLs (e.g. OptiScaler's FSR4_LATEST), needs Proton (GE-Proton):
bash tools/fsr4cap/build_assets.sh <amd_fidelityfx_upscaler_dx12.dll> <amd_fidelityfx_loader_dx12.dll>

AppImage (Steam Deck): bash build.sh && bash packaging/appimage.sh → dist/Bloodborne-bbport-x86_64.AppImage; data in ~/.local/share/bbport, --play starts the game without the launcher window (Game Mode). FSR 4.1.1 models are not packaged: build them (see above) into ~/.local/share/bbport/fsr4_411 (BB_PACKAGE_FSR411=1 bundles a local fsr4_411 into an AppImage for your own devices). On the Steam Deck pick the 1280×720 output (the game is 16:9; on the 1280×800 screen it gets thin bars).

Adding the AppImage to Steam (Add a Non-Steam Game) needs no options; the compatibility tool does not matter. (Steam preloads its overlay into every non-Steam game; the AppImage removes it before its own programs start, so the Steam overlay is not shown in the game.) Where Steam runs games without FUSE (NixOS: Steam's FHS sandbox; the AppImage then exits with Cannot mount AppImage), set the launch options to

TMPDIR=$HOME/.cache APPIMAGE_EXTRACT_AND_RUN=1 NO_CLEANUP=1 %command%

The AppImage then unpacks itself (2 GB, `/.cache/appimage_extracted_*) on the first start (~10 s) and reuses that copy afterwards; a new AppImage version gets a new copy, the old one can be deleted. Without TMPDIRit would unpack into Steam's/tmp, which is in RAM there. Add --playafter%command%` to skip the launcher.

NVIDIA in the AppImage: startup discovers the host's installed 64-bit NVIDIA Vulkan ICD and exposes its vendor libraries alongside the bundled AMD/Intel drivers. This keeps the NVIDIA userspace driver matched to the host kernel module. Standard Linux distributions keep these libraries under /usr/lib*; on NixOS the AppImage's internal /nix/store may hide them. In that case copy the NVIDIA libraries into an accessible directory and set BB_NVIDIA_LIB_DIR=/path/to/libraries (the NVIDIA manifest must also be accessible). Explicit VK_DRIVER_FILES/VK_ICD_FILENAMES overrides are preserved. Diagnose drivers inside the package with:

./Bloodborne-bbport-x86_64.AppImage --vulkan-info 2>&1 | tee bbport-vulkan.log

A user reported successful startup with FSR 3 on a GTX 1060 6GB (Fedora 44, NVIDIA 580.178.04); selecting FSR 4 caused a black window. Use FSR 3 on this configuration.

MangoHud is bundled in the AppImage; enable its checkbox in the launcher. When running from source, install MangoHud separately. A diagnostic launch with VK_LOADER_LAYERS_DISABLE=~implicit~ also disables MangoHud.

Useful variables: BB_FRAME_STATS=1 (frame statistics), BB_GPU_PROFILE=1 (GPU time per pass), BB_FSR4_PROFILE=1 (GPU time per FSR 4 pass), BB_UPSCALER=taa|fsr3|fsr4|fsr411|off|none, BB_FRAMES_AHEAD=N (how many frames the GPU command thread may run ahead of the GPU; 1 by default, 0 = unbounded), BB_PRESENT_THREAD=0 (present on the vblank thread, as before), BB_LIVE_RES=1 (live resolution changes instead of the startup patch for outputs other than 1080p), BB_PAD_RECORD=file / BB_PAD_REPLAY=file (record a route with F9, replay it in scripted tests), BB_GC_BUDGET_MB=N (texture cache budget, as on integrated GPUs), BB_PRESENT_DUMP_TRIGGER=file with BB_PRESENT_DUMP_COUNT=N (dump N consecutive presented frames). More in docs/; recent changes: docs/CHANGES_2026-10-02.md, docs/CHANGES_2026-10-03.md.

Repository layout

Path Contents
src/ Loader (probe.c) and the HLE runtime
scripts/ Offline preparation of the game image, module linking, patch compiler
gpu/ Renderer library: vendored shadPS4 video core with this port's changes (gpu/VENDOR.txt), shims, ImGui menu, FSR 4.1.1 runtime (gpu/shadps4/video_core/renderer_vulkan/fsr411)
launcher/, packaging/ GTK4 launcher; Nix package and AppImage
patches/ Community patches for Bloodborne
tools/ Developer tools: scripted runs, A/B toggles, FSR benchmark helpers, FSR 4 shader rewrites, fsr4cap (FSR 4.1.1 recording/extraction)
tests/ Loader, runtime, patch and renderer tests
docs/ Design notes and measurements (upscaler, parallel GPU, motion vectors, roadmap)

Tests: bash build.sh --test, python3 -m unittest discover -s tests, and ninja -C out/gpu motion-history-test ui-composition-test scene-resolution-test motion-shader-test.

Roadmap

Credits and licenses

bbport is licensed under the GNU GPL v2 or later (LICENSE) — it contains code from shadPS4 (GPL-2.0-or-later). Third-party components keep their licenses: shadPS4 video core and shader recompiler (GPL-2.0+), sirit, half, FSR-Vulkan by FireBurn (MIT; FSR 3.1 on Vulkan and the FSR 4 v07 provider), AMD FidelityFX SDK (MIT), LibAtrac9 (MIT), Dear ImGui (MIT), DejaVu fonts, dxil-spirv (MIT, used to build the FSR 4.1.1 assets). Game patches by Kyo, Lance McDonald, auser1337, illusion, emoose and other community members (patches/Bloodborne.xml). AMD's FSR 4 DLLs and model data are not distributed here.

bloodborne_pc (deadinside28/bloodborne_pc)

Searching Database…

这是什么?bbport 是 Bloodborne(CUSA03173,v1.09)的 Linux 原生移植,可在 x86-64 Linux PC 上直接运行原始的 PS4 可执行文件。它不是通用模拟器——游戏自身的代码以原生方式执行,一个小型自定义运行时取代了 PS4 系统库,而源自 shadPS4 的 Vulkan 渲染器负责 GPU 部分,包括使用 FSR 3.1/4/4.1.1 的时域超分。
它是像 shadPS4 那样的通用 PS4 模拟器吗?不是——bbport 专为这一款游戏打造。eboot 会在离线状态下转换为原生内存映像,并链接 PS4 libc 和 libSceFios2,因此游戏运行时无需逐指令的 CPU 模拟;shadPS4 的 GPU 渲染器被引入并大幅扩展,而不是作为通用模拟器核心复用。
怎么构建并运行它?使用 GCC、CMake、Ninja、Python 3、glslang、SDL3 和 Vulkan 头文件构建(或让 Nix 的 shell.nix 提供全部依赖),把你自己的 CUSA03173 游戏文件夹放在仓库旁边,然后通过 GTK4 启动器启动。在 Steam Deck 上,运行“bash build.sh && bash packaging/appimage.sh”来生成 AppImage。
需要我自己有一份 Bloodborne 吗?需要——项目不包含任何游戏文件。你必须提供自己解密好的 CUSA03173 转储(eboot.bin、scemodule 等),版本须为 1.09,另外还需要一块支持 Vulkan 1.3 的 GPU。
现在整个游戏都能完整玩通吗?目前仍是实验性状态:猎人梦境和亚楠的若干区域已经可以在音效、手柄和存档正常工作的情况下玩通,但完整通关尚未经过验证,而且只有一台机器(Mesa/RADV 上的 AMD RX 7800 XT)经过了充分测试。
它能在 NVIDIA GPU 上运行吗,还是只支持 AMD?两者原则上都支持——AppImage 会自动检测主机的 NVIDIA Vulkan 驱动,并将其与内置的 AMD/Intel 驱动一同提供——但 FSR 4 需要特定的着色器特性,据反馈在 GTX 1060 这类较旧的 NVIDIA 显卡上会失败,此时可改用 FSR 3。
没有 AMD 官方的 Linux 着色器,FSR 4.1.1 是怎么工作的?bbport 在 vkd3d-proton 下一次性记录 AMD 官方的 FSR 4.1.1 DLL,然后在 Vulkan 上原生重放其各个处理阶段,输出与 DLL 的结果逐位一致;相关资源通过 tools/fsr4cap 从你自己的 DLL 在本地构建。
它支持 Mod 吗?支持——启动器可以加载单独的散装文件 Mod 文件夹或同级的 CUSA03173-mods/ 覆盖目录,支持启用开关和加载顺序,还支持 shadPS4 格式的 XML 补丁文件用于额外调整。
它在 Steam Deck 上运行效果如何?有一个专门的 AppImage,用“bash build.sh && bash packaging/appimage.sh”构建,内置 MangoHud 并在启动前去掉 Steam 覆盖层;在 Deck 上请选择 1280x720 输出,因为游戏是 16:9,而屏幕是 16:10。
为什么它比典型的单线程模拟器快这么多?PS4 命令流解码和 GPU 绘制记录在独立线程上运行而不是单线程,帧率因此从大约 26 FPS 提升到 90-150 FPS,具体取决于分辨率和场景。
Size
5.5 MB
Stars
3.3K
Age
18d
Commits · 90 Days