0.0.12 Alpha / 31-08-2020

RPCS3

competition

RPCS3 is an experimental open-source Sony PlayStation 3 emulator and debugger. It began development in 2011 using C++ programming language while rendering with OpenGL, Vulkan and DirectX 12.

Accuracy

Performance

Features

Windows: 7+ 64-bit
Linux 64-bit / BSD 64-bit
--
CPU: Intel Quad-core or above with TSX-NI (Haswell+)
          AMD Hexa-core or above (Ryzen+)
GPU: Vulkan compatible AMD or NVIDIA card

RAM: 8GB+

Most Recent Changes

Please note that our version increases are landmarks and not stable builds. Also try to use the latest development builds.


What's new since v0.0.11 (highlights)

» Implemented Online Netplay (sceNp) functionality!
» CPU many CPU emulation accuracy and performance improvements
» GPU many GPU emulation accuracy and performance improvements
» GUI many GUI bug fixes, improvements and additions
» Audio Implemented downmix to 5.1, made most audio settings modifiable mid game
» AVX-512 Added support and some optimized paths for Icelake AVX-512
» Debugger many debugger related improvements
» Input Added pad squircle, stick multipliers and stick emulation preview to Pad Settings
» Input Support for Namco GCon3 gun
» GPU Video memory management overhaul introduced to handle memory overload scenarios, when the GPU is almost out of memory multiple techniques are used to free as much resources as possible
» OpenGL Fixed an issue where around 20% of a shaders cache would be skipped on load when using the OpenGL render
» Overlay Fixed cropped text on overlay elements such as trophy pop-ups


Core

