RPCS3 is a multi-platform open-source Sony PlayStation 3 emulator and debugger written in C++ for Windows, Linux, macOS and FreeBSD. The purpose of the project is to completely and accurately emulate the Sony PlayStation 3 Computer Entertainment System in its entirety with the power of open-source community and reverse engineering.

Our goal is to preserve the legacy of the PlayStation 3 hardware and its vast library by bringing it and its exclusives to the PC platform. We want to achieve this by targeting and supporting multiple operating systems as well as being compatible with a wide range of computer hardware with realistic requirements.

What input devices can I use with RPCS3?

We currently support keyboard / mouse inputs and native DualShock 3, DualShock 4 and DualSense controllers. We plan to add additional input methods in the future as we implement more meaningful features to the emulator.

What PlayStation 3 peripherals can I use with RPCS3?

We currently have support for the PlayStation Eye Camera, however PlayStation 3 Move controller support is still under development.

Can I just insert a PlayStation 3 game disc and start playing games?

In its current state, RPCS3 does not support reading game data directly from PlayStation 3 format discs. PlayStation 3 discs are formatted in a very special way that can only be read with an actual PlayStation 3 system, or a compatible Blu-ray drive from select manufacturers. For more information on what Blu-ray drives are capable of reading games, please refer to the Quickstart Guide.

Where do I get PlayStation 3 games and software?

Typically, you want to dump your own PlayStation 3 games and software from your own console. We believe that this is the most efficient and safest way to migrate your disc-based games and digital games from your console to your PC.

You can also dump games using select compatible Blu-ray drives. Not every Blu-ray drive will recognize PlayStation 3 games due to how data is formatted on the disc. For more information on what Blu-ray drives are capable of reading games, please refer to the Quickstart Guide.

RPCS3 uses the GNU General Public License Version 2 (June 1991). According to the license, you are welcome to use RPCS3 and its source code for any purpose, but distributing RPCS3 requires that the source code be released and attribution given. For more details on how the GNU General Public License system works, please refer to GNU.org

High Resolution Rendering

One of the most anticipated features has just been added to RPCS3! High resolution rendering allows users to play at resolutions far exceeding what the PS3 could handle. If you thought your favourite PS3 games were starting to look a bit dated, just wait until you get to experience them in up to 10k! Although, we doubt many users will have the setup necessary to benefit from 10k today, emulation is all about preserving for tomorrow.

Performance

Rendering a modern PC game in high resolutions such as 4k, while beautiful, is quite taxing on your hardware and there is often a massive hit in performance. However, since most of the workload for RPCS3 is on the CPU and GPU usage is low, there is a lot of untapped performance just waiting to be used. All processing is done CPU side, and as far as the GPU is concerned it is simply rendering 2006 era graphics (yes, the PS3 is 11 years old now). We're happy to report that anyone with a dedicated graphics card that has Vulkan support can expect identical performance at 4k.

Anisotropic Filtering (AF)

High resolution support wasn't the only thing that was added in this update! Another reason for such a massive upgrade in visual fidelity is having full 16x AF support. This greatly improves how textures can look, especially when viewed at an angle. Take a look at the below screenshots of Ni no Kuni as an example of the default AF vs forced 16x. The difference is especially noticeable on the ground inside the gate.

RPCS3 Compatibility List

These are the current compatible games that have been tested with the emulator. This list is subject to change frequently.

