Skip to content

Latest commit

 

History

History
537 lines (468 loc) · 58.3 KB

README.ru.md

File metadata and controls

537 lines (468 loc) · 58.3 KB

ДАННЫЙ ПРОЕКТ НЕ ИМЕЕТ ОТНОШЕНИЯ К SHADPS4. ВСЕ ВОПРОСЫ, СВЯЗАННЫЕ С ЭТИМ ПРОЕКТОМ - ПИШИТЕ НА ДИСКОРД СЕРВЕР https://discord.gg/KYZRKk9CB, А НЕ НА СЕРВЕР SHADPS4

bbport — нативный порт Bloodborne для Linux и Windows

English · Русский

bbport — это аналог Wine + DXVK, только для одной игры: Bloodborne для PlayStation 4 (CUSA03173, версия игры 1.09) на ПК x86-64 с Linux или Windows 10/11 (с 0.7, см. Windows). Оригинальный исполняемый файл игры запускается прямо на ПК:

  • как в Wine, x86-64-код игры выполняется на процессоре напрямую, а системные библиотеки PS4 заменяет собственный рантайм, написанный под эту игру;
  • как в DXVK, графика игры переводится в Vulkan — собственным рендером и транслятором шейдеров порта (начинались с кода shadPS4 и переписаны), вплоть до временного апскейлинга AMD FSR 3.1, FSR 4, FSR 4.1.1 и NVIDIA DLSS и генерации кадров DLSS;
  • память и работа видеочипа на любой видеокарте устроены как у игры для ПК: новая модель памяти и трансляции — единственная (по умолчанию с 0.6; старая модель из 0.3 удалена в 0.7).

Файлов игры в репозитории нет. Нужен свой дамп Bloodborne с обновлением 1.09: любое издание из магазина (CUSA00900 в США, CUSA03173 — европейское Game of the Year, ...): у них один и тот же исполняемый файл. Проект не связан с Sony Interactive Entertainment, FromSoftware и AMD.

Состояние: экспериментальный, играбельный. Игра запускается, загружает сохранения и проходится (Сон Охотника и несколько локаций Ярнама) со звуком, геймпадом и сохранением. Полное прохождение не проверено. Основательно проверены: AMD Radeon RX 7800 XT (Linux с Mesa/RADV и Windows 11), Steam Deck; на Windows ещё два ноутбука с NVIDIA GTX 1050 и GeForce 930MX; другие видеокарты NVIDIA и Intel — у игроков.

