Go to file
Dean Galvin 6142e82aa0 perf(agc): keep the 10-bit scanout resident and present it with the guest path's pixels
PPSA21564's final composite renders into 4K 10-bit scanout buffers
(COLOR_2_10_10_10 with the alternate swap, A2R10G10B10). No guest texture
format matched that color format, so the target stayed non-resident:
every frame's composite draw ran synchronously (about 11 ms, 143 per 10 s
at the title) and the flip read the frame back through guest memory.

The blue-low 10-bit color target now keeps its bits in the storage image
of its surface's red-low 2-10-10-10 format, as B8G8R8A8 targets map to
R8G8B8A8.

Presenting it: DisplayTexelFormat names a display buffer's texel order as
the guest-memory path reads it (R8G8B8A8 base: red low, else blue low;
the 10-bit variant: A2B10G10R10 or A2R10G10B10). ResidentPresentPath
blits a resident image only when it holds the display's 8-bit texel
format (an exact copy). A 10-bit image (whose blit would round where the
guest path drops the low two bits), the other 8-bit order or an sRGB type
is converted instead: GpuColorTransfer::DetileImage copies the image's
texels raw and runs the guest path's own conversion shader on them, so
both paths present the same pixels.

The image's write-back is unchanged: its results stay pending like any
resident target's and are stored when a reader of the memory flushes
them.

Tests: agc_driver_recorder_tests checks the format decision for both
8-bit and both 10-bit orders, and converts an image in each order,
comparing it with the CPU decode and the GPU detile of the same words in
guest memory.
2026-10-03 08:49:27 +13:00
.github ci(tests): run build tests three times 2026-10-02 22:02:20 +03:00
3rdparty feat(audio): AJM MP3 through FFmpeg, 16-bit and ambisonic AudioOut2, voice 2026-09-29 21:22:15 +03:00
core perf(agc): keep the 10-bit scanout resident and present it with the guest path's pixels 2026-10-03 08:49:27 +13:00
docs Merge pull request #349 from DotDebian/feat/sync-on-address 2026-10-02 22:31:45 +03:00
tools fix(tools): count exports that call a local stub wrapper as unimplemented 2026-10-01 19:23:55 +02:00
.gitignore chore(gitignore): ignore build_tools/ secondary CMake tree 2026-09-25 16:27:49 -07:00
.gitmodules feat(audio): AJM MP3 through FFmpeg, 16-bit and ambisonic AudioOut2, voice 2026-09-29 21:22:15 +03:00
CMakeLists.txt refactor(cmake): place all test executables in build tests directory 2026-10-01 12:28:06 +03:00
CONTRIBUTING.md docs: add contributing guide 2026-09-30 16:53:17 +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.