– Always use Emu.Quit() to exit RPCS3 (#8550)
– Make "Prevent display sleep while running game" a dynamic setting (#8550)
– Fix sceNpDrmGetTimelimit invalid parameter error (#8561)
– Log RawSPU MMIO reads and writes (#8572)
– Set applied patch log level to success (#8582)
– Implement constexpr byteswapping and make bit_cast constexpr in simple cases (#8501)
– Ensure aligned 64k allocations in utils::memory_reserve (#8598)
– Make spu_thread::offset private (#8598)
– Set executable hash log level to success (#8610)
– Increase lv2 sleep time on cellSaveData (#8507)
– Replace s32 for error_code return type on several HLE modules (#8594)
– Fix sceNpCommerce2CreateCtx logging message (#8594)
– Use not_an_error in sys_spinlock_trylock (#8594)
– Fix is_constructible test (#8627)
– Fix some clang warnings (#8629)
– Improve error handling during config loading (#8647)
– Move cheats.yml to patches folder and improve parser errors (#8641)
– Don't open an error dialog in headless mode (#8648)
– Gracefully abort headless mode with unsupported video renderers (#8658)
– Minor fix of "unspecific ppu" path of _sys_lwcond_signal, restrict unspecific ppu path to u64(UINT32_MAX) ppu id only, before it was every id that the lower 32-bits of the id were equal to UINT32_MAX such as UINT64_MAX (#8661)
– Make some config logs error instead of fatal, avoids conflict between work in progress builds with new settings (#8677)
– Add config override as cli arg: --config (#8676)
– Replace ppu_module_manager Function Static with Class Static variable (#8669)
– Log localusername (#8699)
– Fix loss of "BLIST" and files' information in Save Data PARAM.SFO (#8706)
– Add support for compiling on MSVC x64 toolchain and change optimisation flag from Ox to O2 (#8732)
– Fix a virtual memory reservation update bug that incremented reservation timestamp unconditionally even when lock bits were set (#8736)


CPU

– Fix barrier commands enqueuing on SPU LLVM (#8544)
– Fix function stack bounds check on PPU Debugger (#8549)
– Show stack address of each function on PPU Debugger (#8549)
– Optimizations for reservation locks and check_state for the non-TSX path (#8358)
– Disable PUTLLC NOP transfers detection for the TSX path (#8358)
– Implement SPU GETLLAR polling detection (#8358)
– Fix SPU MFC WrTagUpdate channel count. Always report available, in real hardware this is just a hint if the previous tag update has not yet been checked by the MFC, avoiding blocking writes and allowing the SPU to execute some code while it processes the previous update request, except for MFC_TAG_UPDATE_IMMEDIATE, where it also waits for MFC to process it (#8543)
– Never clear tag status and optimize non-constant tag update requests in WrTagUpdate (#8543)
– Optimize Local Storage loads and stores on SPU LLVM. By allowing the SPU Local Storage to wrap around on addressing overflows around 256k+- offsets stores/loads are allowed to not mask the immediate value after the calculating the sum of addresses.
This makes it use a native, single x86 memory address calculation instruction (e.g. as a LEA instruction) instead of separating it into different instructions and masking it every time (#8592)
– Avoid unnecessary clamping in some situations on SPU LLVM by trying to verify when the FM instruction will produce a result in normalized range for x86 floating point hardware, and avoiding clamping the result when it's used by another instruction (#8397)
– Use direct waitable atomics notifications on each SPU channel instead of relying on the global thread-specific notification system (#8507)
– Improve expressions matching on PPU and SPU Translators, enabling simple usage of expressions matching on PPU LLVM, while also allowing to detect more match expressions for SPU LLVM (#8620)
– Support enabled Non-Java mode, which originally behaves like FTZ (Flush-To-Zero) and DAZ (Denormals-Are-Zero) both enabled on x86 (#8617)
– Fix "PPU LLVM Accurate Vector NaN values" to actually respect the settings' value on LLVM which previously was unconditionally enabled in most cases (#8617)
– Fix PPU DIVW, DIVWU, MULHW, MULLW and MULHWU instructions when op.rc is set (#8630)
– Optimize PPU VSEL and SPU SELB with constant mask, we can emit Select instead of a series of instructions when the constant mask doesn't need bit granularity (#8559)
– Avoid some redundant endian swapping on SPU LLVM. When games load a piece of data, and then use SHUFB to transform it, we can handle this case by using PSHUFB with no transformation, since the reversed byte order of the mask when interpreted by PSHUFB is actually advantageous in this situation (#8537)
– Simplify some SPU code using byte broadcast (#8638)
– Fix SPU thread cpu_stop missed executions. If the SPU thread was stopped VERY early in its execution it won't even enter spu_thread::cpu_task() which was needed for it to call spu_thread::cpu_stop(). To fix this move it to be a callback of cpu_flag::ret and add this flag to all threads' state when stopping them. Fixes potential deadlocks in sys_spu_thread_group_join etc when cpu_stop() is not called (#8656)
– Implement SPU Thread option 0x2 SYS_SPU_THREAD_OPTION_DEC_SYNC_TB_ENABLE. If specified in sys_spu_thread_initialize, SPU timestamp is always equal to one's complement of the lower 32-bits of PPU timestamp (#8657)
– Fix CPU Translator get_const_vector. Add support for 128-bit integers, construct it using the base llvm::APInt, fix the use of llvm::ConstantExpr, we cannot evaluate it as constant data (#8652)
– Fix VMAXFP, VMINFP NaN handling on PPU LLVM (#8659)
– Fix VMAXFP NaN and signed zeroes handling on PPU Interpreters (#8659)
– Improve CPU Translator fre and frsqe functions to accept unevaluated expressions, evaluate them in-place (#8659)
– Add detection for Icelake-client tier AVX-512 (#8700)
– Fix FMA signed zeroes handling on PPU and SPU LLVM (#8694)
– Fix signed zeroes handling on Accurate XFloat on SPU LLVM (#8694)
– Use AVX-512 VPERM2B to emulate VPERM on PPU LLVM, saves on 2 pshufbs, 1 shift, and 1 blend (#8704)
– Implement RSX accurate reservations on TSX path (#8721)
– Improve 0 addend FMA detection, add missing cases for +-0 for CPUs which do not support hardware FMA (#8709)
– Optimize PPU VNMSUBFP hardware FMA path (#8709)
– Add AVX-512 icelake optimized paths for SPU LLVM SHUFB instruction (#8712)
– Improve SPU LLVM FCGT Approximate XFloat path, fix a few bugs with +- extended SPU floats range (x86 NaNs), whilst improving performance in theory because of removing all vector constants dependencies and allowing out-of-order execution for most steps, add optimization regarding nonzero constants (#8728)
– Fix PPU debugger stepping on non-TSX path (#8749)
– Fix SPU timer events. The event was fired as long as the value was negative and as long as ch_dec_value was 0 (#8754)
– Implement PPU SLWI, SRWI, SLDI mnemonics on debugger, should get rid of most of raw rotate and mask instructions in favour of simple forms (#8750)
– Fix bugs related to SPU events not succeeding to acknowledge events or discarding events, by collecting all events occured right before certain points (#8771)
– Do not check all SPU events when we don't need to (#8771)


RSX

– Fix leaking ZCull queries after barrier by processing all queries before completing the barrier (#8538)
– Implement fast ZCull barrier when the query object is already known (#8538)
– Fix transfer descriptors for partially overlapping slices in head, readable height must be corrected to skip the piece that exists before the current slice (#8545)
– Unifies ZCull command completion code, allows conditionals to be evaluated with a forwarder present (#8555)
– vulkan: Inject memory barrier upon conclusion of a framebuffer feedback loop, do not write to the texture until previous draw call is completed using it (#8563)
– Support partial texture descriptors, it is safe to declare width > pitch and it works as long as sampling inside the legal 2D area is obeyed (#8568)
– Allow depth bounds test to access the Z buffer even when depth test is disabled (#8575)
– Fix draw count append when draw ranges are out of order, it is common for draw counts to truncate at 256 even when it makes no sense to do so (#8583)
– Brute-force removal of superseded surfaces, previous solution was more elegant but easily tripped on false positives (#8590)
– Fix false de-synchronization events caused by a no-op at the end of RSXIO when put == get (#8595)
– vulkan: Ensure incoming texture is large enough that the original one fits inside it to avoid back-and-forth succession (#8618)
– vulkan: Make use of the resource manager to remove the obsolete textures to avoid holding on to the them which "leaks" VRAM, the memory isn't leaking, it's just wasting space in temporary pool until renderer is close (#8618)
– vulkan: Improve video memory manager to attempt recovery in out of memory situations (#8618)
– Fix cache skipping shaders on load and compile on single threaded compilation (#8633)
– Propagate raster type of FBO sourced data throughout the pipeline. Tracks which kind of raster was done (Z-ordered vs linear) throughout the application, allowing to identify if data is in the expected format or not (#8664)
– Decode swizzled GPU data on CPU readback (#8664)
– Reset swizzle flag to false automatically on section reset (#8696)
– Detect render target payload and extract swizzle information from it (#8696)
– Properly match image_type->image_view_type for placeholder dummy textures (#8679)
– Unify composite texture creation and management, handle all the common routines in a unified manner to avoid having one broken path (#8710)
– Simplify support for ABGR formats by mapping these formats to RGBA layout (#8713)
– Fix support for values >= (1 << 31) in rsx::ceil_log2 due to bitshift carry bug, do ceiling manually instead (#8727)
– Basic support for creating depth float formats (#8769)
– Separate uint depth formats from float depth formats (#8769)
– Do not create depth textures as blit engine targets (#8769)
– vulkan: Implement transport for D24S8_FLOAT data (#8769)
– Refactor and improve image memory manipulation routines (#8769)
– Fix format matching when aggregating textures, when copying depth-depth, prefer own format over depth int format (#8769)
– Add some more diagnostic messages for unoptimized image transfer setups (#8769)
– vulkan: Add push_barrier to allow push-pop semantics for texture barrier insert (#8769)
– Properly implement shadow filtering when running emulated shadow compare (#8794)
– vulkan: Improve D16F handling, adds upload and download routines (#8796)
– vulkan: Update SDK from 1.2.135 to 1.2.148, updating ABI compatibility to latest version as of the date of this tag (#8796)


Audio

– Implement downmix to 5.1 (#8322)
– Make most audio settings dynamic by resetting the audio backend when applying config changes (#8322)


Network

– Use emulator's DNS setting for sys_net_infoctl (#8557)
– Implement a huge chunk of sceNp functionality and the RPCN client (#8663)


Input

– Distinguish Left and Right modifiers on Ctrl and Shift keys on Windows (#8480)
– Check if GUI callbacks are nullptr (#8553)
– Fix the assignment arrow keys for the keyboard handler on Pad Settings (#8571)
– Add stick multipliers to Pad Settings (#8553)
– Add pad squircle parameters to Pad Settings and show the value as they are sent to the game as a red dot (#8580)
– Fix stick preview for disconnected pads (#8580)
– Add checkbox for emulated stick values (#8580)
– Fix Guitar Hero Live Guitar assignment, it could potentially be overwritten if multiple USB devices were present (#8682)
– Log evdev axis information in Pad Settings (#8745)
– Support for Namco GCon3 gun (#8757)


Overlay

– overlay_edit_text: Implement Caret upwards and downwards move (#8342)
– Fix unexpected text crop (#8622)


GUI

– Follow Sony naming conventions on App Categories (#8539)
– Fix random QWinTaskbarProgress crashes (#8541)
– Refactor cURL code into a downloader (#8541)
– Implement background functionality on the emulator updater (#8541)
– Fix update check when user is already on the latest version (#8547)
– Save owned games only setting state on Patch Manager (#8551)
– Add scroll area to Pad Settings (#8553)
– Use button box for most buttons (#8553)
– Fix update menu on Unix OSes, appends a regular menu instead of the corner widget (#8569)
– Fix Pad Settings resize when switching tabs (#8571)
– Fix command count on non-method commands in RSX Rebugger, non-methods have no extra arguments their count should be displayed as 0 (#8578)
– Add tooltips to Pad Settings (#8581)
– Fix Skyline theme's QSpinBox and QDoubleSpinBox buttons (#8586)
– Fix YoRHa theme's background for some widgets (#8586)
– Allow compiling with QT 5.15 (#8584)
– Fix the visibility of the "Update Available!" menu option (#8646)
– Improve error messages in firmware install (#8643)
– Cheat Manager: Fix long search lists, disable search buttons if nothing was entered in the search field, use enum values for columns (#8641)
– Fix missing GPU in the game window's title (#8660)
– Move game titles, game and save data notes and active user to persistent settings (#8671)
– Fix input lag in pad settings (#8685)
– Renamed "Install PKG" to "Install Packages/Raps", now accepts multiple PKG and RAP files (#8688)
– The installation of multiple packages now opens the same dialog as the drag and drop action (#8688)
– Installation of RAP files now overwrites the old files and throws an error if this isn't possible (#8688)
– Add Advanced, Emulator and GUI to Configure drop-down (#8702)
– Move Accurate RSX reservation access to Advanced tab (#8702)
– Fix YoRHa theme's TreeWidget item checkbox styles (#8724)
– Set QT_AUTO_SCREEN_SCALE_FACTOR to 0, this value is deprecated but still seems to cause issues on some Unix distros (#8724)
– Add RSX handlers events info to Kernel Explorer (#8748)
– Use Signed Hexadecimal formatting for immediates in Debugger (#8751)
– Fix scrolling of instructions using PageUp, PageDown, KeyUp and KeyDown keys (#8758)
– Fix PPU instructions editor, it was failing to patch instructions because they sit on read-only memory. Use memory bypassing protection for patching. Also fix non-executable memory patching as well (#8758)
– Fix registers editor on editing of all SPU registers, PPU registers from f0 to f31, v0 to v31, r0 to r31 (#8758)
– Add new set of "registers" to PPU registers editor, "ff(index)". They refer to the same floating point registers f0 to f31 but in double precision floating point format instead of hexadecimal (#8758)
– Add new registers available for editing in SPU Debugger: MFC events, MFC events mask, MFC tag mask, SRR0 and most of SPU channels (#8758)
– Add PC/CIA to registers editor (#8758)
– Fix PPU address viewing redirection, remove it as it was flawed from the beginning (#8758)
– Fix empty input in Registers Editor (#8774)
– Add Nekotekina skin (#8776, #8809)
– Add auto-hide of mouse cursor if idle, configurable (#8795)


Miscellaneous

– Manually upload windows Github Release using cURL (#8715, #8738)
– Avoid redundant string copies in psf::array/string/get_string (#8707, #8760, #8780)
– Forces MSVC Toolkit to 14.25.28610 in Azure Pipelines (#8778)