A mesh program took its draw's index count from push constants, so an indirect mesh-path (NGG) draw needed the CPU to read its record first, waiting for the GPU to finish everything recorded before. In PPSA21564 that was about 170 waits per 10 s at the title, menu and level (about 1 s), and one per frame in the intro (2.2 s per 10 s). The two free mesh push dwords now carry the device address of an argument record (a VkDrawMeshTasksIndirectCommandEXT followed by the index count and first index). When the address is set, the prologue takes the index count and the first index from the record (the new MeshArgument IR value, a load through a physical storage buffer pointer) and offsets its index reads by the first index; a direct draw leaves the address 0 and draws as before. Mesh modules declare the physical storage buffer capability for it, and the driver's SPIR-V validation accepts the extension in mesh modules. An indexed mesh draw with one record that patches no user SGPR now stays on the GPU. A one-thread compute pass (Graphics/shaders/MeshArguments.comp) turns the record, read in place from its host import, into the draw's argument record: the groups and instances of vkCmdDrawMeshTasksIndirectEXT and the index count and first index the mesh program reads, with the CPU path's rules (count clamped to the index buffer, nothing for an empty record or past the device's group limits). The index buffer descriptor covers the whole buffer and the program offsets by the first index. When the records cannot be read in place, the CPU reads them and fills the same argument record (ResolveMeshArguments). |
||
|---|---|---|
| .github | ||
| 3rdparty | ||
| core | ||
| docs | ||
| tools | ||
| .gitignore | ||
| .gitmodules | ||
| CMakeLists.txt | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| README.md | ||
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
* 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.
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.