Skip to content

Releases: RPCS3/rpcs3

v0.0.12 Alpha

31 Aug 22:39
a86a3d2
Compare
Choose a tag to compare

Please note that our version increases are landmarks and not stable builds
Always download the latest build from https://rpcs3.net/download
Note: These are NOT stable builds. RPCS3 is a rolling release software without stable builds. These are random tags we do from time to time. Do NOT use the branch from these tags to package RPCS3.

This changelog lists the main changes made since v0.0.11 by chronological order, comprising 62 days of development with 213 commits

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 Simplification and usability 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

Index

» Core
» CPU (Cell)
» GPU (RSX)
» Audio
» Network
» Input
» Native UI (RSX Overlay)
» GUI
» Miscellaneous

Changelog

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 ...

Read more

v0.0.11 Alpha

30 Jun 21:35
Compare
Choose a tag to compare

Please note that our version increases are landmarks and not stable builds
Always download the latest build from https://rpcs3.net/download

Note: These are NOT stable builds. RPCS3 is a rolling release software without stable builds. These are random tags we do from time to time. Do NOT use the branch from these tags to package RPCS3.

Changelog TBA, will be announced when published

v0.0.10 Alpha

30 Apr 18:41
Compare
Choose a tag to compare

Please note that our version increases are landmarks and not stable builds
Always download the latest build from https://rpcs3.net/download

Note: These are NOT stable builds. RPCS3 is a rolling release software without stable builds. These are random tags we do from time to time. Do NOT use the branch from these tags to package RPCS3.

Changelog TBA, will be announced when published

v0.0.9 Alpha

29 Feb 21:17
Compare
Choose a tag to compare

Please note that our version increases are landmarks and not stable builds
Always download the latest build from https://rpcs3.net/download

Note: These are NOT stable builds. RPCS3 is a rolling release software without stable builds. These are random tags we do from time to time. Do NOT use the branch from these tags to package RPCS3.

Changelog TBA, will be announced when published

v0.0.8 Alpha

31 Dec 23:21
Compare
Choose a tag to compare

Please note that our version increases are landmarks and not stable builds
Always download the latest build from https://rpcs3.net/download

Note: These are NOT stable builds. RPCS3 is a rolling release software without stable builds. These are random tags we do from time to time. Do NOT use the branch from these tags to package RPCS3.

Changelog TBA, will be announced when published

v0.0.7 Alpha

30 Aug 02:10
Compare
Choose a tag to compare

Please note that our version increases are landmarks and not stable builds
Always download the latest build from https://rpcs3.net/download

Note: These are NOT stable builds. RPCS3 is a rolling release software without stable builds. These are random tags we do from time to time. Do NOT use the branch from these tags to package RPCS3.

Changelog TBA, will be announced when published

v0.0.6 Alpha

31 Jan 20:16
Compare
Choose a tag to compare

Please note that our version increases are landmarks and not stable builds
Always download the latest build from https://rpcs3.net/download

Note: These are NOT stable builds. RPCS3 is a rolling release software without stable builds. These are random tags we do from time to time. Do NOT use the branch from these tags to package RPCS3.

Changelog TBA, will be announced when published

v0.0.5 Alpha

24 Feb 15:07
Compare
Choose a tag to compare

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.4, mostly (but not always) by chronological order

What's new since v0.0.4 (tl;dr):

» Removed SSSE3 dependencies! RPCS3 now works with any x64 CPU. Obviously, CPUs without SSSE3 are too slow for RPCS3;
» Ryzen 5/7 performance improvements on Windows! Added internal thread scheduler for Ryzen as Windows' scheduler for Ryzen CPUs is faulty (Linux was already working properly!);
» Native user interface! You no longer need to reach your keyboard for GUI actions (excluding on-screen-keyboard actions which are not implemented yet) when playing with a controller;
» Huge Input Improvements! Greatly improved customization of all input options (XInput, MMJoy, DualShock 4, evdev);
» Multiple Input Profiles! You no longer need to change input settings every time you change to a game that requires a different layout;
» Huge Compatibility and Performance Improvements!
» Tons of awaited games finally started working!
» More AVX-512 Support! Added AVX-512 code-paths to ASMJIT Recompiler. Also added more AVX2 code-paths.
» More XOP Support! Added XOP code-paths to ASMJIT Recompiler.
» Game List Compatibility column! Database is now included on download for Windows builds, you can now easily see the status for your games (Linux users can easily download the database!);
» Removed PSP2 (PS Vita) code. A dedicated PS Vita project has emerged, therefore we chose to abandon the idea of PSP2 emulation inside RPCS3 and focus solely on PS3. If you're interested on PSVita emulation, visit Vita3K. Maybe one day when RPCS3 is very matured, PSP2 (PS Vita) emulation comes back, who knows.
» Uniformized version counter! No more confusions! RPCS3 now uses commit count everywhere instead of using TravisCI and AppVeyor individual build counters on file names. Build strings for Windows and AppImage binaries are now the same.
» And TONS of Bugfixes as always!
 

