mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-20 10:56:58 +02:00
4e8e335b7b
* macOS: auto-discover bundled MoltenVK on startup
On macOS the Vulkan loader comes from MoltenVK. SDL's default
probe only searches system paths, so a bundled libMoltenVK.dylib
next to the executable is invisible under the hardened runtime.
Probe it explicitly via SDL_GetBasePath() before falling back to
SDL's default search. Respect SDL_VULKAN_LIBRARY overrides and
log which loader is used. Update README to reflect that no
environment variable is required for bundled builds.
Co-Authored-By: internal-model
* window: fix Vulkan portability enumeration on macOS
MoltenVK requires VK_KHR_portability_enumeration and
VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR to surface
portability devices via enumeratePhysicalDevices. Without the flag
the adapter is hidden on some driver versions, causing
"Could not find suitable device" failures.
Add the instance extension and flag when available, and add
diagnostic logs for all MoltenVK fallbacks (depthClipEnable,
colorWriteEnable, depthBounds, fragmentShaderBarycentric)
so black-screen diagnostics are actionable.
* macOS: add KytyPS5.app bundle packaging
Add a proper macOS application bundle when the launcher is built.
launcher becomes KytyPS5.app (CFBundleIdentifier org.kytyps5.kytyps5)
with KytyPS5 as the executable, and kyty_emulator is installed as a
helper inside Contents/MacOS so QCoreApplication::applicationDirPath()
finds it. MoltenVK is auto-discovered via SDL_GetBasePath() in that
directory, so no SDL_VULKAN_LIBRARY is required.
- src/launcher/Info.plist.in: minimal bundle plist (version from
PROJECT_VERSION, LSMinimumSystemVersion 13.0).
- src/launcher/CMakeLists.txt: set MACOSX_BUNDLE, BUNDLE DESTINATION,
install helper, re-sign helper with JIT entitlements, and invoke
macdeployqt when available. Keep flat kyty_emulator for CLI.
- .github/workflows/build.yml: bundle MoltenVK into
KytyPS5.app/Contents/MacOS when present, verify bundle artifacts
(file/lipo/codesign), and handle bundle paths in the release zip.
- README.md: document bundle double-click and MoltenVK locations.
* launcher: fix bundle rpath for Qt frameworks
The bundle executable had @rpath references to Qt frameworks but no
LC_RPATH, causing dyld to abort at launch:
Library not loaded: @rpath/QtConcurrent.framework
Reason: no LC_RPATH's found
Set INSTALL_RPATH to @executable_path/../Frameworks and
BUILD_WITH_INSTALL_RPATH so the built and installed bundles
resolve Qt from Contents/Frameworks. Verified via otool -l
(LC_RPATH now present) and macdeployqt now succeeds without
"Cannot resolve rpath" errors.
* launcher: add Import game button
Add a prominent Import button to ConfigurationListWidget that lets
users select a game folder (containing eboot.bin) or a folder
containing multiple games via QFileDialog. Handles:
- Single game folder selected: adds its parent to game_dirs (Scan
searches subdirectories, so parent is needed)
- Folder with multiple games: adds the selected folder
- Deduplication via PathKey/NormalizeGameDirectories, writes
settings, rescans, and selects the imported game if found
- Shows info/warning dialogs when no games are found
UI: QToolButton with SP_DirOpenIcon and text Import beside the
existing toolbar, styled with a blue background for visibility.
Logic in ConfigurationListWidget::import_game().
* macOS: fix bundled loader and artifact packaging
* Revert "launcher: add Import game button"
This reverts commit 2f670ef95c.
---------
Co-authored-by: nmzik <Nmzik@mail.ru>
344 lines
14 KiB
Markdown
344 lines
14 KiB
Markdown
# KytyPS5
|
|
|
|
[](https://github.com/KytyPS5/KytyPS5/actions/workflows/build.yml)
|
|
[](https://github.com/KytyPS5/KytyPS5/actions/workflows/build.yml)
|
|
[](https://github.com/KytyPS5/KytyPS5/actions/workflows/build.yml)
|
|
[](#system-requirements)
|
|
[](#current-status)
|
|
[](LICENSE)
|
|
|
|
KytyPS5 is a free and open-source PlayStation 5 emulator written in C++ for Windows and Linux,
|
|
with experimental macOS support. It is based on a heavily modified version of
|
|
[Kyty](https://github.com/InoriRus/Kyty). The project is in an early stage of development, so
|
|
compatibility is limited and behavior may change significantly between builds.
|
|
|
|
> [!IMPORTANT]
|
|
> KytyPS5 is not affiliated with Sony Interactive Entertainment or PlayStation. The project does
|
|
> not distribute games or copyrighted system software. Use only game files that you have obtained
|
|
> legally.
|
|
|
|
## Current Status
|
|
|
|
KytyPS5 can boot 2D games and a selection of 3D games, including titles built with Unreal Engine
|
|
4/5, Unity, and custom engines. No external low-level emulation modules are currently required.
|
|
|
|
Development is focused on compatibility and boot reliability.
|
|
|
|
Windows is the primary platform and receives the most testing. Linux builds and runs; see
|
|
[Building on Linux](#building-on-linux).
|
|
|
|
macOS support is experimental. The emulator is built for x86-64 and runs on Apple Silicon under
|
|
Rosetta 2, with Vulkan provided by MoltenVK. A small number of titles have been verified in-game
|
|
on Apple Silicon hardware; see [Building on macOS](#building-on-macos).
|
|
|
|
Community game test results are available in the
|
|
[KytyPS5 Compatibility List](https://kytyps5.github.io/).
|
|
|
|
## Bugs and Issues
|
|
|
|
The project is in an early stage, so please be mindful when opening new issues. Expect crashes,
|
|
graphical glitches, low compatibility, and poor performance.
|
|
|
|
## Screenshots
|
|
|
|
<table align="center">
|
|
<tr>
|
|
<td align="center">
|
|
<strong>Disgaea 6</strong><br>
|
|
<img src="docs/screenshots/ps5-01.png" width="300" alt="Disgaea 6 running in KytyPS5">
|
|
</td>
|
|
<td align="center">
|
|
<strong>Dreaming Sarah</strong><br>
|
|
<img src="docs/screenshots/ps5-03.png" width="300" alt="Dreaming Sarah running in KytyPS5">
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="center">
|
|
<strong>Neptunia ReVerse</strong><br>
|
|
<img src="docs/screenshots/ps5-04.png" width="300" alt="Neptunia ReVerse running in KytyPS5">
|
|
</td>
|
|
<td align="center">
|
|
<strong>SILENT HILL: The Short Message</strong><br>
|
|
<img src="docs/screenshots/ps5-05.png" width="300" alt="SILENT HILL: The Short Message running in KytyPS5">
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="center">
|
|
<strong>Hellboy</strong><br>
|
|
<img src="docs/screenshots/ps5-02.png" width="300" alt="Hellboy running in KytyPS5">
|
|
</td>
|
|
<td align="center">
|
|
<strong>Paleo Pines</strong><br>
|
|
<img src="docs/screenshots/ps5-06.png" width="300" alt="Paleo Pines running in KytyPS5">
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p align="center"><em>And many more...</em></p>
|
|
|
|
## Contributing
|
|
|
|
Testing games and submitting detailed bug reports are useful ways to contribute. Search existing
|
|
issues first, then use the **Game Emulation Bug Report** template and attach the complete log file.
|
|
|
|
Code contributions should be focused, build successfully on the platforms they touch, and include
|
|
relevant tests where practical. Windows is the primary target, so a change that alters shared code
|
|
should not regress it; changes confined to a platform's own code paths only need to build there. Because KytyPS5 is still evolving quickly, consider opening an issue before
|
|
starting a large change.
|
|
|
|
### Formatting
|
|
|
|
Set up the clang-format hook after cloning:
|
|
|
|
```powershell
|
|
python -m pip install pre-commit
|
|
python -m pre_commit install --install-hooks
|
|
```
|
|
|
|
It formats staged `.cpp`, `.h`, and `.inc` files in `src`.
|
|
|
|
## Developer Information
|
|
|
|
The PS5 graphics architecture is based on AMD RDNA 2. Use AMD's
|
|
[RDNA 2 Instruction Set Architecture Reference Guide (document 70648)](https://docs.amd.com/v/u/en-US/rdna2-shader-instruction-set-architecture)
|
|
as the primary instruction-encoding reference when working on shader decoding and recompilation.
|
|
|
|
Important areas of the codebase:
|
|
|
|
- [`src/graphics/shader/recompiler`](src/graphics/shader/recompiler) — instruction decoding,
|
|
intermediate representation, control flow, resource tracking, and SPIR-V emission
|
|
- [`src/graphics/guest_gpu`](src/graphics/guest_gpu) — PS5 (Prospero) GPU formats and command processing
|
|
- [`src/graphics/host_gpu`](src/graphics/host_gpu) — Vulkan host backend and resource management
|
|
- [`tests`](tests) — focused memory, shader, and resource-tracking regression tests
|
|
|
|
The renderer targets Vulkan 1.3. Keep shader changes aligned with both the RDNA 2 ISA semantics and
|
|
the Vulkan/SPIR-V validation rules.
|
|
|
|
## Building
|
|
|
|
### System requirements
|
|
|
|
- Windows 10 version 1803, a current Linux distribution, or macOS on Apple Silicon
|
|
- A 64-bit x86 processor (on macOS, an Apple Silicon processor with Rosetta 2)
|
|
- A Vulkan 1.3-capable GPU with current drivers (on macOS, Vulkan is provided by the bundled
|
|
MoltenVK)
|
|
|
|
### Build requirements (Windows)
|
|
|
|
- Git
|
|
- CMake 3.12 or newer
|
|
- Ninja
|
|
- Visual Studio 2022 or Build Tools 2022 with the **Desktop development with C++** workload and
|
|
**C++ Clang tools for Windows** component
|
|
- Qt 6 for MSVC 2022 64-bit, including Concurrent, Network, and Widgets
|
|
|
|
The Microsoft C++ compiler (`cl.exe`) is not supported; use `clang-cl`.
|
|
|
|
Open an **x64 Native Tools Command Prompt for Visual Studio 2022** (or the equivalent Developer
|
|
PowerShell), change to the repository root, and initialize the dependencies:
|
|
|
|
```powershell
|
|
git submodule update --init --recursive
|
|
```
|
|
|
|
Configure the project. Replace the Qt path with the version installed on your system:
|
|
|
|
```powershell
|
|
cmake -S . -B _Build/windows -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_PREFIX_PATH="C:/Qt/6.x.x/msvc2022_64"
|
|
```
|
|
|
|
Build the launcher and stage a runnable installation:
|
|
|
|
```powershell
|
|
cmake --build _Build/windows --target launcher
|
|
cmake --install _Build/windows --prefix _Build/windows/install
|
|
```
|
|
|
|
The finished application and its runtime dependencies will be placed in
|
|
`_Build/windows/install`.
|
|
|
|
### Building on Linux
|
|
|
|
Install the toolchain and the libraries the bundled SDL2 needs. Without the audio, Wayland and
|
|
udev development packages SDL2 quietly configures itself without those backends, and the resulting
|
|
build has no working sound and no gamepad hotplug:
|
|
|
|
```bash
|
|
sudo apt-get install --no-install-recommends \
|
|
clang lld ninja-build cmake git glslang-tools \
|
|
libgl1-mesa-dev libx11-dev libxcursor-dev libxext-dev libxfixes-dev \
|
|
libxi-dev libxrandr-dev libxss-dev libxkbcommon-dev \
|
|
libasound2-dev libpulse-dev libudev-dev libdbus-1-dev libwayland-dev wayland-protocols
|
|
```
|
|
|
|
Qt 6 (Concurrent, Network, Widgets) is also required — either the distribution packages
|
|
(`qt6-base-dev`) or an official Qt installation.
|
|
|
|
```bash
|
|
git submodule update --init --recursive
|
|
|
|
cmake -S . -B _Build/linux -G Ninja -DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
|
|
-DCMAKE_PREFIX_PATH="$Qt6_DIR"
|
|
|
|
cmake --build _Build/linux --target launcher --parallel
|
|
cmake --install _Build/linux --prefix _Build/linux/install
|
|
```
|
|
|
|
The install step copies the Qt libraries and plugins next to the binaries, so
|
|
`_Build/linux/install` runs without a matching system Qt.
|
|
|
|
As on Windows, the MSVC compiler is not used; Clang is required. `cl.exe` is rejected at configure
|
|
time.
|
|
|
|
The CMake source root is the repository root.
|
|
|
|
### Building on macOS
|
|
|
|
macOS builds target x86-64 and run under Rosetta 2 on Apple Silicon, so the PS5's x86-64 game
|
|
code executes through the same translation layer as the emulator itself. Prebuilt archives are
|
|
attached to releases; the steps below are for building from source.
|
|
|
|
Requirements:
|
|
|
|
- An Apple Silicon Mac with Rosetta 2 installed (`softwareupdate --install-rosetta`)
|
|
- Xcode (or the Command Line Tools)
|
|
- Homebrew packages: `brew install cmake ninja glslang`
|
|
- Qt 6 (Concurrent, Network, Widgets) with x86-64 support. The official Qt installation is
|
|
universal and works; Homebrew's Qt is arm64-only and will not link
|
|
|
|
```bash
|
|
git submodule update --init --recursive
|
|
|
|
cmake -S . -B _Build/macos -G Ninja -DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
|
|
-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
|
|
-DCMAKE_PREFIX_PATH="$Qt6_DIR"
|
|
|
|
cmake --build _Build/macos --target launcher --parallel
|
|
cmake --install _Build/macos --prefix _Build/macos/install
|
|
```
|
|
|
|
The build re-signs `kyty_emulator` with the JIT entitlements it needs to execute translated
|
|
guest code; no manual signing step is required. When the launcher is built, the install
|
|
also produces `_Build/macos/install/KytyPS5.app` — double-click to launch the GUI.
|
|
A flat `kyty_emulator` is kept for CLI usage.
|
|
|
|
Vulkan comes from MoltenVK. Download `MoltenVK-macos.tar` from the
|
|
[MoltenVK releases](https://github.com/KhronosGroup/MoltenVK/releases), then copy
|
|
`MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib` next to the flat `kyty_emulator`
|
|
(and, for the bundle, into `KytyPS5.app/Contents/Frameworks/`) and ad-hoc sign it:
|
|
|
|
```bash
|
|
codesign --force --sign - _Build/macos/install/libMoltenVK.dylib
|
|
# For the bundle (if present):
|
|
codesign --force --sign - _Build/macos/install/KytyPS5.app/Contents/Frameworks/libMoltenVK.dylib
|
|
codesign --force --sign - _Build/macos/install/KytyPS5.app
|
|
```
|
|
|
|
Release archives already include a signed `libMoltenVK.dylib` (both flat and inside the bundle).
|
|
|
|
### Regression tests
|
|
|
|
Build every regression executable and run the registered tests with:
|
|
|
|
```powershell
|
|
cmake --build _Build/windows --target kyty_tests
|
|
ctest --test-dir _Build/windows --output-on-failure
|
|
```
|
|
|
|
Use `_Build/linux` instead of `_Build/windows` for a Linux build.
|
|
|
|
### Visual Studio Code
|
|
|
|
A ready-made Visual Studio Code setup is included in [`.vscode`](.vscode). It configures CMake
|
|
Tools to build the project with Ninja and `clang-cl` and provides launch profiles for both
|
|
`launcher.exe` and `kyty_emulator.exe`. It is Windows-only: VS Code settings cannot select a
|
|
compiler per platform, so on Linux configure from the command line as shown above.
|
|
|
|
Before using it:
|
|
|
|
1. Install the **CMake Tools** and **C/C++** extensions in Visual Studio Code.
|
|
2. Update `CMAKE_PREFIX_PATH` in [`.vscode/settings.json`](.vscode/settings.json) to point to your
|
|
Qt 6 MSVC installation.
|
|
3. Update the `--game` path in [`.vscode/launch.json`](.vscode/launch.json) for the
|
|
**Debug kyty_emulator** profile.
|
|
4. Open the repository in an x64 Visual Studio developer environment, configure the CMake project,
|
|
and select a launch profile from **Run and Debug**.
|
|
|
|
## Running
|
|
|
|
Update your graphics driver before reporting rendering problems.
|
|
|
|
To use the graphical launcher:
|
|
|
|
```powershell
|
|
.\_Build\windows\install\launcher.exe
|
|
```
|
|
|
|
```bash
|
|
./_Build/linux/install/launcher
|
|
```
|
|
|
|
```bash
|
|
open _Build/macos/install/KytyPS5.app # or double-click in Finder
|
|
```
|
|
|
|
On first launch, add one or more game folders in the global settings. The launcher searches those
|
|
folders recursively for game directories containing `eboot.bin`. Select a detected game and run it
|
|
from the game list.
|
|
|
|
The emulator can also be started directly with a legally obtained game directory or ELF file:
|
|
|
|
```powershell
|
|
.\_Build\windows\install\kyty_emulator.exe --game "D:\Games\ExampleGame"
|
|
```
|
|
|
|
```bash
|
|
./_Build/linux/install/kyty_emulator --game "/games/ExampleGame"
|
|
```
|
|
|
|
On macOS, the adjacent flat or app-bundled `libMoltenVK.dylib` is found automatically; no
|
|
environment variable is required:
|
|
|
|
```bash
|
|
./_Build/macos/install/kyty_emulator --game "/games/ExampleGame"
|
|
```
|
|
|
|
To override the Vulkan loader, set `SDL_VULKAN_LIBRARY`:
|
|
|
|
```bash
|
|
SDL_VULKAN_LIBRARY=/path/to/libMoltenVK.dylib ./kyty_emulator --game "/games/ExampleGame"
|
|
```
|
|
|
|
Run `kyty_emulator --help` to see the available graphics, logging, validation, profiling, and
|
|
debugging options.
|
|
|
|
### AI Use
|
|
|
|
AI tools may be used for research, reverse engineering, and development assistance. Contributors
|
|
must fully understand, review, and test all code they submit and remain responsible for its
|
|
correctness. Repository communication, including pull-request descriptions, code comments, and
|
|
issue comments, must come from the human contributor rather than an autonomous AI agent.
|
|
|
|
Pull requests that include AI-assisted or AI-generated work should disclose the scope of the AI
|
|
involvement and describe the human review and testing performed before submission. Unverified or
|
|
untested generated changes may be closed without review.
|
|
|
|
## License
|
|
|
|
KytyPS5 is licensed under the [GNU General Public License version 2](LICENSE)
|
|
(`GPL-2.0-only`).
|
|
|
|
This project is based on the original [Kyty](https://github.com/InoriRus/Kyty), which was released
|
|
under the MIT License. Kyty's original copyright and license notice are preserved in
|
|
[`LICENSES/Kyty-MIT.txt`](LICENSES/Kyty-MIT.txt). Third-party components remain subject to the
|
|
licenses included with those components.
|
|
|
|
## Special Thanks
|
|
|
|
- [InoriRus/Kyty](https://github.com/InoriRus/Kyty) — KytyPS5 is based on a heavily modified version
|
|
of the original Kyty project.
|
|
- [shadps4-emu/shadPS4](https://github.com/shadps4-emu/shadPS4) — reference for memory-model
|
|
understanding and the AVPlayer implementation.
|