ДАННЫЙ ПРОЕКТ НЕ ИМЕЕТ ОТНОШЕНИЯ К SHADPS4. ВСЕ ВОПРОСЫ, СВЯЗАННЫЕ С ЭТИМ ПРОЕКТОМ - ПИШИТЕ НА ДИСКОРД СЕРВЕР https://discord.gg/KYZRKk9CB, А НЕ НА СЕРВЕР SHADPS4 # bbport — нативный порт Bloodborne для Linux [English](README.md) · **Русский** bbport — это аналог Wine + DXVK, только для одной игры: *Bloodborne* для PlayStation 4 (CUSA03173, версия игры 1.09) на ПК с Linux x86-64. Оригинальный исполняемый файл игры запускается прямо на ПК: - **как в Wine**, x86-64-код игры выполняется на процессоре напрямую, а системные библиотеки PS4 заменяет собственный рантайм, написанный под эту игру; - **как в DXVK**, графика игры переводится в Vulkan — рендером на основе [shadPS4](https://github.com/shadps4-emu/shadPS4), сильно доработанным под Bloodborne, вплоть до временного апскейлинга AMD FSR 3.1, FSR 4 и FSR 4.1.1; - память и работа видеочипа на AMD по умолчанию устроены как у игры для ПК (новая модель памяти и трансляции); NVIDIA и другие видеокарты пока работают со старой моделью памяти, как в 0.3. В лаунчере *Модель памяти* переключается в обе стороны. До полной модели Wine + DXVK остался один шаг: новая модель и на NVIDIA, затем удаление старой модели памяти (см. ниже). > **Файлов игры в репозитории нет.** Нужен свой дамп Bloodborne с обновлением 1.09: любое издание > из магазина (CUSA00900 в США, CUSA03173 — европейское Game of the Year, ...): у них один и тот же > исполняемый файл. > Проект не связан с Sony Interactive Entertainment, FromSoftware и AMD. **Состояние: экспериментальный, играбельный.** Игра запускается, загружает сохранения и проходится (Сон Охотника и несколько локаций Ярнама) со звуком, геймпадом и сохранением. Полное прохождение не проверено; основательно проверена одна машина (Linux, AMD Radeon RX 7800 XT, Mesa/RADV). ## Что сделано - **Нативное исполнение.** eboot заранее превращается в плоский образ памяти, в который как нативный код прилинкованы libc и libSceFios2 из PS4. Никакой эмуляции процессора и трансляции инструкций: код игры работает на полной скорости. - **Две модели памяти** (лаунчер → *Режим работы → Модель памяти и трансляции*; *Авто*, по умолчанию, выбирает по видеокарте): - **Старая модель памяти, как в 0.3, — по умолчанию на NVIDIA, Intel и других.** Копии памяти игры в VRAM, записи отслеживаются защитой страниц. Со всеми исправлениями после 0.3 (векторы движения и апскейлер, мерцание при включённом DoF, повреждённый кэш шейдеров). - **Новая модель памяти и трансляции — по умолчанию на AMD.** Память игры находится в оперативной памяти, и GPU читает её на месте, как буферы игры для ПК; то, что он читает часто, держится в видеопамяти и освобождается, когда перестаёт использоваться (текстуры — через 20 с, буферы — через 60 с). Модуль памяти прослойки отслеживает записи CPU в блоки с зеркалами для согласования данных; вся память, видимая GPU, не копируется. Работа командного процессора PS4 переводится в команды Vulkan, а не эмулируется на процессоре: записи в память (`WRITE_DATA`, DMA) выполняет видеочип в порядке потока команд, метки (fences) пишет сам видеочип в конце конвейера, в той же точке потока, что и командный процессор PS4. На AMD память игры держится в sparse-буфере (арене); на NVIDIA, Intel и других — через модуль памяти прослойки: привязывается на месте, копии в VRAM — отдельные буферы, без sparse-перепривязок (на NVIDIA sparse binding держал видеочип секундами); `BB_LAYER_MEMORY=1/0` — выбрать вручную. Проверено на RX 7800 XT. На NVIDIA её можно выбрать вручную (*Новая*); у тестеров результат зависит от сцены, в части сцен медленнее старой модели, поэтому там она пока не по умолчанию. На Intel не проверялась. Без лаунчера — `BB_PC_MODEL=1/0` (не задано — по видеокарте, как *Авто*). [Изменения в 0.5](docs/CHANGES_0.5.md); пререлизы: [pre4](docs/CHANGES_0.5-pre4.md), [pre3](docs/CHANGES_0.5-pre3.md), [pre2](docs/CHANGES_0.5-pre2.md). Неиспользуемые текстуры освобождаются в обоих режимах, поэтому видеопамять больше не растёт с каждой локацией. - **Разблокированная частота кадров.** Патчи сообщества (`patches/Bloodborne.xml`) переводят симуляцию на реальное время кадра; ~90 FPS в 4K с FSR 4 Balanced на RX 7800 XT, ~150 FPS в 1440p с FSR 4 Quality. Есть режимы 30/60/90 FPS. - **Временной апскейлинг под эту игру.** Буфера скоростей в Bloodborne нет, поэтому порт считает векторы движения сам: движение камеры — по глубине и матрицам сцены, движение объектов (персонажи, ткань, оружие) — по позициям вершин прошлого кадра. Сцена сдвигается субпиксельным jitter (Halton) и рисуется в уменьшенном разрешении, апскейлер достраивает вывод (720p для Steam Deck, 1080p, 1440p или 2160p), интерфейс рисуется сразу в выходном разрешении. - **FSR 3.1** (FireBurn/FSR-Vulkan). - **FSR 4 (INT8, модель v07)** на видеокартах с нужными возможностями шейдеров Vulkan, включая RDNA2/3 (см. требования). - **FSR 4.1.1**: DLL AMD 4.1.1 один раз записывается под vkd3d-proton, а её проходы воспроизводятся нативно в Vulkan; результат **побитово совпадает** с DLL. Два варианта, как в самой DLL: INT8 на любой видеокарте с нужными возможностями шейдеров и матрицы FP8 на RDNA4 (RX 9000; выбирается сам). Ассеты собираются на твоей машине из одной твоей DLL 4.1.x: в лаунчере кнопка *FSR 4.1.1 из своей DLL AMD → Выбрать DLL…* (2–5 минут, на RDNA4 вдвое дольше; нужен свежий Proton), или `tools/fsr4cap`. - Быстрее шейдеров самой AMD на RDNA3: финальные проходы FSR 4 и 4.1.1 переписаны с записью через shared-память (в 3.5 и 2.3 раза быстрее, побитово так же); FSR 4 в 4K на RX 7800 XT стоит ~4 мс вместо ~6. - **Многопоточная обработка GPU-команд.** Поток команд PS4 разбирается в одном потоке, а привязка ресурсов и запись draw — в другом (двухстадийный конвейер), плюс отдельный поток записи команд Vulkan и вспомогательные потоки для копий памяти. В начале проекта единственный поток GPU ограничивал игру ~26 FPS; сейчас 90–150 FPS в зависимости от разрешения и сцены. - **Настройки в меню самой игры:** *Система → Изображение / Эффекты* (после *Экран/звук*) — их строит и рисует сама игра: разрешение вывода, апскейлер, пресет, резкость, счётчик FPS, детализация моделей и эффекты игры, на языке игры. - **Меню поверх игры** (Insert или L3+R3) в стиле диалогов игры: всё то же и расширенные настройки; геймпад, клавиатура и мышь. - **Лаунчер на GTK4** и **AppImage** для Steam Deck. ## Чем отличается от shadPS4 | | shadPS4 | bbport | |---|---|---| | Охват | Универсальный эмулятор PS4, много игр | Одна игра: Bloodborne v1.09 | | Загрузка | Свой ELF-загрузчик и эмуляция ядра во время работы | eboot заранее превращается (`scripts/`) в образ с прилинкованными libc/Fios2 PS4; загрузчик на C отображает его и передаёт управление игре (загрузчик и рантайм — ~5 тыс. строк) | | Память | Вид памяти PS4 со стороны GPU хранится копиями в VRAM, синхронизация через отслеживание записей защитой страниц | По умолчанию та же модель (как в 0.3); в режиме *Новая модель памяти и трансляции*: память игры в оперативной памяти, GPU использует её на месте, часто читаемое — в VRAM, освобождается, когда не нужно | | Командный процессор | Эмулируется: записи в память, DMA и метки выполняет процессор во время разбора команд | По умолчанию так же; в новом режиме переводится в команды Vulkan, их выполняет видеочип в порядке потока, метки — после реального завершения работы | | Системные библиотеки | Широкий HLE ОС PS4 | Небольшой рантайм (`src/runtime_*.c`) ровно под то, что вызывает Bloodborne: память, потоки, синхронизация, файлы, звук (включая ATRAC9), геймпад, сохранения, AppContent | | GPU | Видеоядро и рекомпилятор шейдеров shadPS4 | То же ядро (вложено, GPL) с ~200 помеченными правками (`bbport:`) и новыми модулями: двухстадийный конвейер draw, мемоизация состояния прохода и наборов текстур, уменьшенные цели сцены, векторы движения, FSR 3.1/4/4.1.1, захват кадра, профайлер GPU | | Поток GPU | Один поток обрабатывает весь поток команд (узкое место в Bloodborne) | Разбор и запись draw идут в разных потоках; работа масштабируется под число потоков (в том числе Steam Deck) | | Апскейлинг | — | Временной (FSR 3.1, FSR 4, FSR 4.1.1) на собственных векторах движения и jitter игры | | Патчи игры | Патч-файлы применяет эмулятор | Те же патчи сообщества компилируются при запуске (`scripts/patches.py`); разрешение рендера, эффекты и FPS — из лаунчера | Без shadPS4 bbport бы не было: его рендерер и рекомпилятор шейдеров — основа графической части. ### Wine + DXVK для одной игры - **Процессор.** Процессор PS4 — x86-64, поэтому код игры выполняется прямо на процессоре ПК, без эмуляции и перевода инструкций. - **Системные библиотеки.** Как Wine подменяет Windows API, так рантайм bbport (`src/runtime_*.c`) реализует ровно те функции ОС PS4, которые вызывает Bloodborne: память, потоки, файлы, звук, геймпад, сохранения. - **Память.** В новом режиме — как у игры для ПК: данные игры в оперативной памяти, видеопамять используется так, как её использует игра для ПК. Пока режим экспериментальный. - **Графика.** Поток команд видеочипа PS4 (PM4) — это записанные вызовы графического API игры: его пишут 99 функций статически слинкованной libGnm, так что разбор потока и перевод самих вызовов дают одно и то же. Шейдеры GCN переводятся в SPIR-V. В новом режиме работа командного процессора (записи в память, DMA, метки) тоже переводится в команды Vulkan; метки пишет сам видеочип. Дескрипторы ресурсов (текстур, буферов) транслятор читает на процессоре, как DXVK читает привязки ресурсов: текстуру PS4 нужно перевести из раскладки PS4 в образ Vulkan до отрисовки, поэтому процессор должен знать её дескриптор заранее — это трансляция, а не эмуляция. Таблицы дескрипторов (дампы движка констант) читает только транслятор, поэтому их выполняет процессор. Occlusion-запросы игры (~60 за кадр) — настоящие запросы Vulkan; предикация, `COPY_DATA`, `COND_EXEC` тоже переводятся (проверка — `BB_PM4_SELFTEST=1`). Подробно — [docs/EMULATION_REMOVAL_PLAN.ru.md](docs/EMULATION_REMOVAL_PLAN.ru.md), «Шаг 4». «Порт» здесь — сборка под одну игру, а не переписанный исходный код: исходного кода игры у проекта нет, и он его не содержит. ## Требования - Linux x86-64, видеокарта с Vulkan 1.3. Проверено: AMD RX 7800 XT, Mesa 26 (RADV). Режим *Новая модель памяти и трансляции* на NVIDIA пока не проверен. FSR 4 / 4.1.1 требуют shader Float16, Int8/Int16, целочисленных dot-произведений, linear compute derivatives и extended storage image formats; FSR 4.1.1 дополнительно требует `VK_VALVE_shader_mixed_float_dot_product`. Неподдерживаемый вариант заменяется на FSR 3.1 до первого кадра и недоступен в игровом меню. - Свой расшифрованный дамп игры: папка `CUSA03173` (eboot.bin, sce_module, ...), версия 1.09. Дамп обновления — отдельная папка: скопируйте её поверх базовой игры с заменой файлов. Одна базовая игра (1.00) падает при запуске (guest offset 0x20348b8); лаунчер и `run.sh` проверяют исполняемый файл и пишут, чего не хватает (`BB_SKIP_GAME_CHECK=1` отключает проверку). Другие издания (американское `CUSA00900`, азиатское `CUSA03023`, ...) запускают тот же исполняемый файл 1.09. В некоторых дампах в него уже вшит патч 60 FPS от Lance McDonald, из-за которого игра падает при открытии меню жестов: проверка тогда просит чистый eboot.bin (у bbport свои 60 FPS). - Для сборки: GCC, CMake, Ninja, Python 3, glslang, SDL3, заголовки Vulkan и библиотеки из `shell.nix`. С [Nix](https://nixos.org) всё берётся из `shell.nix` автоматически. ## Сборка и запуск ```bash git clone --recursive https://github.com/deadinside28/bloodborne_pc.git bbport && cd bbport bash build.sh # собирает out/bb-probe и out/gpu/libbbgpu.so BB_GAME_DIR=/путь/к/CUSA03173 bash run.sh ``` или через лаунчер (выбрать папку игры, настройки, «Запустить»): ```bash bash launcher/bb-launcher.sh # launcher/install-desktop.sh добавит его в меню приложений ``` По умолчанию папка игры ищется рядом с репозиторием (`../CUSA03173`). Сохранения и кэш шейдеров — в `user/` (в лаунчере можно выбрать другую папку), настройки — в `bbport.ini`. Геймпад через SDL3 (если их несколько, нужный выбирается в лаунчере: *Управление → Контроллер*; `BB_GAMEPAD=`). Клавиатура тоже работает, и при подключённом геймпаде (на Steam Deck он есть всегда); обе раскладки меняются в лаунчере (*Управление*). Имя персонажа вводится с клавиатуры в окне поверх игры. Тачпад: левая половина (Tab, Back/Select) открывает жесты, правая (Backspace) — личные вещи. PSN нет: экран «Играть по сети / вне сети» пропускается, игра сразу открывает главное меню вне сети (патч игры; в лаунчере *Эффекты игры → Пропускать выбор «по сети / вне сети»*, `BB_SKIP_NETWORK_CHOICE=0` — показывать). При нескольких мониторах нужный выбирается в лаунчере: *Экран → Монитор* (`BB_DISPLAY=<номер или часть имени>`). **Смена разрешения и пресетов:** для вывода не 1080p (720p на Steam Deck, 1440p, 4K) вся игра рисуется в разрешении пресета, которое задаёт патч при запуске, — это самый быстрый путь. Смена вывода или пресета в игровом меню тогда требует «Применить и перезапустить игру». Настройка «Смена разрешения на лету» (лаунчер, игровое меню, `bbport.ini` `live_resolution=0|1|auto`; **по умолчанию выключена**) вместо этого оставляет игре 1080p и масштабирует её цели на ходу: 720p/1080p/1440p/4K и пресеты меняются без перезапуска. Это дороже: игра считает, что рисует 1080p, и рисует больше (например, мелких источников света примерно в 8 раз больше), часть целей копируется между размерами — включай только на мощных настольных видеокартах (`auto` включает её на дискретных GPU с 8+ ГБ, кроме NVIDIA старше Turing). Вывод 1080p и TAA всегда идут живым путём. **TAA:** отдельный пункт сглаживания в лаунчере и игровом меню, переключается на ходу. Работает в разрешении вывода без модели FSR; пресет FSR сохраняется для обратного переключения. Native AA у FSR выполняет реконструкцию поверх полного разрешения и может быть тяжелее выключенного сглаживания. TAA тоже добавляет обработку кадра. **Моды:** лаунчер подключает распакованные моды из отдельных папок (с `dvdroot_ps4/`, с лишней папкой-обёрткой или сразу с папками игры вроде `chr/`; регистр имён не важен), с переключателями и порядком загрузки. **Сторонние патчи:** XML-файлы в формате shadPS4 в папке `patches/` каталога данных, включаются в лаунчере. Подробнее — [моды и патчи](docs/MODS.md). **DLC:** дампы дополнений клади в `user/addcont//<метка>/` (как в shadPS4, например `user/addcont/CUSA03173/SPEXPANSIONDLC03` для The Old Hunters): каждая такая папка сообщается игре как установленное дополнение. **Язык лаунчера:** русский, английский, бразильский португальский или упрощённый китайский (по умолчанию — как в системе). **Свободная камера и debug menu игры** (v1.09): включи соответствующие галочки в лаунчере или игровом меню и перезапусти игру. Для камеры используется [патч Lance McDonald из GoldHEN](https://github.com/GoldHEN/GoldHEN_Patch_Repository/blob/main/patches/xml/Bloodborne-Orbis.xml): удерживай Cross и нажимай L3 для переключения режимов (клавиатура: Space + Z). Камере шрифты не нужны; с патчем Enemy Control она несовместима. Для debug menu сначала установи `DbgFont14h.ccm` и `DbgFont14h.tpf` из [Debug Menu and XML Patch](https://www.nexusmods.com/bloodborne/mods/253) в `dvdroot_ps4/font/` внутри папки игры. Если файлов нет или они пустые, запуск остановится с объяснением. Меню открывается левым touchpad / Tab (с включённым debug menu левая половина больше не открывает жесты); правый touchpad — Backspace. Координаты касания передаются с SDL-геймпадов; Back/Select заменяет левый клик на геймпадах без сенсорной поверхности. Меню настроек порта по-прежнему открывается Insert / L3+R3. GPU-запросы occlusion пока возвращают искусственные счётчики пикселей (`PixelPipeStatDump`), а `IT_SET_PREDICATION` не реализован. Свободная камера позволяет проверять видимость, но не добавляет GPU occlusion culling. **Ассеты апскейлеров** (в репозитории их нет; FSR 3.1 они не нужны): ```bash bash tools/fetch_fsr4_assets.sh # FSR 4 v07 (MIT, собраны Q2RTX из исходников AMD) # FSR 4.1.1 — из своих DLL AMD (например, FSR4_LATEST у OptiScaler), нужен GE-Proton 10 или новее: bash tools/fsr4cap/build_assets.sh <amd_fidelityfx_upscaler_dx12.dll> ``` **FSR 4.1.1 из своей DLL.** Проще всего — в лаунчере: *Апскейлер → FSR 4.1.1 из своей DLL AMD → Выбрать DLL…* и указать `amd_fidelityfx_upscaler_dx12.dll` версии 4.1.x: из папки `FSR4_LATEST` OptiScaler или из игры с FSR 4.1. Этого одного файла достаточно: DLL AMD сама экспортирует FidelityFX API, загрузчик не нужен (через `amd_fidelityfx_loader_dx12.dll` записывалась бы только DLL без этих функций, и тогда лаунчер его спросит). DLL проверяется сразу, без долгой записи, и не подходят: официальная FSR 4.0.x (например, 4.0.3 из Pragmata — AMD включает её только на RDNA4, под Proton на других видеокартах она не запускается) и сборки сообщества (4.0.2b, 4.1.1b и подобные INT8-сборки OptiScaler: другая модель и число проходов). Дальше DLL запускается под Proton и записывается в 20 разрешениях (ход виден в строке и во вкладке «Журнал»; на RDNA4 — второй раз, для варианта FP8), проходы переводятся в SPIR-V, и FSR 4.1.1 сразу выбирается. Proton выбирается сам — первый, под которым DLL включает FSR 4.1: GE-Proton 10 или новее, Proton-CachyOS, Proton Experimental (проверено: GE-Proton 11, Proton-CachyOS 11, Experimental от октября 2026; Proton 11.0 из Steam и GE-Proton 9 — нет). Он запускается в рантайме Steam, который требует (Steam ставит его при первом запуске любой игры с этим Proton), или через umu-launcher, если он установлен. На NixOS umu-launcher берётся из `nix-shell` (в первый раз скачивается, ~1,7 ГБ); AppImage запускает запись на самой системе, через systemd пользователя (`systemd-run --user`), так как системный `/nix` ей не виден. Запись на Steam Deck пока не проверена; если DLL не включит там FSR 4.1, собери на ПК и скопируй папку `fsr4_411`. То же из командной строки: `--build-fsr411 <DLL>` у лаунчера (и у AppImage). **DLSS (NVIDIA GeForce RTX).** SDK DLSS от NVIDIA не входит в репозиторий: скачай [github.com/NVIDIA/DLSS](https://github.com/NVIDIA/DLSS) (достаточно `include/` и `lib/Linux_x86_64`) и собери с `DLSS_SDK_ROOT=/путь/к/DLSS bash build.sh`. Тогда собирается и мост `out/libbbport_dlss.so` (`gpu/dlss_bridge`, единственный код, использующий SDK), а `libnvidia-ngx-dlss.so.<версия>` от NVIDIA копируется рядом с `out/bb-probe`; остальное даёт драйвер. Затем выбери *DLSS* в лаунчере или во внутриигровом меню: пресет задаёт разрешение рендера, Native AA — это DLAA. DLSS получает те же входы, что и FSR 3.1 (цвет сцены, глубину, векторы движения, jitter). Без библиотек, на других видеокартах или с `BB_DLSS=0` он недоступен, а выбранный DLSS заменяется на FSR 3.1. AppImage, собранный с `DLSS_SDK_ROOT`, содержит мост и библиотеку NVIDIA (лицензия RTX SDK от NVIDIA это разрешает в составе приложения; её текст — `NVIDIA-DLSS-LICENSE.txt` в пакете). Более новая `libnvidia-ngx-dlss.so.<версия>` (из `lib/Linux_x86_64/rel` в SDK) выбирается в лаунчере: *Апскейлер → DLSS: библиотека NVIDIA → Выбрать файл…*, как DLL для FSR 4.1.1; она копируется в `<user>/dlss/`, и игра берёт её первой. `nvngx_dlss.dll` из игр — библиотека для Windows: драйвер NVIDIA на Linux её не загружает. Скрипт из исходников берёт инструменты из системы (MinGW GCC, CMake, Ninja, Python 3, SPIRV-Tools, Git) или из Nix; в AppImage они уже собраны. **FP8 на RDNA4.** Когда vkd3d-proton даёт кооперативные матрицы FP8 (RDNA4), DLL запускает другой вариант своих проходов: другие шейдеры и веса, другие размеры диспатчей. Сборка записывает оба: INT8 в `fsr4_411/`, FP8 в `fsr4_411/fp8/`, а игра сама выбирает FP8, если у видеокарты есть матрицы FP8 (`VK_EXT_shader_float8`); в журнале — `Upscaler: FSR 4.1.1 replay, FP8 …`. `BB_FSR411_VARIANT=int8` — принудительно INT8. Проверено на RX 7800 XT через эмуляцию FP8 на FP16 в vkd3d-proton (`BB_FSR4CAP_FP8=1` записывает его и там, `fp8emu/`): побитово как DLL; **на самой RDNA4 ещё не запускалось.** **AppImage** (Steam Deck): `bash build.sh && bash packaging/appimage.sh` → `dist/Bloodborne-bbport-x86_64.AppImage`; данные в `~/.local/share/bbport`, `--play` запускает игру без окна лаунчера (игровой режим). Модели FSR 4.1.1 в пакет не входят: собери их кнопкой лаунчера (см. выше), они лягут в `~/.local/share/bbport/fsr4_411` (`BB_PACKAGE_FSR411=1` кладёт локальную `fsr4_411` в AppImage для своих устройств). На Steam Deck выбирай вывод 1280×720 (игра 16:9, на экране 1280×800 будут узкие полосы). **Добавление AppImage в Steam** («Добавить стороннюю игру»): ничего настраивать не нужно, инструмент совместимости не важен. (Steam подгружает свой оверлей во все сторонние игры; AppImage убирает его до запуска своих программ, поэтому оверлея Steam в игре нет.) Если Steam запускает игры без FUSE (NixOS: FHS-песочница Steam; AppImage тогда завершается с *Cannot mount AppImage*), в параметрах запуска укажи ``` TMPDIR=$HOME/.cache APPIMAGE_EXTRACT_AND_RUN=1 NO_CLEANUP=1 %command% ``` Тогда AppImage при первом запуске распакуется (~2 ГБ, `~/.cache/appimage_extracted_*`, ~10 с), а дальше будет запускать эту копию; новая версия AppImage распакуется заново, старую копию можно удалить. Без `TMPDIR` распаковка шла бы в `/tmp` Steam, а он там в оперативной памяти. ` --play` после `%command%` — запуск без лаунчера. **NVIDIA в AppImage:** пакет автоматически ищет установленный на машине 64-битный NVIDIA Vulkan-драйвер и подключает его вместе с комплектными AMD/Intel-драйверами. Используются библиотеки NVIDIA с этой машины, чтобы их версия совпадала с модулем ядра. На обычных Linux дистрибутивах они доступны в `/usr/lib*`; на NixOS внутренний `/nix/store` AppImage может скрывать драйвер хоста. В этом случае библиотеки NVIDIA нужно скопировать в доступную папку и указать `BB_NVIDIA_LIB_DIR=/путь/к/библиотекам` (манифест NVIDIA тоже должен быть доступен). С драйвером NVIDIA хоста AppImage передаёт и файлы EGL-вендоров хоста, NVIDIA первым (`__EGL_VENDOR_LIBRARY_FILENAMES`; без них ICD NVIDIA на некоторых системах не отдавал `vkCreateInstance`, #107; `BB_NVIDIA_EGL=0` — выключить). Явные `VK_DRIVER_FILES`/`VK_ICD_FILENAMES` сохраняются. Проверка драйвера внутри пакета: ```bash ./Bloodborne-bbport-x86_64.AppImage --vulkan-info 2>&1 | tee bbport-vulkan.log ``` Пользователь подтвердил запуск с FSR 3 на GTX 1060 6GB (Fedora 44, NVIDIA 580.178.04); выбор FSR 4 приводил к чёрному окну. На этой конфигурации используй FSR 3. MangoHud включён в AppImage; включи его галочку в лаунчере. Если MangoHud установлен ещё и в системе или включён оверлей производительности Steam (игровой режим Steam Deck), рисуется только один оверлей (два давали двоящийся текст со сдвигом). При запуске из исходников MangoHud нужно установить отдельно. Диагностический запуск с `VK_LOADER_LAYERS_DISABLE=~implicit~` отключает и MangoHud. Полезные переменные: `BB_FRAME_STATS=1` (статистика кадров, в том числе строка `Memory:` — VRAM, GTT, RSS, текстуры и блоки памяти игры в VRAM), `BB_PC_MODEL=1` (новая модель памяти и трансляции; по умолчанию 0 — старая модель, как в 0.3), `BB_ANISO=N` (анизотропная фильтрация текстур сцены; по умолчанию 16, 0 — как в игре), `BB_GC_IDLE_SECONDS=N` / `BB_VRAM_IDLE_SECONDS=N` (сколько неиспользуемые текстуры / буферы остаются в VRAM; 20 / 60), `BB_BREADCRUMBS=0` (без меток GPU; с ними зависание видеокарты называет отрисовку или dispatch, на которой она встала), `BB_GPU_PROFILE=1` (время GPU по проходам), `BB_FSR4_PROFILE=1` (время каждого прохода FSR 4), `BB_UPSCALER=taa|fsr3|fsr4|fsr411|off|none`, `BB_FRAMES_AHEAD=N` (на сколько кадров поток команд может опережать GPU; по умолчанию 1, 0 — без ограничения), `BB_PRESENT_THREAD=0` (показ в потоке vblank, как раньше), `BB_LIVE_RES=1` (смена разрешения без перезапуска вместо патча при запуске для вывода не 1080p), `BB_PAD_RECORD=файл` / `BB_PAD_REPLAY=файл` (запись маршрута по F9 и его повтор в тестах), `BB_GC_BUDGET_MB=N` (бюджет кэша текстур, как на встроенных GPU), `BB_VRAM_LIMIT_MB=N` (бюджет VRAM считается не больше N МиБ: проверка поведения карт с малой VRAM), `BB_ASYNC_PIPELINES=0` (новые конвейеры компилируются сразу, игра ждёт; по умолчанию — в фоне), `BB_PRESENT_DUMP_TRIGGER=файл` с `BB_PRESENT_DUMP_COUNT=N` (снимок N показанных кадров подряд), `BB_FSR411_VARIANT=int8|fp8|fp8emu` (вариант FSR 4.1.1; по умолчанию FP8, где у видеокарты есть матрицы FP8), `BB_READBACKS=0|1|2` (чтение игрой памяти, записанной GPU: по умолчанию 1, 2 — точно и медленно, 0 — выключено). Подробнее — в [docs/](docs); последние изменения — [docs/CHANGES_0.4.md](docs/CHANGES_0.4.md), [docs/CHANGES_2026-10-06.md](docs/CHANGES_2026-10-06.md). **Игра по сети (shadNet).** Отдельный модуль `out/gpu/libbbnet.so` (`gpu/bbnet`: сетевые и PSN-библиотеки shadPS4 из shadp2p, форка shadPS4, с клиентом shadNet); собирается, когда есть protobuf, nlohmann_json, OpenSSL, zlib и miniupnpc (`shell.nix`), входит в AppImage. Включается на странице лаунчера *Онлайн* (`BB_ONLINE=1`): сообщения, пятна крови и призраки — с The Hunter's Dream, колокола и призывы — через сервер shadNet (по умолчанию `srv.shadps4.net:31313`) с учётной записью shadNet (Online ID и пароль). Офлайн модуль не загружается; сборка без него играет только офлайн. ## Устройство репозитория | Путь | Содержимое | |---|---| | `src/` | Загрузчик (`probe.c`) и HLE-рантайм | | `scripts/` | Подготовка образа игры, линковка модулей, компилятор патчей | | `gpu/` | Библиотека рендерера: видеоядро shadPS4 с правками порта (`gpu/VENDOR.txt`), прослойки, меню ImGui, рантайм FSR 4.1.1 (`gpu/shadps4/video_core/renderer_vulkan/fsr411`) | | `launcher/`, `packaging/` | Лаунчер GTK4; пакет Nix и AppImage | | `patches/` | Патчи сообщества для Bloodborne | | `tools/` | Утилиты разработчика: скриптовые запуски, A/B-переключатели, бенчмарк FSR, переписывание шейдеров FSR 4, `fsr4cap` (запись и извлечение FSR 4.1.1) | | `tests/` | Тесты загрузчика, рантайма, патчей и рендерера | | `docs/` | Заметки и замеры ([апскейлер](docs/upscaler.md), [многопоточный GPU](docs/parallel_gpu.md), [векторы движения](docs/motion_vectors.md), [план](docs/ROADMAP.md), [журнал разработки](docs/DEVELOPMENT_LOG.ru.md)) | Тесты: `bash build.sh --test`, `python3 -m unittest discover -s tests` и `ninja -C out/gpu motion-history-test ui-composition-test scene-resolution-test motion-shader-test settings-test`. ## Что будет дальше - Новая модель памяти и трансляции по умолчанию и на NVIDIA, когда она станет там не медленнее; после этого старая модель удаляется. - Текстуры — объекты, которые создаются при загрузке (меньше угадывания по адресам, загрузка вне кадра). - Шейдеры переводятся заранее, при установке, а не во время игры. - Больше параллельности CPU в обработке GPU-команд (дальнейшее разделение стадии записи draw) с масштабированием на все потоки — важнее всего для Steam Deck. - Async compute для апскейлера (в 4K кадр упирается в GPU). - XeSS (суперразрешение) и генерация кадров XeFG через помощник под Wine с общей памятью Vulkan (прототип моста памяти — `tools/bridge_helper`); входы апскейлера в виде, совместимом с подходом OptiScaler. - Генерация кадров (сначала FSR 3.1 FG), маски реактивности и прозрачности для частиц и тумана. - Исправление гонок в шейдерах FSR 4.1.1 от AMD при ширине вывода, не кратной 64 (например, 1600×900) — так же, как уже исправлена гонка у левого края в FSR 4 v07 при 1080p. - Проверка AppImage на Steam Deck; вывод HDR. ## Благодарности и лицензии bbport распространяется по **GNU GPL v2 или новее** ([LICENSE](LICENSE)) — в нём код shadPS4 (GPL-2.0-or-later). Сторонние компоненты сохраняют свои лицензии: видеоядро и рекомпилятор шейдеров [shadPS4](https://github.com/shadps4-emu/shadPS4) (GPL-2.0+), [sirit](https://github.com/shadps4-emu/sirit), [half](https://half.sourceforge.net/), [FSR-Vulkan](https://github.com/FireBurn/FSR-Vulkan) от FireBurn (MIT; FSR 3.1 на Vulkan и провайдер FSR 4 v07), AMD FidelityFX SDK (MIT), [LibAtrac9](https://github.com/Thealexbarney/LibAtrac9) (MIT), [Dear ImGui](https://github.com/ocornut/imgui) (MIT), шрифты DejaVu, [dxil-spirv](https://github.com/HansKristian-Work/dxil-spirv) (MIT, для сборки ассетов FSR 4.1.1). Патчи игры — Kyo, Lance McDonald, auser1337, illusion, emoose и другие участники сообщества (`patches/Bloodborne.xml`). Мост DLSS (`gpu/dlss_bridge`, MIT) и загрузчик взяты из [Windows-порта Supermedo](https://github.com/Supermedo/bloodborne_pc), адаптированного из [IFreemz/shadPS4-Bloodborne-DLSS-FSR](https://github.com/IFreemz/shadPS4-Bloodborne-DLSS-FSR). DLL и данные модели FSR 4 от AMD, а также SDK и библиотеки DLSS от NVIDIA здесь не распространяются.