PlayStation 3 emulator and debugger
Find a file
Elad 575a245f8d
IDM: Implement lock-free smart pointers (#16403)
Replaces `std::shared_pointer` with `stx::atomic_ptr` and `stx::shared_ptr`.

Notes to programmers:

* This pr kills the use of `dynamic_cast`, `std::dynamic_pointer_cast` and `std::weak_ptr` on IDM objects, possible replacement is to save the object ID on the base object, then use idm::check/get_unlocked to the destination type via the saved ID which may be null. Null pointer check is how you can tell type mismatch (as dynamic cast) or object destruction (as weak_ptr locking).
* Double-inheritance on IDM objects should be used with care, `stx::shared_ptr` does not support constant-evaluated pointer offsetting to parent/child type.
* `idm::check/get_unlocked` can now be used anywhere.

Misc fixes:
* Fixes some segfaults with RPCN with interaction with IDM.
* Fix deadlocks in access violation handler due locking recursion.
* Fixes race condition in process exit-spawn on memory containers read.
* Fix bug that theoretically can prevent RPCS3 from booting - fix `id_manager::typeinfo` comparison to compare members instead of `memcmp` which can fail spuriously on padding bytes.
* Ensure all IDM inherited types of base, either has `id_base` or `id_type` defined locally, this allows to make getters such as `idm::get_unlocked<lv2_socket, lv2_socket_raw>()` which were broken before. (requires save-states invalidation)
* Removes broken operator[] overload of `stx::shared_ptr` and `stx::single_ptr` for non-array types.
2024-12-22 20:59:48 +02:00
.ci Fixup Intel macOS builds 2024-12-15 15:04:46 +01:00
.github Remove Alipay link from FUNDING.yml 2024-07-18 20:44:04 +03:00
3rdparty Update SDL to 2.30.10 2024-12-17 22:44:46 +01:00
bin Qt: Try to fix classic stylesheet after Qt 6.7.3 update 2024-09-28 01:39:33 +02:00
buildfiles Improve and fix sln solution 2024-11-16 17:36:56 +01:00
darwin/util Fix Apple Clang build 2024-02-24 20:54:55 +02:00
rpcs3 IDM: Implement lock-free smart pointers (#16403) 2024-12-22 20:59:48 +02:00
Utilities IDM: Implement lock-free smart pointers (#16403) 2024-12-22 20:59:48 +02:00
.cirrus.yml Qt 6.8.1 2024-12-12 02:20:01 +01:00
.clang-format Disable AlignConsecutiveAssignments 2022-10-22 11:32:04 +02:00
.editorconfig Set default to utf-8 for MSVC 2020-12-06 15:30:12 +03:00
.gdbinit Add .gdbinit config file 2020-11-12 23:43:38 +03:00
.gitignore gitignore cleanup 2024-11-16 17:36:56 +01:00
.gitmodules cellGem: implement quaternion transformation 2024-12-11 18:56:53 +01:00
azure-pipelines.yml Revert Qt to 6.7.3 for macOS 2024-12-14 00:01:17 +01:00
BUILDING.md Qt 6.8.1 2024-12-12 02:20:01 +01:00
CMakeLists.txt Add opencv to cmake 2024-11-16 15:10:20 +01:00
CMakePresets.json Add opencv to cmake 2024-11-16 15:10:20 +01:00
git-clang-format Add a git pre-commit hook running clang-format 2016-08-27 15:40:41 +02:00
LICENSE Few bugs fixed and license file added 2014-02-13 11:33:07 +01:00
objdump.cpp Implement utils::memory_map_fd (partial) 2022-01-26 15:46:16 +03:00
pre-commit.readme Add a git pre-commit hook running clang-format 2016-08-27 15:40:41 +02:00
README.md Add Azure Build Status back to Readme.md 2023-09-23 00:02:48 +02:00
rpcs3.sln cellGem: implement quaternion transformation 2024-12-11 18:56:53 +01:00
usertype.dat .clang-format added 2016-08-12 14:32:57 +03:00

RPCS3

Azure Build Status Cirrus CI - Base Branch Build Status RPCS3 Discord Server

The world's first free and open-source PlayStation 3 emulator/debugger, written in C++ for Windows, Linux, macOS and FreeBSD.

You can find some basic information on our website. Game info is being populated on the Wiki. For discussion about this emulator, PS3 emulation, and game compatibility reports, please visit our forums and our Discord server.

Support Lead Developers Nekotekina and kd-11 on Patreon

Contributing

If you want to help the project but do not code, the best way to help out is to test games and make bug reports. See:

If you want to contribute as a developer, please take a look at the following pages:

You should also contact any of the developers in the forums or in the Discord server to learn more about the current state of the emulator.

Building

See BUILDING.md for more information about how to setup an environment to build RPCS3.

Running

Check our friendly quickstart guide to make sure your computer meets the minimum system requirements to run RPCS3.

Don't forget to have your graphics driver up to date and to install the Visual C++ Redistributable Packages for Visual Studio 2019 if you are a Windows user.

License

Most files are licensed under the terms of GNU GPL-2.0-only License; see LICENSE file for details. Some files may be licensed differently; check appropriate file headers for details.