Что сделано

  • Нативное исполнение. eboot заранее превращается в плоский образ памяти, в который как нативный код прилинкованы libc и libSceFios2 из PS4. Никакой эмуляции процессора и трансляции инструкций: код игры работает на полной скорости.

  • Одна модель памяти и трансляции (модели 0.3 больше нет):

    • Память игры находится в оперативной памяти, и GPU читает её на месте, как буферы игры для ПК; то, что он читает часто, держится в видеопамяти и освобождается, когда перестаёт использоваться (текстуры — через 20 с, буферы — через 60 с). Модуль памяти прослойки отслеживает записи CPU в блоки с зеркалами для согласования данных; вся память, видимая GPU, не копируется. Работа командного процессора PS4 переводится в команды Vulkan, а не эмулируется на процессоре: записи в память (WRITE_DATA, DMA) выполняет видеочип в порядке потока команд, метки (fences) пишет сам видеочип в конце конвейера, в той же точке потока, что и командный процессор PS4. На любой видеокарте память игры идёт через модуль памяти прослойки: привязывается на месте, копии в VRAM — отдельные буферы, без sparse-привязок (на NVIDIA sparse binding держал видеочип секундами; на AMD модуль быстрее прежней sparse-арены); BB_LAYER_MEMORY=0 — sparse-арена AMD. Основательно проверено на RX 7800 XT, на NVIDIA — тестерами. Если драйвер не проходит проверки при запуске, игра останавливается со строкой STOP: the GPU driver cannot use the game's memory in place.

    Графические кучи игры растут по мере того, как она занимает память, и отдают её при освобождении.

    Изменения в 0.7, 0.6, 0.6-pre1, 0.51, 0.5.

    Неиспользуемые текстуры освобождаются, поэтому видеопамять больше не растёт с каждой локацией; Качество текстур (полное, половина, четверть, авто — половина на картах до 3 ГБ) на маленьких картах пропускает верхние уровни больших текстур.

  • Разблокированная частота кадров. Хуки в коде игры переводят симуляцию на реальное время кадра (патчи сообщества из patches/Bloodborne.xml остались для сравнения, BB_FRAME_HOOKS=0); ~90 FPS в 4K с FSR 4 Balanced на RX 7800 XT, ~150 FPS в 1440p с FSR 4 Quality. Есть режимы 30/60/90 FPS; F3 включает и выключает лимит 30 FPS прямо в игре (некоторые катсцены, например Лоуренса, надёжнее всего идут на 30).

  • Любое соотношение сторон, на лету. 4:3, 16:10, 16:9, 21:9 и 32:9, HUD у краёв экрана — хуками (код игры не патчится); катсцены тоже широкие.

  • Клавиатура и мышь. Камера мышью поворачивается напрямую; указатель мыши в меню игры (F1 отпускает мышь); раскладка близка к Dark Souls III (Space — уклонение, Left Shift — бег, Shift+Space — прыжок); клавиши движения разгоняются, как стик; подсказки кнопок показывают назначенную клавишу или кнопки используемого геймпада (Xbox и других), значки PlayStation — только с геймпадом PlayStation.

  • Игра по сети и бесшовный кооператив. Два пула на сетевом стеке shadPS4 0.20: Seamless Hunt (по умолчанию; колокола, призывы, послания, пятна крови и бесшовный кооператив BBSC до пяти охотников; учётная запись — на seamlesshunt.com) и The Hunter's Dream (вход через Discord; без BBSC).

  • Временной апскейлинг под эту игру. Буфера скоростей в 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.
    • DLSS Super Resolution и DLSS Frame Generation (NVIDIA GeForce RTX) через необязательный мост, собираемый с SDK NVIDIA (см. «Сборка»). Генерация кадров делает кадры между двумя кадрами игры (2x на RTX 40, до 4x на RTX 50) из готового кадра, кадра до интерфейса, глубины сцены, векторов движения и матриц камеры игры; меню-оверлей → Генерация кадров или лаунчер.
    • Модели FSR 4.1.2 из драйвера AMD (INT8 на RDNA2/3 и модель Lite) — из драйверного amdxcffx64.dll вместе с DLL апскейлера (Модель FSR 4 в меню).
    • FSR 1 (пространственный, без векторов движения) для слабых видеокарт и генерация кадров FSR 3.1 (экспериментально, на любой видеокарте; свои шейдеры оптического потока и интерполяции).
    • Сглаживание отдельно от апскейлеров: авто (сглаживание игры только без апскейлера), игры, FXAA (Force FXAA2 от Kyo), SMAA 1x (своё, до UI), выкл; резкость (RCAS) и без апскейлера. GT-VBAO может заменить SSAO игры.
    • Быстрее шейдеров самой 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, детализация моделей и эффекты игры, на языке игры. Хроматическая аберрация, глубина резкости, размытие в движении, SSAO, сглаживание игры и тени динамических источников переключаются сразу; отражения SSR, заставки, свободная камера и debug menu требуют перезапуска.

  • Меню поверх игры (Insert или удерживать L3+R3) в стиле диалогов игры: всё то же и расширенные настройки; геймпад, клавиатура и мышь.

  • Шейдеры до игры. Пакет рецептов шейдеров из кэшей игроков (655 программ, 1149 конвейеров) компилируется в фоне при запуске, а кэш переживает обновления: повторная сессия ничего не компилирует.

  • Лаунчеры: GTK4 на Linux, WPF в стиле Windows 11 на Windows (оба — с разделами и описаниями); AppImage для Linux и Steam Deck, то же папкой (tar.zst, Bloodborne.sh), zip для Windows.

Чем отличается от shadPS4

