Releases: RPCS3/rpcs3
v0.0.4 Alpha
Please note that our version increases are landmarks and not stable builds
Always download the latest build from https://rpcs3.net/download
This changelog lists the main changes made since v0.0.3, mostly (but not always) by chronological order
What's new since v0.0.3 (tl;dr):
» Resolution Scaling (up to 10K)!
» Anisotropic Filtering (up to 16x)!
» Linux AppImages!
» Trophies!
» Save Data Manager!
» Basic Networking Support (YouTube now works)!
» Evdev Controller Support!
» Improved Linux and BSD Support!
» Low-Level Emulation of cellGcm: Even more games now working!
» Huge Compatibility and Performance Improvements!
» Huge GUI Improvements!
» And TONS of Bugfixes as always!
Changelog
Core
– Fixes idm::init, fxm::init
– Re-enable thread_local for all platforms
– Fixes ipc_manager::add
– Fixes access violation handler
– Fixes decrypt_self usage
– Patch: new 'load' syntax: [load, path_name1]
- load sequence, [load, path_name2, -0x40]
- same, but modify the addresses by -64
– mutex.cpp: New concept update (incomplete)
– Escapes problematic characters in VFS
– Added support for passing commandline arguments to ELF executable
Memory
– Allow overlapping ranges in cellGcmMapEaIoAdress with coherency check
– Fix deadlock in vm::unmap
– sys_mmapper: minor range fix
– Improved lv2_memory object
– Fixed utils::memory_decommit
– vm.cpp cleanup
PPU
– Sets PPU Recompiler (LLVM) as default option instead of PPU Interpreter (Fast)
– Implemented PPU Page Faults
– Fixed a crash on Recompiler due to null jit
– Implemented CALL_FUNC
– Fixes for instruction editor
– Optimizes PPU module loading
– ppu_acontext draft (Work in Progress)
SPU
– Re-implements timing in the SPU concurrency watchdog code. It is now possible to set a hint number of threads with little performance loss, e.g it is now possible to set 'preferred threads' to something like 2 and set a penalty of 0 to significantly improve smoothness if running a low end CPU. Note that games which run better with low 'preferred threads' values still need a delay penalty greater than 0 (leave it at 3)
– Copies sys_spu_segment info in SPU Thread Group
– Implemented syscalls _sys_spu_image_import, sys_spu_elf_get_information, sys_spu_elf_get_segments, _sys_spu_image_get_information, _sys_spu_image_get_segments, sys_event_port_connect_ipc
– sys_spu_image: Cleanup and extends templates
– Fixed sys_raw_spu_load, sys_raw_spu_image_load
– RawSPU: Implemented Prxy_TagStatus_offs (rollback to immediate MFC transfers)
– RawSPU: Implemented read SPU_NPC_offs
– RawSPU: Implemented read SPU_RunCntl_offs
– Adds vm::page_protect to SPU segments
– Implemented FM instruction for Interpreter Fast and Recompiler ASMJIT
– Fixes a bug in FMA/FMS/FNMS where cmpunord was used as an optimization but inadvertently broke some corner cases
– Implemented readch(mfc_cmd)
– Save and restore mfc cmd: SPU accuracy change, docs state registers are in an 'undefined state' after writing to mfc_cmd, but in practice though, they are just left alone
HLE
– Fixed sys_get_random_number, sys_rwlock_runlock, sys_rwlock_wlock, sys_rwlock_wunlock, sys_semaphore_wait (on timeout), sys_event_queue_receive, cellOskDialogLoadAsync, _sys_strncasecmp, cellGameGetParam, cellGameSetParam
– Fixed syscalls _sys_lwcond_signal, _sys_lwcond_signal_all, sys_event_port_connect_ipc
– Rewritten sys_mempool to be thread safe
– Registered new functions on cellCrossController, cellOskDialog, cellSailRec, cellSysutil, sceNp, sceNp2, sceNpSns, sceNpTus, cellRec, cellGameExec, cellGameResc, cellSysutilAvc2, cellSysutilAvconfExt, cellSearchUtility, cellUsbd, sys_net, cellHttp, cellNetCtl, cellAtracMulti, cellAtrac, cell_FreeType2
– Fixed sys_timer initial set state to correctly be STOP instead of RUN
– cellGame: Minor refactoring
– cellRec: Minor fixes
– Registered _sys_rwlock_trywlock
– Re-implemented the 'Hook static functions' option
– Refactored sys_lwmutex, sys_lwcond
– Implemented cellSslCertificateLoader, cellHttpUtilParseUri, _sys_tolower, _sys_toupper, __sys_look_ctype_table
– Fixed backspace in onScreenKeyboard
– Rewritten cellVideoOutConfigure, _sys_memcmp, _sys_strlen, _sys_strcmp, _sys_strncmp, _sys_strcat, _sys_strcrp, _sys_strrch, _sys_strncpy, _sys_strncat
– Implemented fs::file::get_handle
– Implemented fs::error::notempty
– cellGame: Add missing game categories AT, AM and SG
– Fixed fs::rename
– Fixed crash in sys_tty_write() if the return buffer for the written length is NULL (Resident Evil 5 demo does this)
– Improve sys_fs_ftruncate: Handles stream API lock (EBUSY) and handles append mode
– sys_fs: use g_tls_error for diagnostic. Affected syscalls: sys_fs_open, sys_fs_opendir, sys_fs_stat, sys_fs_mkdir, sys_fs_fcntl (get free space)
– Implemented checks for FNID duplication
– Implemented MFF_HIDDEN for VNIDs (Now possible: ```REF_FUNC(...).flag(MFF_HIDDEN);`)
– Implemented syscalls _sys_prx_get_module_info, _sys_process_exit, _sys_prx_load_module_on_memcontainer, sys_ss_random_number_generator
– Fixed _sys_strncasecmp
– Exitspawn support renewal: Implemented _sys_process_exit2 syscall, Rewritten sys_game_process_exitspawn, Rewritten sys_game_process_exitspawn2, Implemented _sys_process_atexitspawn, Implemented _sys_process_at_Exitspawn and some other changes
– sys_fs_mkdir: implement ENOENT
– Fixed several filesystem errors where behavior differed a lot from a real PS3
– cellKb: Returns invalid parameter if port number is bigger than number of connected keyboards
– cellVdec: Added stolen TLS hack
– Fixed a callback regression on sceNpManager
– Fixed /dev_bdvd/ for exitspawn
– Fixed NPDRM exitspawn
– Changes CryptAcquireContextW to try CRYPT_NEWKEYSET flag if key container doesnt exist already
– Make cellMouseGetDataList return CELL_MOUSE_ERROR_NO_DEVICE if mouse handler is set to null
LLE
– Implemented LLE emulation of cellGcm
– Added libad_async, libad_billboard_util, libad_core to the list of modules to LLE. Makes several games start working with PPU Recompiler
RSX
– Fixed vertex decompiler to support two argument destinations
– Fixed a buffer overrun crash
– Re-implemented the weak vertex cache using unordered_map for faster search performance
– Re-implemented the texture cache also using unordered_map for faster search as well
– Properly synchronizes the texture cache to avoid random rsx lockup
– Implemented zcull occlusion stats using native occlusion queries
– Implemented conditional rendering as well using the emulated zcull unit
– Added conditional shared locks that take a flag for consideration to avoid recursive lock acquisition
– Yield instead of sleeping rsx thread
– Fixed a situation where a query read-back is requested while zcull render is still active
– Re-implemented the RSX driver side of the vertex processing stage. Vertex attribute data is no longer processed on the CPU freeing up resources otherwise used up dealing with this task. This moves a lot of work over GPU side and slow iGPUs might become a bottleneck. Due to the increased complexity of the shaders, a preloaded shader cache system is also included to allow the shader compilation and linking to happen outside of gameplay. This fixes the hitching and stuttering ingame at the cost of longer loading times. The cache can be deleted from the context menu
– Fixed immediate indexed rendering when immediate index array is provided but vertex data is sourced from registers and array inputs (Wolfenstein)
– Don't keep invalidated objects around too long. Games like Tales of Vesperia seem to be using a random memory allocator with very low collision chance. This means objects are very unlikely to be reused in such games leading to pile-up
– Ignore sending system reserved semaphores to renderer
– Fixed sca register assignment in vertex decompiler. Fixes some vertex shaders: Text in little big planet and chunks of graphics in alteir games
– Implemented pixel size 16
– Minor improvements to shader cache to reduce first time compile stutter and number of pipeline objects
– Fixed VP ARL opcode: respect the vector write mask
– Implement QUAD_STRIP by redirecting to TRIANGLE_STRIP. This can fail in some rare cases, but that's not something that can be fixed with indexing anyway. Quads are planar, but adjacent triangles need not be
– Added nullptr check on sys_rsx_context_attribute for games that call it before sys_rsx_memory_allocate. This inevitably caused RPCS3 to crash when it doesn't on a PS3
– RSX thread recovery in the event of an unknown command [WIP, still dies/loops infinitely if unmapped addresses are provided]
– Unified texture cache for Vulkan and OpenGL. This means that any bugs fixed for one backend should carry over making development easier
– Implemented draw call batching for the slow games that would throw thousands of small draws at the hardware. Significantly speeds some some games. There is an AMD driver bug that will cause missing graphics but it has been reported upstream
– Added support for split draw ranges which would otherwise assert in RSXThread
– Fixed some shader decompiler bugs (DBZ Raging Blast games)
– Fixed section scanning range for early reject (fixes hands)
– Texture cache fixes: Updates section flags when requested, fixes nullptr dereference: cached_dest will be null if dst_is_render_target is true (fixes a crash in some games when using GPU texture scaling)
– Makes the 3rd texture dimension matter: Mark cube map and 3D textures as separate from 2D surfaces in the cache. Also adds an error if a type mismatch is detected
– Added support for internal resolution scaling. Compatible with most applications out-of-the-box. Note that strict rendering mode disables this scaling
– Enabled forced anisotropic filtering up to 16x
– Improves memory protection behavior when strict mode is off. Use full r...
v0.0.3 Alpha
Download the latest build from https://rpcs3.net/download
Version changes serve as landmarks and are by no means stable builds
This changelog lists the main (but not all) changes made since 0.0.2
PPU
– Fixed instructions FCTIW, FCTID, FCTIWZ, FCTIDZ, MULLW, DIVD, DIVDU, DIVW, DIVWU, MULHW;
– Removed HACK instruction;
– Updated VREFP, VRSQRTEFP instructions;
– Optimized MTOCRF instruction;
– Analyser: TOC detection logic improved;
– Analyser: Several bugfixes;
– Opcodes: Added RLDICR, STFD, STVX, LFD, LVX, CLRRDI;
– Debug Mode Implemented;
– Interpreter Precise: SAT bit implemented;
– Recompiler updated from LLVM 3.8 to LLVM 4.0;
– Recompiler: Implemented STSWI, LSWI;
– Recompiler: compiles only one block at time, uses tail calls to move between blocks and fully writes PPU context, except CIA;
– Recompiler: Implemented multi-threaded compilation;
– Recompiler: Optimized MFCR;
– Recompiler: Improved FlushRegisters;
– Recompiler: Disabled some LLVM passes;
– Recompiler: SSA reordering (Fetches indirect jump target, flushes registers earlier);
– Recompiler: Relocation support;
– Patch engine for PPU executables implemented.
SPU
– Speedboost: Lower SPU priority and Bind SPU threads to secondary cores added (prevents PPU threads from being starved, Windows-only for now);
– Interpreter: Fix isdenormal, Fix MFC_WrTagUpdate;
– Disable SPUJIT.log by default;
– Patch engine for SPU images implemented;
– SPU Recompiler: Updated ASMJIT submodule, adding 1 year worth of fixes from upstream;
– Checks exponent bits in FMA ops: Modifies the result of SPU FMA if exponents in a or b are at max and discards the value. This is by no means even close to accurate handling of corner cases in the SPU, but rather a fast workaround;
Discards the result of (a * b) if either a or b has extended exp bits (usually inf) without degrading performance too much.;
– Properly implement FCGT and FCMGT SPU opcodes;
– Minor tweaks to SPU wait loops and DMA transfers to improve stalling behavior;
– ASMJIT Recompiler: Avoid aggressively locking the asmjit db and make compilation step multi-threaded. It takes a much shorter time to compile a function than it does to wait on a lock especially with non-spurs-type kernels;
– ASMJIT Recompiler: Cache compiled functions and avoid calling database analyze function when not needed;
– Add loop condition detection by triggering an OS scheduler update on RdDec - this function can only be sensibly used as part of a loop. [Disabled by default for now];
– Add concurrent execution analysis. This only affects spurs-type kernels where multiple threads are executing the exact same code at the exact same time. Introduces a small delay to racing threads so that they are effectively desynchronized whenever they enter a sensitive function. [Disabled by default].
Core
– Fixes to SPRX Relocation;
– Removed throw cpu_flag;
– Auto load LLE improvements: added libdtslbrdec, libssl, libhttp, libfs, various encoders;
– Implemented sys_ppu_thread_register_atexit, strncasecmp, strrchr;
– Configuration code simplified;
– LV2 Load: Don't LLE savedata modules, preventsbroken saves;
– Enhancements to VirtualMemory;
– Implemented FREFS/Weak Imports;
– Implemented REF 4, REF 6 and REF 57;
– Fixed hex_to_bytes;
– Added ror8/16/32;
– Added moving disc games to outside of /dev_hdd0/game on boot if they're there;
– Fixes to dev_bdvd mounting;
– cellSaveData: Only return data for dir and bind where requested;
– Reduce watchdog memory footprint by using the segment address as a base + 256K;
– Check AVX for Intel processors;
– Use RTM instructions when available.
HLE
– HLE linkage rewritten;
– Fixes for module initialization;
– Improvements to cellSave, sceNpTrophy and cellVdec modules;
– Big improvements to sys_fs;
– Rewritten sys_spu_image loading and sys_ppu_thread_once;
– Implemented _sys_sprintf, cellHddGameGetSizeKB, cellGameDataGetSizeKB, cellGameGetSizeKB, cellPadGetDataExtra, cellPadPeriphGetData, cellHttpUtilParseUri, sys_fs_disk_free;
– Fixed cellGameContentErrorDialog, cellPadGetData, sceNpTrophyGetRequiredDiskSpace, sceNpBasicGetEvent;
– Fixed max_connect on cellKbInit and cellMouseInit;
– cellVideoOut: Add 59.94 Hz support required by some games;
– Registered many unknown new modules/functions such as sys_lv2coredump, sys_crashdump, cellDaisy.
RSX
– Workaround for src type 3 as we gather more information;
– Workaround for invalid/unknown methods;
– Fix TXP when performed on a cubemap texture;
– Do not always assume a tex variable exists when doing alphakill checks (Variable may have been optimized away).
– Adds in support for immediate mode rendering between begin/end command pairs;
– Fixes missing draw calls in most homebew games;
– Clamp mipmap count to always > 0;
– Throw if user attempts to use Vulkan/DX12 without driver support;
– Re-implements vertex shader output control; adding in options for more complex conditions;
– Added a workaround for intel drivers which don't report their capabilities via extensions for some reason;
– Include strict vertex shader output declaration for compatibility with mesa drivers which are very strict;
– Rewrites vertex upload, removing the slower methods used before. The old code is improved as well and kept around for debugging until its state is known to be mature enough (performance is up anywhere from 10-300% for geometry heavy scenes);
– Lifts some restrictions on vertex register formats and adds a fix for register type data uploads when using a vertex buffer stream;
– Fix BRK/RET fp instruction;
– Image clipping fixes. Fixes software mode clipping in nv3089::image_in. Fixes cropped graphics in some games.
– Fix stencil clear values;
– Fix some buffer misalignment crashes when using debuggers or faulty drivers;
– Fix OpenGL clip space conversion (Z symmetry);
– Add a workaround to fix shadow map generation;
– Add hardware PCF shadow support;
– Fix stencil buffer reset;
– Remove several hundred compilation warnings from RSX code;
– Improve SPIRV compilation speed by avoiding unnecessary SH context (re)creation;
– Register NV4097_SET_COLOR_KEY_COLOR method;
– Fix index buffer generation when using a non-zero base offset;
– Added a toggle to ensure strict rendering mode. Currently only affects framebuffer feedback loops. When disabled, we ignore the feedback loop in Vulkan and issue a texture barrier in ogl. When enabled, a duplicate texture is created to ensure this is not an issue but there is a tangible performance penalty (Defaults to OFF).;
– Fix a regression when emulating index buffers for generated primitives. Removes the 'first' parameter since rpcs3 does not support disjoint vertex ranges at the moment anyway;
– Added a 'speed hack' - not really a hack - for games that share memory regions between textures and other GPU resources such as shaders. Significantly boosts performance in games where the cache is invalidated often. Can be disabled by setting 'Strict Rendering Mode' to true;
– Small to moderate speedup on games with many draw calls due to some minor tweaks to c++ object management;
– Implement frame skipping (config file option only for now);
– WIP: Batch together draw calls using the same geometry with different translation matrices;
– Allow multi-threaded vertex processing;
– Fixed some fragment shader instructions;
– Implement RSX framebuffer memory persistence;
– Avoid aggressive resource create/delete cycles when using Vulkan. Moderate speedup in some games and fixes flickering in some cases;
– Fix an RSX crash when a null address is provided for the fragment shader location;
– Improved multithreaded vertex processing so that the penalty is much lower if there are no resources available. Its also tunable now allowing the threshold to be set.
OpenGL
– Actually bind a stencil attachment on FBO creation;
– Implement glArrayElement indexing scheme;
– Force align DXT compressed textures to block_edge size;
– Fix legacy clamp mode: The meaning of texture border has changed starting with GL 3+ due to the resulting confusion from broken and incomplete implementations on hardware of the GL 1.x era. As such, legacy clamp is closer to the modern edge clamp than border clamp as it once was. Border pixels in textures are not supported on newer hardware and never truly worked in the past either, especially on NV cards. Should hopefully fix any games showing visible grid lines in OpenGL;
– Implements texture blitting and scaling using the GPU to avoid texture readback whenever possible;
– Use sampler objects instead of binding sampler state to texture handles;
– Adds some simple driver capabilities checks to determine if the driver can run the emulator or if we need to disable some features. Also adds in other fallback paths;
– Fix for the mix-and-match nature of ps3 shaders causing issues with mesa's linker;
– Minor typo fix affecting intel GPUs with OGL;
– Fix a rare OpenGL crash when trying to capture traces with renderdoc;
– A minor behavior fix for OpenGL when strict mode is not enabled. Makes behaviour alot more reliable to debug now;
– Added Stretch to Display area as an optional setting.
Vulkan
– Silence useless error on vk::program destructor;
– Fix stencil clear value on Vulkan;
– Fixes gsl::span errors with Vulkan as well as not throwing an exception if an attribute/texture is enabled, but not active in the shader;
– Added a fix for LINE_LOOP rendering using Vulkan;
– Re-enable layout transitions in Vulkan: Image layout transitions were disabled at some point during code refactoring. The impact on Nvidia drivers is not too bad, but horrible moire artefacts appear on AMD, especially newer cards;
– Lay foundation for GPU scaling implementation;
– Implements synchronized framebuffer r/w for Vulkan. Still missing some important pieces such as hw accelerated image_in, but that w...
v0.0.2 Alpha
Latest builds available here.
Always use the latest build available.
PPU/SPU
– PPU LLVM AOT recompiler reimplemented
– PPU LLVM caching implemented
– PPU thread scheduler implemented
– PPU breakpoints reimplemented
– PPU analyzer improved
– Various LV2 system improvements
– IdManager improvements
– Debugger fixed and enhanced
– PPU/SPU accuracy improvements
Memory
– Memory system cleanup
– sys_memory_get_page_attribute improvements
– sys_mmapper improvements
Graphics
– A LOT of bugfixes and accuracy improvements for all Graphic backends. (There were really a lot of improvements here and we can’t list them all!)
– Shader decompiler improvements
– Several RSX bugfixes and accuracy improvements
HLE
– Major sys_net improvements
– cellOsk implemented
– cellVDec fixes and improvements
– Several other small improvements
Input
– MMJoystick implemented
Linux
– Several Linux specific bugfixes were made. Some are still being worked on as there are still a few Linux specific bugs.
Vita
– Initial package unpacking implemented
– Small Interpreter improvements
Logging
– Logging system cleanup
– TLS bugfixes and improvements
Misc
– Automatic LLE loading
– MSELF, SDAT, EDAT, SPRX: Decryption on the fly!
– Firmware update file (PS3UPDAT.PUP) installer
– XAudio fixes
Many other unlisted bugfixes and improvements
v0.0.0.9
Latest builds available here.
General changelog:
- PPU/SPU
- PPU LLVM recompiler removed (not final)
- Old PPU interpreter removed completely
- RSX
- Added Vulkan renderer
- Common utilities for all backends
- Big accuracy improvements and bugfixes
- HLE
- Various HLE modules rewritten/removed temporarily
- More HLE functions implemented
- Accuracy improvements
- Vita
- ARMv7 core improvements
- Loader
- ELF loaders rewrittten and unified (PS3 and PSV)
- PRX loader improved
- Misc
- Big cleanups and rewrites
- Logging system rewritten
- Configuration system rewritten
- Various submodules updated
NOTE: libresc.sprx and librtc.sprx will need to be LLE'd until they're properly re-implemented
v0.0.0.6
DX12 support (and in future Vulkan) has been added and there's now a recompiler. There's been lots of improvements to HLE and some improvements to the GUI (including game icons!). Definitely no reccomended version is ready yet, but a year or two and we might be getting there :)
Regular pre-release builds built by @Bigpet can be found here:
https://github.com/Bigpet/rpcs3/releases