Go to file
Michon 55447e1c77 fix(recompiler): read a coherent dwordx2 as one 64-bit atomic load
A glc buffer_load_dwordx2 is one 64-bit access on the GPU, so it never
sees half of a buffer_atomic_swap_x2. It was emitted as two dword loads,
which can: the first can read the flag from before the swap and the
second the value from after it.

GTA V gives its BVH nodes their record indices with a single-pass
decoupled look-back prefix sum. Each workgroup publishes a {flag, value}
pair for its block with buffer_atomic_swap_x2 and reads the previous 64
blocks' pairs with glc dwordx2 loads. A torn read counts earlier blocks
twice, two nodes then share records, the BVH is corrupt and the ray
tracing refit hangs. It only happens in scans of more than 64 blocks (the
largest BVHs) and depends on timing.

In a program that has the u64 storage-buffer view (it uses 64-bit buffer
atomics), a coherent raw two-dword buffer load that is 8-byte aligned and
in bounds is now read with one device-scope OpAtomicLoad on that view and
split with OpUConvert and a shift (not OpBitcast to a uvec2, which
crashes NVIDIA's shader compiler). All other loads keep the per-dword
path.

tests/execution/LookBackScan runs the game's scan kernel: the look-back
from given blocks, and 50 whole 125-block scans checked against a CPU
prefix sum. Without this change the first whole scan fails.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-07 11:08:58 +02:00
.github ci: run lavapipe at the AVX level on every Linux runner 2026-10-04 06:08:37 +13:00
3rdparty fix(jpegenc): honor chroma sampling and encode true grayscale JPEGs 2026-10-05 21:49:36 +02:00
core fix(recompiler): read a coherent dwordx2 as one 64-bit atomic load 2026-10-07 11:08:58 +02:00
docs Merge pull request #734 from alfalfa-star/feat/ppsa14632-missing-exports 2026-10-07 22:00:08 +13:00
tools feat(shader): decode s_setkill as s_endpgm 2026-10-07 08:39:41 +02:00
.gitignore chore(gitignore): ignore build_tools/ secondary CMake tree 2026-09-25 16:27:49 -07:00
.gitmodules fix(jpegenc): honor chroma sampling and encode true grayscale JPEGs 2026-10-05 21:49:36 +02:00
CMakeLists.txt Merge pull request #281 from SP4C3B4R-8/fix/mingw-test-runtime 2026-10-05 12:10:13 +13:00
CONTRIBUTING.md docs(contributing): shader PRs say where instruction semantics come from 2026-10-06 22:12:08 +02:00
LICENSE initial commit 2026-08-03 20:02:52 +03:00
README.md docs(usage): add relinker usage md doc 2026-10-02 21:50:35 +03:00

README.md

About

Tool for automatic executables porting to Linux and Windows.

Includes a relinker that converts executable to the target system's native format and implementations of system prx libraries suitable for dynamic linking. No emulation or separate runtime process.

Usage, Build instructions, Technical debt of the project, code style conventions, contributing

Status

libraries shaders

progress map

* System libraries: percentage of the functions known to the project so far (declared in core/libs/prx), not of every PS5 system function. The total grows as more functions are declared.

List of verified games

Dreaming Sarah (2D platformer) runs at a stable 60 fps on a GTX 1050 Ti / i5-7500 3.4GHz.

Unsupported or unexpected states strictly throw std::runtime_error. what() is printed to stderr and the process terminates.

The shader recompiler successfully produces SPIR-V (validated via Spirv-Tools when built with ANYPS5_ENABLE_SPIRV_TOOLS).

Compatibility

See the game compatibility list for tested games and known issues.

Input mapping

SDL-mapped game controllers are supported, including analog sticks and triggers. Keyboard and mouse controls can be configured with an anyps5-input.ini file. See input mapping for the supported devices and configuration format.

Disclaimer

This project is intended for interoperability, research, preservation, and compatibility purposes. It does not include, distribute, or require copyrighted software, firmware, cryptographic keys, or proprietary libraries. Users are responsible for ensuring that any binaries used with this project are obtained and used in accordance with applicable laws and their respective license terms.

License

This project is licensed under the GNU General Public License version 2 only.