shadPS4 bbport
Охват Универсальный эмулятор PS4, много игр Одна игра: Bloodborne v1.09
Загрузка Свой ELF-загрузчик и эмуляция ядра во время работы eboot заранее превращается (scripts/) в образ с прилинкованными libc/Fios2 PS4; загрузчик на C отображает его и передаёт управление игре (загрузчик и рантайм — ~5 тыс. строк)
Память Вид памяти PS4 со стороны GPU хранится копиями в VRAM, синхронизация через отслеживание записей защитой страниц Память игры в оперативной памяти, GPU использует её на месте, часто читаемое — в VRAM, освобождается, когда не нужно
Командный процессор Эмулируется: записи в память, DMA и метки выполняет процессор во время разбора команд Переводится в команды Vulkan, их выполняет видеочип в порядке потока, метки — после реального завершения работы
Системные библиотеки Широкий HLE ОС PS4 Небольшой рантайм (src/runtime_*.c) ровно под то, что вызывает Bloodborne: память, потоки, синхронизация, файлы, звук (включая ATRAC9), геймпад, сохранения, AppContent
GPU Видеоядро и рекомпилятор шейдеров shadPS4 Свои командный процессор, рендер, кэши и транслятор шейдеров (начинались с кода shadPS4, gpu/VENDOR.txt): двухстадийный конвейер draw, мемоизация состояния прохода и наборов текстур, уменьшенные цели сцены, векторы движения, FSR 3.1/4/4.1.1, DLSS, захват кадра, профайлер GPU
Поток GPU Один поток обрабатывает весь поток команд (узкое место в Bloodborne) Разбор и запись draw идут в разных потоках; работа масштабируется под число потоков (в том числе Steam Deck)
Апскейлинг — Временной (FSR 3.1, FSR 4, FSR 4.1.1/4.1.2, DLSS) на векторах движения, посчитанных для игры, и jitter; генерация кадров (DLSS, FSR 3.1)
Платформы Linux, Windows, macOS Linux и Windows (x86-64)
Патчи игры Патч-файлы применяет эмулятор Те же патчи сообщества компилируются при запуске (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, «Шаг 4».

«Порт» здесь — сборка под одну игру, а не переписанный исходный код: исходного кода игры у проекта нет, и он его не содержит.

Требования

  • Linux x86-64 или Windows 10/11 x86-64, видеокарта с Vulkan 1.3. Проверено: AMD RX 7800 XT с Mesa 26 (RADV) и с драйвером AMD для Windows; NVIDIA и Intel — у игроков (сообщайте, как работает). 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 всё берётся из shell.nix автоматически.

Сборка и запуск

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 launcher/bb-launcher.sh         # launcher/install-desktop.sh добавит его в меню приложений

По умолчанию папка игры ищется рядом с репозиторием (../CUSA03173). Сохранения и кэш шейдеров — в user/ (в лаунчере можно выбрать другую папку), настройки — в bbport.ini. Геймпад через SDL3 (если их несколько, нужный выбирается в лаунчере: Управление → Контроллер; BB_GAMEPAD=<GUID или часть имени>). Клавиатура тоже работает, и при подключённом геймпаде (на Steam Deck он есть всегда); обе раскладки меняются в лаунчере (Управление). Имя персонажа вводится с клавиатуры в окне поверх игры. Тачпад: левая половина (Tab, Back/Select) открывает жесты, правая (Backspace) — личные вещи. PSN нет: экран «Играть по сети / вне сети» пропускается, игра сразу открывает главное меню вне сети (патч игры; в лаунчере Эффекты игры → Пропускать выбор «по сети / вне сети», BB_SKIP_NETWORK_CHOICE=0 — показывать). При нескольких мониторах нужный выбирается в лаунчере: Экран → Монитор (BB_DISPLAY=<номер или часть имени>).

Смена разрешения и пресетов: игра стартует в размере сцены выбранного вывода и пресета (патч при запуске, самый быстрый путь); вывод по умолчанию — разрешение монитора (Авто). Со «Сменой разрешения на лету» (по умолчанию включена; bbport.ini live_resolution=0|1) пресет, разрешение вывода и соотношение сторон затем меняются прямо в игре, в меньшую и в большую сторону, с тем же FPS, что и при запуске в этом размере; перезапуска требует только другой вид апскейлера. Видеокарты, которые не могут дать глубине игры прокси (нет blit D32S8 и stencil export в шейдере, например GTX 10xx), применяют смену при следующем запуске.

TAA: отдельный пункт сглаживания в лаунчере и игровом меню, переключается на ходу. Работает в разрешении вывода без модели FSR; пресет FSR сохраняется для обратного переключения. Native AA у FSR выполняет реконструкцию поверх полного разрешения и может быть тяжелее выключенного сглаживания. TAA тоже добавляет обработку кадра.

Моды: лаунчер подключает распакованные моды из отдельных папок (с dvdroot_ps4/, с лишней папкой-обёрткой или сразу с папками игры вроде chr/; регистр имён не важен), с переключателями и порядком загрузки. Пакеты с увеличенными текстурами карт (из папки модов или уже в папке игры) сами получают большие графические кучи (BB_LARGE_HEAPS=1/0 включает или выключает). Сторонние патчи: XML-файлы в формате shadPS4 в папке patches/ каталога данных, включаются в лаунчере. Подробнее — моды и патчи. DLC: дампы дополнений клади в user/addcont/<title id>/<метка>/ (как в shadPS4, например user/addcont/CUSA03173/SPEXPANSIONDLC03 для The Old Hunters): каждая такая папка сообщается игре как установленное дополнение.

Язык лаунчера: русский, английский, бразильский португальский, упрощённый китайский или французский (по умолчанию — как в системе). Язык текста самой игры выбирается отдельно — из всех 21 языка, которые есть в игре. Выбор видеокарты: Режим работы → Видеокарта выбирает видеочип на машинах с двумя (Авто предпочитает дискретный; хранится по имени; BB_GPU_ID=N из оболочки важнее).

Свободная камера и debug menu игры (v1.09): включи соответствующие галочки в лаунчере или игровом меню и перезапусти игру. Для камеры используется патч Lance McDonald из GoldHEN: удерживай Cross и нажимай L3 для переключения режимов (клавиатура: F + Left Ctrl). Камере шрифты не нужны; с патчем Enemy Control она несовместима. Для debug menu сначала установи DbgFont14h.ccm и DbgFont14h.tpf из Debug Menu and XML Patch в dvdroot_ps4/font/ внутри папки игры. Если файлов нет или они пустые, запуск остановится с объяснением. Меню открывается левым touchpad / Tab (с включённым debug menu левая половина больше не открывает жесты); правый touchpad — Backspace. Координаты касания передаются с SDL-геймпадов; Back/Select заменяет левый клик на геймпадах без сенсорной поверхности. Меню настроек порта по-прежнему открывается Insert / удержанием L3+R3.

С патчем Restore Debug Camera мышь крутит свободную камеру. Occlusion-запросы игры в модели по умолчанию — настоящие occlusion-запросы Vulkan (BB_OCCLUSION_QUERIES=0 — всё считается видимым, как в старой модели).

Ассеты апскейлеров (в репозитории их нет; FSR 3.1 они не нужны):

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-ge-custom из AUR в /usr/share/steam/compatibilitytools.d), 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 (достаточно 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 её не загружает.

DLSS Frame Generation (GeForce RTX 40 и новее). В том же SDK (310.7 или новее) есть библиотека генерации кадров NVIDIA для Linux, lib/Linux_x86_64/rel/libnvidia-ngx-dlssg.so.<версия>; build.sh копирует её рядом с bb-probe вместе с библиотекой Super Resolution, а в лаунчере её можно выбрать так же, DLSS: библиотека NVIDIA → Выбрать файл… (в <user>/dlss/, рядом с библиотекой из пакета или вместо неё). Затем Генерация кадров → DLSS в меню-оверлее (Insert или удержание L3+R3) или в лаунчере: между каждыми двумя кадрами игры показывается один сгенерированный (RTX 40) или до трёх (Множитель, RTX 50); дисплею нужна такая частота обновления. Работает с любым апскейлером, DLSS или FSR; входы — кадр как на экране, кадр до интерфейса, глубина сцены, векторы движения, которые считает bbport, и камеры игры в виде матриц clip-пространства. Без библиотеки, на RTX 30 и старше или с BB_DLSS=0 пункт меню говорит, почему недоступен, и игра идёт без сгенерированных кадров. Из командной строки: BB_FRAME_GEN=dlss, BB_FRAME_GEN_MULTIPLIER=2..4. Генерация кадров FSR 3.1 предлагается на любой видеокарте как экспериментальная (Генерация кадров → FSR 3.1).

Низкая задержка (NVIDIA Reflex). На драйвере NVIDIA (550 и новее) порт использует Reflex в его форме для Vulkan, VK_NV_low_latency2, — тот же механизм, что Proton даёт играм для Windows: поток игры ждёт драйвер перед каждым кадром, чтобы кадры не копились перед видеокартой, а симуляция, отправки и показ кадра помечаются для драйвера. По умолчанию включено там, где драйвер это умеет: меню-оверлей (Вывод → Низкая задержка (NVIDIA Reflex)) и лаунчер предлагают Выкл, Вкл и Вкл + Boost (low_latency=off|on|boost в bbport.ini, BB_LOW_LATENCY); на AMD та же настройка включает Anti-Lag 2 (VK_AMD_anti_lag: драйвер AMD для Windows или слой anti-lag из Mesa на Linux; BB_ANTI_LAG=0 — без него). С генерацией кадров DLSS всегда не ниже Вкл, как NVIDIA требует от игр: сгенерированные кадры добавляют задержку, которую Reflex отыгрывает. Reflex и генерация кадров DLSS пришли из PR #260 от adds39939.

Скрипт из исходников берёт инструменты из системы (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 не пускает его в лаунчер и отдаёт только игре, поэтому в игре он открывается по Shift+Tab; BB_STEAM_OVERLAY=0 — без него.) Если 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 сохраняются. Проверка драйвера внутри пакета:

./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_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 — выключено), BB_RENDER_RESOURCE_CACHE_MB=160 (кэш ресурсов рендера игры в её собственном размере вместо 512 МиБ памяти порта; BB_DMEM_EXTRA_MB, по умолчанию 512, — прямая память, которую порт держит сверх памяти игры). Все переменные с описанием каждой — docs/ENVIRONMENT.md; строка Environment: в логе называет заданные и незнакомые имена BB_* (опечатки). Подробнее — в docs/; последние изменения — docs/CHANGES_0.7.md, docs/CHANGES_0.6.md.