Index

» Core
» PPU
» SPU
» RSX
» Audio
» Native UI (RSX Overlay)
» Trophies
» Firmware (HLE)
» Network
» Input
» GUI
» Windows
» Linux + BSD
» Linux
» BSD
» Misc

 

Changelog

Core

– Optimized CPUID checks;
– Fixed fs::dir with constant begin/end;
– Fixed cond_variable timeout;
– Fixed "Exit RPCS3 when process finishes" command line crash;
– Improved Restart function – should now work correctly with game launchers;
– Added warning when corrupted PARAM.SFO is detected;
– Added installation for additional packages on game boot (INSDIR, PKGDIR, PS3_EXTRA);
– Removed /app_home/ dependency;
– Improved logging messages for multiple RPCS3 instances;
– Refactored logging mechanisms;
– Restored log compression;
– PKG installer update for DLC: Don't ask for overwriting, Limit cancellation capabilities;
– Improved check for cellSurmixer event queue (some games do not set event queue name, though key seems constant for them);
– Implemented setting for maximum threads to be used on LLVM compilation (default: All);
– CPUTranslator: Added bitcast, trunc, zext, sext;
– Added option to manage thread placement. Makes an impact on windows when using Ryzen processors, most other CPUs should be unaffected. Linux does a better job on its own so the option is not recommended on Linux;
– Handles exceptions at game list update, fixed RPCS3 not starting when corrupted PARAM.SFO is present;
– Handles exceptions at loading patch.yml file, fixed RPCS3 not starting when bad patch.yml file is present;
– Initial cpu_translator implementation;
– Returns CELL_ENOSYS on unpresented syscalls;
– Removed PSP2 (PS Vita) code;

PPU

– Use shared jit_compiler instance – fixes deregisterEHFrames error message on Linux;
– Disassembler: Added db8cyc, db10cyc, db12cyc, db16cyc opcodes;
– Remove SSSE3 dependency;
– Fixed primary stack size;
– PPU LLVM: rewrote add/sub instructions: Uses new patterns for saturation instructions, Avoids ZExt/SExt completely;
– PPU LLVM: rewrote AVG instructions;

SPU