What's New

  • Remove duplicated code in VKShaderInterpreter.cpp by @digant73 in #18832
  • Add "Enable Mouse-based Gyro" setting to I/O config by @Windsurf7 in #18835
  • SPU LLVM: Use 128-bit SVE2 for FMS by @Whatcookie in #18837
  • SPU LLVM: Idiomatic FSM implementation for ARM64 by @Whatcookie in #18806
  • SPU LLVM: SVE multiply optimizations (ARM) by @Whatcookie in #18789
  • vk: Autogrow descriptor pools based on demand by @kd-11 in #18844
  • Initialize rtmidi async by @Megamouse in #18843
  • Make FFB direction encoding for emulated G27 configurable by @ZerNico in #18776
  • usb_device: present wii instruments as PS3 instruments by @sanjay900 in #18796
  • SPU LLVM: Use I8MM for GBH and GBB by @Whatcookie in #18833
  • Update Submodules by @Megamouse in #18840
  • HOTFIX: JIT/AArch64: advertise +i8mm to the LLVM target machine by @Rad0van in #18846
  • SPU LLVM: Use TBL for AArch64 ROTQBY shuffles by @Whatcookie in #18818
  • cellAudio: fix _mxr000 surmixer event-queue key constant by @Rad0van in #18850
  • RSX: Add hardware spin_wait helper, use it in flush requests by @Whatcookie in #18830
  • rsx: Handle mipmap sampling edge case when SNORM emulation is active by @kd-11 in #18860
  • cellAudio: Fix _mxr000 event queue hack by @elad335 in #18857
  • SPU/PPU: Implement PPU reservation priority over SPUs by @elad335 in #18854
  • rsx: Use mip0 resolution scale when computing mipmap scaling factors by @kd-11 in #18866
  • Qt: Add exit game shortcut by @Megamouse in #18869
  • SaveStates: Fix lv2_timer serialization by @elad335 in #18878
  • ffmpeg: remove directshow backend by @Megamouse in #18879
  • Fix drag & drop of files on main window by @digant73 in #18885
  • gui: Move download database actions from game list to Manage -> Database submenu by @Vishrut2403 in #18870
  • rsxaudio: fix some VS warnings by @Megamouse in #18886
  • gui: Play preview videos on row selection, not just hover by @thephilcoulson in #18721
  • Use more std::move by @Megamouse in #18868
  • Add integrity check to PSN Content, DLC and Game Update files by @digant73 in #18669
  • Fix visual studio projects by @Megamouse in #18889
  • Do not throw on hex_to_bytes error in iso get_key by @Megamouse in #18891
  • Optimise PNGs across the repo by @Chubercik in #18831
  • Use more std::string_view (Part 1) by @Megamouse in #18890
  • gl: Maintenance fixes by @kd-11 in #18874
  • Use opengl renderer in game window title by @Megamouse in #18895
  • Use more fmt::split_sv by @Megamouse in #18898
  • Stop playing gamelist movies when the window loses focus by @Megamouse in #18899
  • Use more std::string_view (Part 2) by @Megamouse in #18901
  • [SPU] Optimize CLZ on targets without AVX512 by @WalterKruger in #18900
  • sys_rsx: Fix IOMAP syscalls argument types by @elad335 in #18909
  • Fix std::string_view regressions by @Megamouse in #18908
  • Qt: use readable strings for window visibility in gui settings by @Megamouse in #18907
  • [macOS] Update runners to OS 15, raise minimum deployment target accordingly by @schm1dtmac in #18897
  • Add user agent to curl requests by @Megamouse in #18912
  • [SPU] Calculate FRSQEST exponent using arithmetic by @WalterKruger in #18905
  • Add missing sanity check in savedata_op by @Megamouse in #18918
  • Update pugixml to 1.16 by @Megamouse in #18904
  • fix double path delimiter by @digant73 in #18923
  • Use more std::string_view (Part 3) by @Megamouse in #18903
  • [SPU LLVM] Calculate FREST fraction using vperm2d for AVX512 by @WalterKruger in #18931
  • SPU Analyzer: Giga Block Crash Fix for Skylanders Giants by @chotchki in #18935
  • SPU LLVM: Use SVE2 XAR for constant rotates by @Whatcookie in #18849
  • [SPU LLVM] Refactor SHUFB to improve readability by @WalterKruger in #18937
  • Update wolfssl to 5.9.2 by @Megamouse in #18946
  • Update 7zip to 26.02 by @Megamouse in #18947
  • [SPU LLVM] Additional SHUFB splat/special-index fast paths by @WalterKruger in #18945
  • emulated turntable: allow to map motion sensors by @Megamouse in #18958
  • Add more motion control mappings to turntable and ghltar by @Megamouse in #18961
  • Fix consteval read_from_ptr and add sanity checks if possible by @Megamouse in #18963
  • Propagate src_loc in write_to_ptr and read_from_ptr by @Megamouse in #18967
  • SPU Precompilation: Add support for unaligned segments by @elad335 in #18968
  • Fix TTY UTF-8 logging by @Megamouse in #18969
  • settings: Default async with shader interpreter with no shader compilation hint by @AniLeo in #18956
  • Fix cellKb when using key modifiers on linux by @Megamouse in #18938
  • macOS: DJ Hero Turntable support (deck buttons, passthrough conflict) by @silvatyrant in #18957
  • Fix out of bounds read in Dimensions by @Megamouse in #18972
  • cellSysmodule implementation by @capriots in #18962
  • [SPU ASMJIT] Vectorized 16-bit variable shifts for SSE2 targets by @WalterKruger in #18911
  • SPU LLVM: Use ARM USHL for masked infinite shifts by @Whatcookie in #18816
  • PPU LLVM: Fix core_lock locking by @elad335 in #18774
  • SPU: Comparisons via multiplications for ARM, checksums via absolute difference, and rolled loops by @Whatcookie in #18824
  • Fallback unsupported database SPU decoder on ARM64 by @cicerohellmann in #18651
  • sysinfo.cpp: Relax TSC calibration constraints by @elad335 in #17909
  • cellSysmodule: fixup by @capriots in #18977
  • Fix VSH on ARM64: Memory management fixes by @elad335 in #18707
  • cellSysmodule: fixup (part 2) by @capriots in #18978
  • Move unsafe raw pointer write_to_ptr and read_from_ptr to write_to_ptr_unsafe and read_from_ptr_unsafe by @Megamouse in #18975
  • Update Submodules by @Megamouse in #18980
  • Extra logging for GUI notifications by @RipleyTom in #18988
  • input: fix arrow key mapping roundtrip on macOS ARM by @Icnopandaz in #18920
  • Bump global savestate version by @capriots in #18989
  • VK: fix video_out_calibration_pass::get_fragment_inputs by @Megamouse in #18952
  • Add OpenCV 5 Support by @hcorion in #18998
  • Update fusion to 1.3.0 by @Megamouse in #19008
  • Update curl to 8.21.0 by @Megamouse in #18943
  • Fix PS1 classics shortcuts by @Megamouse in #19012
  • [SPU LLVM] Refactor SELB to improve readability by @WalterKruger in #19002
  • [SPU ASMJIT] Optimize xfloat compares and multiply by @WalterKruger in #19025
  • IDM: Optimize search for concurrency by @elad335 in #19027
  • sys_fs: Fix ENOTDIR check for paths ending with /dot or /dotdot by @elad335 in #19028
  • Update fusion to 1.3.1 by @Megamouse in #19030
  • PPU LLVM: Optimize vector NaN handling for AVX512 by @Yahfz in #19033
  • PPU LLVM: Optimize vector denormal handling for AVX512 by @Yahfz in #19034
  • [SPU LLVM] Replace constant float checks with LLVM's KnownFPClass analysis by @WalterKruger in #19043
  • PPU LLVM: Accelerates NJ handling in FTZ environment by @elad335 in #19040
  • metainfo: Update screenshot preview by @AniLeo in #19044
  • qt: Fix save manager crash when deleting multiple entries by @ProtoJay4789 in #19019
  • Revert SPU Reduced Loop Optimizations to fix Arm64 regressions by @elad335 in #18979
  • SPU: Revert LQX/STQX reduction by @elad335 in #19050
  • [SPU LLVM] Use select in FMA to shorten its dependency chain by @WalterKruger in #19052
  • pad settings: Fix for clearing bindings by @Megamouse in #19054
  • Add more info to VFS exceptions by @Megamouse in #19055
  • [macOS] Update to the latest MoltenVK 1.4.2 prebuilt by @schm1dtmac in #19059
  • atomic: Fix BSD compilation by @AniLeo in #19061
  • LLVM: Improve v128 constant extraction by @elad335 in #19064
  • Fix: get_known_bits fix by @RipleyTom in #19051
  • cli: allow to boot last savestate of a game by @Megamouse in #19067
  • Qt: add guest memory dump utility by @canersaka in #19068
  • Qt: move guest memory dump code to own class by @Megamouse in #19070
  • rsx: Clean up the shader interpreters by @kd-11 in #19084
  • Update llvm to 22.1.8 by @Megamouse in #16807
  • rsxfp/interpreter - Implement missing texture functionality by @kd-11 in #19090
  • Fix package install failure warning message by @Megamouse in #19096
  • Fix recording encoder selection by @Megamouse in #19063
  • Fix DLC installation by @Megamouse in #19097
  • SPU/ARM64: Fix PS1 classics and RawSPU Games by @elad335 in #19088
  • vk: remove unused setting by @Megamouse in #19099
  • Replace some abort() calls with fmt::throw_exception by @Megamouse in #19094
  • Remove outdated LLVM ifdefs by @Megamouse in #19092
  • Fix value assignment in iota16 by @isztldav in #19105
  • Fix 1st regression on black textures in Sonic Generations by @digant73 in #19091
  • Add game invite handling to friends overlay #18417 by @primetime43 in #19108
  • UI/UX: Add Categories Broken and Completed to Filter Game List by @Darkhost1999 in #19106
  • add missing vids and pids for wii MPA devices by @sanjay900 in #19111
  • Allow to skip empty strings in fmt::merge by @Megamouse in #19110
  • rsx: Implement proper fix for incomplete image reconstruction in the texture cache when WCB is disabled by @kd-11 in #19104
  • rsx: Fix interpreter error spam due to incorrect format lookup by @kd-11 in #19113
  • ci/bsd: Update FreeBSD to 14.4, use LLVM 22 while keeping clang-devel by @AniLeo in #19116
  • rsx: fix some msvc warnings by @Megamouse in #19115
  • [SPU LLVM] Shorten FI's dependency chain and fix SNaN clamping issue by @WalterKruger in #19107
  • ci/bsd: Compile with clang 22 by @AniLeo in #19119
  • overlay: Add trophy list sorting options by @Vishrut2403 in #18965
  • rpcs3_version: Bump to 0.0.42 by @AniLeo in #19121