Игра по сети. Отдельный модуль out/gpu/libbbnet20.so (gpu/bbnet20: сетевой, NP- и shadNet-код shadPS4 v0.20, BBSC порта и бэкенд The Hunter's Dream); собирается, когда есть protobuf, nlohmann_json, OpenSSL, zlib и miniupnpc (shell.nix), входит в AppImage. Включается на странице лаунчера Онлайн (BB_ONLINE=1), пулов два:

  • Seamless Hunt (по умолчанию): сервер shadNet с игровым сервером BBSC (play.seamlesshunt.com:31313, WebAPI :31315); колокола, призывы, послания, пятна крови и бесшовный кооператив (BBSC): сессия переживает смерти, лампы, смену локаций, боссов и Сон охотника, до пяти охотников (Бесшовный кооператив (BBSC), по умолчанию включён; нужен у всех игроков и один сервер). Учётная запись (online id и пароль) создаётся на https://seamlesshunt.com. Подробнее: docs/BBSC.md.
  • The Hunter's Dream (thehuntersdream.com): вход через Discord из лаунчера (код подтверждается на сайте); без BBSC.

На Windows модуль — online\bbnet20.dll (Seamless Hunt с BBSC; раздел лаунчера Онлайн). В Linux-пакете папкой он лежит открыто как online/libbbnet20.so, а BB_NET_MODULE направляет порт на любую другую его сборку (например, более новый BBSC).

Прежний модуль на shadp2p (libbbnet.so) удалён (0.7). Публичный сервер shadPS4 (srv.shadps4.net) принимает только сборки shadPS4. Офлайн модуль не загружается; сборка без него играет только офлайн.

Windows

С 0.7 bbport работает на Windows 10/11 нативно (x86-64, видеокарта с Vulkan 1.3 и свежим драйвером: AMD Adrenalin, NVIDIA GeForce, Intel Arc). Код тот же, что на Linux: x86-64-код игры выполняется напрямую, POSIX-слой рантайма реализован на Win32 (gpu/platform/win32), а память игры делится с Vulkan через VK_EXT_external_memory_host.

Пакет: Bloodborne-bbport-<версия>-windows-x64.zip. Распакуйте в любую папку (не в Program Files), запустите Bloodborne.exe, выберите папку игры (где лежит eboot.bin), нажмите «Играть». Insert (или удержание L3+R3) открывает в игре меню порта. Всё, что пишет порт, остаётся в этой папке: bbport.ini (настройки), user\ (сохранения, кэш шейдеров), out\ (подготовленные файлы игры), logs\ (журнал каждого запуска: для отчёта пришлите последний). Bloodborne.exe --play запускает игру без окна лаунчера (через bbport-run.exe).

Лаунчер: WPF в стиле Windows 11, светлая или тёмная тема — как в системе, пять языков; те же настройки, что на Linux (разделы с описаниями), выбор монитора, контроллера и видеокарты, журнал запущенной игры, «Стоп».

Апскейлеры: FSR 3.1 и FSR 4 — как на Linux. FSR 4.1.1: «Собрать из DLL AMD…» и выбрать amd_fidelityfx_upscaler_dx12.dll 4.1.x; запись идёт на vkd3d-proton и DXVK из пакета (tools\fsr4cap\bin), так что набор соберёт любая видеокарта с Vulkan (минута-две, в fsr4_411\). Модели FSR 4.1.2 (INT8 для RDNA2/3, Lite): выбрать драйверный amdxcffx64.dll (Adrenalin 26.10.1 и новее, C:\Windows\System32\DriverStore\FileRepository\u0*\) вместе с DLL апскейлера. DLSS и DLSS Frame Generation (GeForce RTX): когда в пакете есть bin\bbport_dlss.dll и nvngx_dlss.dll / nvngx_dlssg.dll от NVIDIA.

NVIDIA: при запуске порт добавляет в драйвер профиль питания максимальная производительность для bb-probe.exe, если вы сами не выбрали режим в панели управления NVIDIA (BB_NV_POWER=0 — не трогать); вывод идёт через FIFO (BB_NVIDIA_MAILBOX=1 — Mailbox).

Игра по сети: раздел лаунчера Онлайн, те же два пула, что в Linux (Seamless Hunt с BBSC, The Hunter's Dream со входом через Discord), UPnP и проверка соединения; модуль — online\bbnet20.dll. Моды: раздел лаунчера Моды и патчи, как в Linux.

Сборка: в оболочке CLANG64 из MSYS2 (тулчейн mingw-w64-clang-x86_64, CMake, Ninja, Python, SDL3, glslang) или кросс-сборкой из Linux через llvm-mingw; пакет делает packaging/windows/package.sh (лаунчеру нужен .NET 9 SDK). DLSS: DLSS_SDK_ROOT=<DLSS SDK от NVIDIA для Windows> (sdk/DLSS-windows).

Устройство репозитория

Путь Содержимое
src/ Загрузчик (probe.c) и HLE-рантайм
scripts/ Подготовка образа игры, линковка модулей, компилятор патчей
gpu/ Библиотека рендерера, собственный код порта (gpu/VENDOR.txt): командный процессор, транслятор шейдеров, рендер, кэши, меню ImGui, рантайм FSR 4.1.1 (gpu/upscale/fsr411); онлайн-модуль (gpu/bbnet20)
launcher/, packaging/ Лаунчер GTK4 (Linux), лаунчер WPF (launcher/windows), общая схема настроек; пакет Nix, AppImage, пакет для Windows
patches/ Патчи сообщества для Bloodborne
tools/ Утилиты разработчика: скриптовые запуски, A/B-переключатели, бенчмарк FSR, переписывание шейдеров FSR 4, fsr4cap (запись и извлечение FSR 4.1.1)
tests/ Тесты загрузчика, рантайма, патчей и рендерера
docs/ Заметки и замеры (апскейлер, многопоточный GPU, векторы движения, план, журнал разработки)

Тесты: 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 camera-matrices-test.

Что будет дальше

  • NVIDIA на Windows: больше отчётов с RTX в самых тяжёлых видах.
  • Текстуры — объекты, которые создаются при загрузке (меньше угадывания по адресам, загрузка вне кадра).
  • Все шейдеры игры переводятся заранее (сейчас — рецепты из кэшей игроков).
  • Больше параллельности CPU в обработке GPU-команд (дальнейшее разделение стадии записи draw) с масштабированием на все потоки — важнее всего для Steam Deck.
  • Async compute для апскейлера (в 4K кадр упирается в GPU).
  • XeSS (суперразрешение) и генерация кадров XeFG через помощник под Wine с общей памятью Vulkan (прототип моста памяти — tools/bridge_helper); входы апскейлера в виде, совместимом с подходом OptiScaler.
  • Маски реактивности и прозрачности для частиц и тумана.
  • Исправление гонок в шейдерах FSR 4.1.1 от AMD при ширине вывода, не кратной 64 (например, 1600×900) — так же, как уже исправлена гонка у левого края в FSR 4 v07 при 1080p.
  • Проверка AppImage на Steam Deck; вывод HDR.

Связанные проекты

  • ducvd89/Bloodborne-Android: Bloodborne на Android, форк bbport (GSR2 / FSR 3.1 и LSFG, экранный геймпад; проверен на Snapdragon 8 Gen 2 и 8 Elite).
  • bloodborne-native/bloodborne-mac: Bloodborne нативно на Apple Silicon, приложение для macOS на основе bbport и shadPS4.

Благодарности и лицензии

bbport распространяется по GNU GPL v2 или новее (LICENSE) — в нём код shadPS4 (GPL-2.0-or-later). Если используете код bbport: сохраняйте уведомления об авторских правах и лицензии (SPDX-FileCopyrightText: Copyright 2026 bbport contributors в начале файлов) и NOTICE, и укажите, откуда код, со ссылкой на этот репозиторий. Сторонние компоненты сохраняют свои лицензии: shadPS4 (GPL-2.0+: рендер и транслятор шейдеров выросли из него и переписаны; онлайн-модуль сохраняет его сетевой код и NP), sirit, half, FSR-Vulkan от FireBurn (MIT; FSR 3.1 на Vulkan и провайдер FSR 4 v07), AMD FidelityFX SDK (MIT), LibAtrac9 (MIT), Dear ImGui (MIT), шрифты DejaVu, бесшовный кооператив BBSC (GPL-2.0+, в онлайн-модуле), сетевой код онлайн-модуля из shadPS4 v0.20, бэкенд The Hunter's Dream из droogie/bbhost (GPL-3.0-or-later, поэтому libbbnet20.so в целом — GPL-3.0-or-later), dxil-spirv (MIT, для сборки ассетов FSR 4.1.1), wepoll (BSD-2-Clause, онлайн-модуль Windows). Патчи игры — Kyo, Lance McDonald, auser1337, illusion, emoose и другие участники сообщества (patches/Bloodborne.xml). Мост DLSS (gpu/dlss_bridge, MIT) адаптирован из IFreemz/shadPS4-Bloodborne-DLSS-FSR. DLL и данные модели FSR 4 от AMD, а также SDK и библиотеки DLSS от NVIDIA здесь не распространяются.

Вклад, вошедший в bbport (спасибо; полный список по выпускам — в docs/CONTRIBUTORS_0.7.md): SrDeTs (#10), IgorWarzocha (#36), itachi-re (#43), Bainianzzz (#71), hideoneric (#78), guitaripod (#80), unTanana (#83, #84, #89), andrR89 (#93), SaeedShow (#108), AndiMajore (#112, #113), ayozetr (#117), JuanraCM (#120), Supermedo и Awaken (сетевой стек модуля онлайна из Windows-форка Supermedo), wheat32 (#360 большие кучи для текстур-паков), Sarxzer (#347 французский), whp199 (#210, #211, #214, #342, #343), DominickCobb-rs (#346), maiconjsv (#339), iannitram (#293), adds39939 (#260 DLSS Frame Generation и Reflex), AndiMajore (#166, #224, #225), Qiming-Liu (#75, #157 китайский), AyrtonSanabio (#153, #154), axpico (#206), msisovic (#193), noelmiller (#235), Obrikash (#140), Aryxa (#137), ArenaMMORPG (#352/#353), guutol (трофеи), redditor69 (GT-VBAO), SrShadowy и Teefpyre (исправления движка и BBSC из форка SrShadowy), а также игроки, приславшие кэши шейдеров и журналы.