– sys_spu_thread_group_create: If priority is between 16 and 255, make sure type is not SYS_SPU_THREAD_GROUP_TYPE_EXCLUSIVE_NON_CONTEXT;
– SPU ASMJIT: Interrupt optimizations - Pigeonhole optimize for branching pattern that is used to enable and disable interrupts used in code, this should lower amount of blocks that are compiled and avoid falling out of a block. Recompiled interrupt check in some cases to stay in block instead of falling out to dispatcher;
– MFC: Fixed support for list transfer stall bit with partial support for out of order execution - also give Sync commands a size so they are properly detected by queue checks;
– Fixed interrupt jump check, also change interrupt variable to atomic bool for ease of setting/checking;
– Interpreter/Recompiler: Implemented DFCMGT;
– SPU ASMJIT: Rewritten ROTH AVX-512 implementation;
– Fixed Size and Tag clamping;
– Allow reading of the RdSRR0 channel;
– Allow writing to the WrSSR0 channel;
– Remove SSSE3 dependency;
– SPU ASMJIT: Added AVX-512 support to ROT, ROTM, ROTMA, SHL, ROTH, ROTHM, ROTMAH, SHLH, CLZ, SHUFB, CFLTU, CUFLT, BG, NOR, ROTI, CG, NAND, CGTH, CLGTH instructions;
– SPU ASMJIT: Reordered some instructions for better throughput;
– Redesigned LVSL and LVSR instructions;
– Interpreter/Recompiler: Fixes for ROTM, ROTMA, SHL, ROTH, ROTHM, ROTMAH, SHLH, ROTQMBYBI, ROTQMBY instructions;
– SPU/MFC: Checks for sync command before doing a list transfer;
– SPU ASMJIT: Added AVX2 support to ROT, ROTM, ROTMA, SHL instructions;
– SPU ASMJIT: Added support for 16-bit shifts using AVX2 (ROTHM, ROTMAH, SHLH);
– SPU ASMJIT: Added support for XOP instruction set on ROT, ROTM, ROTMA, SHL, ROTH, ROTHM, ROTMAH, SHLH, ROTI, SELB, SHUFB instructions;
– Emit VZEROUPPER: Workaround dirty AVX high state;
– SPU ASMJIT: Rewrote ORX instruction;
– SPU ASMJIT: Minor change to ROTH instruction: Only AVX-512 path is changed (third version). This instruction is extremely rare;
– SPU ASMJIT: rewrote 128-bit shifts by bit: Six instructions changed to use xmm registers instead of gpr. ROTQBII, ROTQMBII, SHLQBII look better (shifts by imm). ROTQBI, ROTQMBI, SHLQBI changed for consistency (shifts by variable);
– Removed redundant and harming check from tag update completion type 2 condition;
– Implemented Stop Code 0x100;
– sys_spu_thread_get_exit_status: Implemented missing check, now checks CELL_ESTAT condition as well;
– Disassembler: Clamps SPU address - allows the SPU disassembler to nicely wrap around addresses instead of reporting "illegal address" on addresses outside of LS and resolves potential memory conflicts with main storage memory in the debugger;

RSX

– Optimized frame limiter;
– Improved nv406e::semaphore_release;
– Added WIP research into getting WCB (Write Color Buffers) working correctly. Should now mostly work correctly on OpenGL and correctly on Vulkan where on swizzle contexts are involved;
– Enables blitting from main memory to local (RSX) memory using hardware acceleration. A few more titles no longer need the slow WCB path for this;
– Fixed a bug where NVIDIA drivers would leak memory leak when window was minimized;
– Fixed FP (Fragment Program) to take into account data range modifiers in SRC1. Fixes negative color values getting to the tone-mapping passes in some games (e.g. Dark Souls 2);
– Do not discard depth buffer is stencil test is enabled (e.g. Vesperia);
– Enabled ZCull conditional render on Vulkan;
– Fixed D3D12 compiler crashes introduced by previous changes;
– Fixed shader cache constantly compiling new shaders in some games;
– Fixed default vertex attributes for undefined reads (e.g. Eternal Sonata, Ni no Kuni);
– Fixed OpenGL texture flickering due to broken optimization path when WCB was enabled;
– Synchronizes access to the present/graphics queue during submit. It's simpler to just use a global lock in this case since at the moment we only use one queue and contention only happens during submit. Should fix some cases of device_lost when running NVIDIA + WCB;
– Implemented depth clamp;
– Fixes for stencil surface configuration when address is contested;
– Work on depth/color address resolve when address contention happens;
– Implemented ZCull on the Vulkan render;
– Shader overlay implementation allowing all kinds of transforms and passes;
– Implemented binding color data for depth access for example using a RGBA->depth casting pass;
– Fixed face winding on OpenGL;
– Fragment program decompiler fixes for pack/unpack with optional register gathering implemented;
– Fixed potential crash in image_in when using CPU blit, or when unable to GPU scale the texture;
– Avoids unprotecting memory unless writing is almost guaranteed to be near immediate. Should lower chances of race conditions on sections leading to corruption, but this is not a final fix. Should greatly reduce chances of encountering;
– Fix for framebuffer setup: Ignore stencil flag if current depth format does not support stencil operation;
– Fixed depth clipping: Should now correctly scale/offset z for viewport, which may help in random clipping issues. tested game doesn't work on master without hacks (e.g. Vancouver 2010) but this fixes graphics display in it;
– Fixed image_in arg decoding / swizzle: Fixes x/y decoding, fixes some psl1ght blitting samples. After seeing countless...

Read more

v0.0.4 Alpha

12 Nov 18:14
Compare
Choose a tag to compare

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...

Read more

v0.0.3 Alpha

20 Jul 19:40
Compare
Choose a tag to compare

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...

Read more