v0.0.5 Alpha

@AniLeo AniLeo released this Feb 24, 2018 · 727 commits to master since this release

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!


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




– 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;


– 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;


– 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: 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;


– 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 weird values games seem to give for swizzle size, it seems the RSX just ignores the values, fixes cpu blit in age of booty;
– Fixed invalid framebuffer crash and shader compile on D3D12;
– Updated Vulkan dependencies: solves an issue where broken Windows drivers wouldn't register the ICD key and break the only detection method present on older Vulkan versions;
– Added detection for Vulkan Xlib/Wayland surface support at runtime (Linux/BSD);
– Several (many!) texture caches fixes;
– Remove SSSE3 dependency;
– Track last working state and reset to it if RSX starts to desync. This is especially useful when running Vulkan since the renderer will easily outpace the rest of the system when merely recording draw commands;
– Ignore empty index buffer sets. Mark empty/invalid IB sets as having 0 element counts;
– Implement deferred swizzle remaps for twice-remapped resources;
– Fix blit engine operations on RGB565;
– Add a timeout on nv406e::semaphore_acquire. Requires further investigation to why some semaphore addresses always lock up;
– Fix WCB causing hanging due to incorrect memory range approximation
– Properly synchronize FIFO ctrl updates. Can improve stability in some cases. The issue still happens if the SPUs lag too far behind RSX;
– Implement variable point size;
– Implement FP instructions BEM, TEXBEM, TXPBEM (untested, rarely used);
– Fix for LG2 FP instruction processing invalid values;
– Framebuffer setup fixes to avoid lost draw calls;
– Code style fixes;
– Fixed alphakill;
– Fixed color swizzle ordering for new blit destination surfaces;
– Tweak to RSX hang detection;
– Tweaks to sampler fallback paths for Vulkan;
– Fixed regression with texture format G8B8;
– Fixed typo in emulated primitive restart, fixing graphics with some AMD cards;
– Fixed emulator hang that could happen when RSX thread crashes/throws/exits, making sure the event queue is cleared and disabled and the VBlank thread is shut down;
– Added setting to disable shader preloading, useful for debugging/testing purposes;
– Added setting to force FIFO present mode option (workaround for recent MESA drivers);
– Added setting to force Force primitive restart flag (should also work on MESA drivers);
– Vulkan: Flush command queue on access violation event before attempting to touch texture cache in the event of access violations. This makes the device internal state consistent before texture operations. Fixes VK_ERROR_DEVICE_LOST in some cases when WCB is in use;
– Fixed Z clipping using selective Z clamping;
– Texture cache (blit engine) fix – Remove a conditional guess that has been properly reverse-engineered (it has been proven that in offsets are in x16 fixed point);
– OpenGL: Use correct target for type when creating new textures. They are not always 2D;
– OpenGL: Track stale cache entries for deleted textures. Avoids invalid texture getting bound to the pipeline when WCB is enabled;
– Vulkan: Implement texture barrier for framebuffer feedback situations if strict mode is disabled. Strict mode bypasses all of this and just makes a duplicate copy which is the safest way to avoid the memory access hazard;
– RSX: Improve framebuffer setup code. If pitch is 64, check the log2 dimension bits instead to determine size;;
– Fixed B8 format render target swizzling;
– Partial fix for extended clamp range draws; Try to preserve z information for draws outside the [0,1] range if the clip extents allow it. Range compression for [0,1] draws is disabled as it interferes with regular draw ops in a negative way, so this workaround will result in Z fighting on the near and far plane when extended range is used;
– Implemented decoding a shuffle flag in the low bits of the texture remap vector. Seems to affect only some formats;
– Texture format fixes: now rpcs3 almost passes all the texture formats test from autotests;
– Removes a workaround in texture cache as it seems to not be required with texture formats fixed. There are almost no test cases for this but I expect no regressions;
– OpenGL performance optimizations: Treats entire attribute buffer as a fixed heap addressed with index offsets instead of the "sliding window" approach that incurred overhead setting up the texture buffers. This was very expensive on NVIDIA drivers leading to very poor OpenGL performance on NVIDIA cards;
– Minor fixes for overlays: Do not assume swap queue is in a well defined state since a flip can be requested externally. Also avoids processing unsupported glyphs in font handlers;
– Implements swap control on Linux when using OpenGL;
– Fixed the epsilon value that was replaced with decimal to fix NVIDIA issues back to the old value. It has to be very very small, 1.E-5 is not small enough, but 1.E-10 works well enough;
– Fixed a race condition during startup using qt dialogs;
– Clean up shaders by removing as much clutter as possible and only compiling subroutines actually used by the program. Makes decompiled SPIR-V easier to read and should hopefully mean less work for the drivers as well.
– Reuse sampler objects (Vulkan) to avoid too many create/delete cycles. Wont do much for performance but its the right thing to do and it makes debugging alot easier;
– Removes subpass dependencies on Vulkan. They have a very high cost on AMD GPUs especially older GCN1 and maybe GCN2 cards and can easily drop throughput by 80%+ (Tested on R9 270x);
– Framebuffer setup improvements: Improves fast paths in framebuffer setup code and allows resource reuse when using OpenGL instead of constantly recreating new resources and binding;
– OpenGL: Do not rely on OpenGL null texture; instead, provide our own black null texture to make reads from non-existent textures return (0, 0, 0, 1);
– Implemented FBO flush-always when WCB is enabled. This is for games that read back the currently bound render target. Fixes some missing graphics in some games especially when using the blit debugger (force_cpu_blit);
– Vulkan API compliance fixes;
– Synchronize blit engine resources with cell to avoid data loss. A typical scenario would be where an image is rendered on RSX pixel pipeline to render target A which is copied to location B using blit engine. Cell then reads back the pixels at B to do some image processing on SPU and re-uploads the data from another location C. Without synchronizing reads and writes, data at B would not exist from Cell's point of view. Fixes some problems in some games like Journey.
– Vulkan: Minor memory management fixes. Avoids running out of memory during a draw call;
– FP: Explicitly gather or discard writes to output if none is defined. While the GL spec makes this work correctly, undefined output in SPIR-V updated the render target with blue pixels;
– texture cache: Fixed component ordering on depth surfaces – all components should always read R (e.g. solves TOCS/TOCS2 blur issue);
– Fixed a bug in multidraw implementation and range splitting of disjoint draw calls (e.g. solves flickering in R&C games);
– Improved workaround for AMD Vulkan driver where u16 index buffers would mistakenly break primitive restart due to fetching of the restart index T(-1), likely due to broken type identification;
– General minor optimizations all round;
– Optimize texture readback performance by tracking flushable targets and performing transfers ahead of time;
– Implemented base swapchain type to remove dependency on WSI providers being present. This is the case when attempting to run Vulkan from a secondary GPU whilst the primary GPU is an NVIDIA one on Linux. Two additional display providers other than the WSI one are also provided, one for WIN32 and another for X11 to cover the common cases. This allows use of a secondary GPU on Linux which was a big problem for graphics development on Linux. Note that while mesa drivers can present data from secondary GPUs, proprietary drivers do not, and often times the user will have the NVIDIA GPU as primary to avoid problems with X. Overhead of using the native software fallbacks is currently about 4ms at 720p, 7ms at 1080p (~250FPS max at 720p, ~125FPS max at 1080p). While this change in itself may not mean much to most users, the possibilities with display out are now infinite. Additional swapchain providers can be added to do cool things like writing images to file, injecting custom postfx, encoding image output to video and streaming over a network, etc, etc;


– Fixes for ALSA backend, improved performance;
– ALSA: Added Start Threshold parameter;

Native UI (RSX Overlay)

– Implemented core for native user interface support in rpcs3;
– Implemented save dialog with native UI;
– Implemented message dialog and progress dialog;
– Implemented trophy popup;
– Implemented shader compiling notification;
– Properly handle failed initialization and fallback paths;
– Properly handle TTF search and loading as well as fallback paths;
– Fixed native UI save_dialog when there are no saves;
– Properly handle disconnected pads on overlay;
– Added fallback path in dev_flash for glyphs and prevents Vulkan from freezing if icons are non-existent;


– Fixed a bug on trophy manager which would hide some games;
– Returns correct disk space requirements;
– Check both bdvd and hdd locations;
– Fixed trophy initialization for Game Data (game patch);
– sceNpTrophyGetRequiredDiskSpace: Take VFS into account for trophy directory;

Firmware (HLE)

– Implements _sys_prx_load_module_by_fd, _sys_prx_load_module_on_memcontainer_by_fd;
– cellSaveData: Bugfixes;
– cellSaveData: Implemented Savedata delete operation;
– Fixed an issue with cellMsgDialog;
– Fixed an issue with exitspawn (autoexit option);
– Fixed sys_fs_open on MSELF files: previously it would move the file pointer, but not reset it;
– sys_usbd: Initial work on syscalls;
– sys_memory: Lower maximum size for memory block to fake OS size – Reports available memory minus another fake block that can be used for the OS;
– cellMsgDialog: Added SetMsg() for changing main text;
– cellGame: Don't write empty TITLE_IDs in PARAM.SFO;
– cellVDec/cellVPost: Avoids recreating SwsContext every frame;
– cellSaveData: Avoids passing vm memory to fs::file;
– cellPadSetPortSetting: Don't skip setting port settings when no controller is connected;
– cellPad: Fixed port status query -> disconnected devices don't cripple following devices by decreased now_connect;
– cellPad: Initialize devices as disconnected;
– cellGameDataCheckCreate2: Fixed PARAM.SFO;
– Implemented psf::assign;
– cellGameSetParamString: Potential fix;
– cellGameBootCheck: Experimental fix, assuming dirName is read-only;
– cellSysutil: Registered _ZN8cxmlutil7SetFileERKN4cxml7ElementEPKcRKNS0_4FileE, _ZN4cxml8Document5WriteEPFiPKvjPvES3_ and _ZN4cxml8Document12RegisterFileEPKvjPNS_4FileE functions;
– cellWebBrowser/sceNpSns: Stubbed some functions;
– cellGame: Stubbed cellHddGameSetSystemVer, cellGameDataSetSystemVer;
– cellSearch: Overhauled previous stub implementation, notable improvements;
– cellGame: Fixed a bug in cellHddGameCheck and cellGameBootCheck that caused memory access violations;
– cellUserInfo: Fixed a bug that caused memory access violations in cellUserInfoGetStat;
– sys_fs_unlink: Return CELL_ENOENT if path is an empty string;
– sys_fs_stat: Return CELL_EFAULT when path variable is not defined;
– cellGame: Better stub cellGameUpdateCheckStartAsync, cellGameUpdateCheckFinishAsync
– cellRec: Improved stubbed implementation by adding its respective callbacks;
– cellVideoExport: Improved stubbed implementation by adding its respective callbacks;
– cellVideoUpload: Improved stubbed implementation by adding its respective callbacks;
– cellPhotoExport: Improved stubbed implementation by adding its respective callbacks;
– cellMusic: Improved stubbed implementation by adding its respective callbacks;
– cellMsgDialog: Fixed a null pointer dereference;
– sys_gpio: Implemented sys_gpio_get and sys_gpio_set syscalls;
– sceNpMatcingInt: Registers module and the following functions: sceNpMatchingGetRoomMemberList, sceNpMatchingJoinRoomGUI, sceNpMatchingGetRoomListGUI, sceNpMatchingSendRoomMessage;
– sys_fs: Implemented 01000000 flag (found only in Rockband games);
– sys_libc_: Implemented _sys_qsort;


– Stubs SOCK_DGRAM_P2P to handle some regressions caused by the Network overhaul;
– Added support for unspec sockets (YouTube app);
– Forces AF_INET (Youtube app);
– Fixed lv2_socket id_base;


– Overhauled pad_settings dialog;
– Added a simple timer and only saves to configuration upon pressing the save button;
– XInput: Added full remapping, rumble settings, deadzones;
– DualShock4: Added remapping;
– Evdev: Added remapping, deadzones;
– MMJoy: Added remapping, deadzones;
– MMJoy: Improved multi controller support;
– MMJoy: Prioritizes button presses due to constant axis events;
– Added fallback in FindKeyCode to prevent crashes on incompatible config;
– Implemented blacklist to filter noise in pad dialog;
– MMJoy: Handle Axis and POV capabilities;
– MMJoy: Handle MMJoy reconnection;
– Fixed filter button for evdev and DualShock 4;
– Improved evdev and MMJoy stick input;
– DualShock 4: Fixed led for ds4 when connected by bluetooth;
– DualShock 4: Fixed a regression on initial DS4 connection;
– Fixed regression on numpad keys;
– Evdev: Added positive axis list yml to handle 0+ range sticks;
– MMJoy: Improved settings dialog, changed threshold behavior;
– Evdev: Improve MMJOY settings dialog / change threshold behavior;
– Evdev: Misc fixes, fixed directions, sticks and first rumble implementation;
– Implemented mouse button mapping, improved keyboard;
– Fixed connection count;
– Improved cellKB keyreleases and autorepeat;
– Enabled XInput configs with disconnected devices;
– Implemented Input Profiles;


– Implemented new progress_dialog for installations;
– Redesigned settings dialog to use an horizontal layout, solves some small screen issues;
– Uses global AppIcon instead of setting it in every Dialog;
– Moved Disable Vertex Cache option back to the GPU tab;
– Show total number of LLVM objects that are to be compiled on LLVM compilation dialogs;
– Fixed compatibility column sorting;
– Fixed Register Editor;
– Fixed CurrentSelectionIconPath();
– Fixed deadzone preview size on high dpi;
– Fixed GameList icon backgrounds on existing themes;
– Handles zero-width columns in game list;
– Implemented simple find dialog for logs;
– Use Qt for error reports;
– Fixed icon size actions;
– New themes: Darker Style and ModernBlue by TheMitoSan;
– Added commit hash to the game panel with non master builds;
– Removed obsolete and faulty m_icon_color. RepaintGui does it already;
– Updated compatibility colors to match the new ones from the website;
– Game list: Improved deduplication logic;
– Updated Qt to version 5.10.1 (also updated AppVeyor and Travis to use 5.10);
– Fixed gs_frame spawning on monitor other than the one the main window is on. Now spawns the GSFrame on top of the RPCS3 main window;
– Fixed scrolling in Game Grid;
– Improved VFS (virtual filesystem) dialog;


– File: Clamps utime range;
– Readme: Updated build instructions to include prebuilt library binaries downloads;
– Fixed free space check;
– Added sha256 hashing of builds for checksum purposes;
– Added a separate OpenSSL artifact containing the required libs to make compatibility database fetching work. These binaries are distributed by AppVeyor as part of the build environment. Users can be directed to download and extract the binaries to their local rpcs3 directory (e.g. in the quickstart guide). A warning can also be included regarding legal issues pertaining to using OpenSSL, if any;
– Package artifacts using 7z format, reduces rpcs3 artifact size from ~20MB to ~14MB;
– Compat database is fetched and packaged after the build has finished. Failed DB downloads are (hopefully) accounted for by adding some basic fault tolerance using powershell + AppVeyor caching;
– Changes Windows master builds artifact version format to: rpcs3-{tag}-{commit_count}-{commit_hash}_win64.7z;
– Changes Windows pull request artifact version format to: rpcs3-{tag}-{commit_hash}_win64.7z;

Linux + BSD:

– Installs GUI Themes to /usr/share/rpcs3 and icons to Icons in executable directory and loads them from there;
– Fixed a bug on fs::dir::open, now returns false on failed metadata instead of crashing;
– Added support for Vulkan on Wayland;


– Implemented set_ideal_processor_core;
– Readme: Updated Fedora instructions with required packages;
– Readme: Added libpulse-dev;
– Readme: Added OpenSUSE instructions;
– Workaround for NVIDIA Linux bug: For some reason, using 1.E-x notation does not work on NVIDIA Linux. Could be a bug in SPIR-V generator or the driver itself;
– Fixed commit count on AppImage (TravisCI) builds by unshallowing git clone;
– Implemented fs::unshare;
– AppImage: Now compiling with Clang 5.0 instead of Clang 4.0;
– AppImage: Removes libfreetype.so.6, fixes AppImages for some users;
– Added an easy way for package builders to disable native cpu optimizations (-march=native);
– Changes Linux master builds appimage version format to: rpcs3-{tag}-{commit_count}-{commit_hash}_linux64.AppImage, in sync with the Windows builds;


– Fixed set_ideal_processor_core on several BSD distributions;
– Fixed a bug with LLVM JIT on FreeBSD;
– Uses glslang, HLSL, OGLCompiler, SPIRV, OSDependent system libraries when building;


– Fixed command line arguments passed to rpcs3;
– Added libswscale CMake detection as the component is mandatory to build the project;
– Removed libswresample as the component was not used to build the project;
– Simplified ALSA, GLEW, Qt, ZLIB detection/integration in CMake;
– Cleaned up rpcs3/CMakeLists.txt;
– Fixed log size limitations;
– Implemented set_ideal_processor_core for MacOS;
– Bump CMake requirement to 3.1.0+;
– Fixed debug without LLVM build;
– Use depth:false instead of depth:bigNumber for unshallowed clone on TravisCI;
– Silenced some build warnings;
– Removes GIT_VERSION's incorrect commit count on non-master Pull Request builds – make GIT_VERSION only be the Commit ID in those cases (e.g: 0.0.4-abcdefgh instead of 0.0.4-3-abcdefgh);
– Replaced make by Ninja build system on Travis;
– Pass missing arguments to _sys_process_exit logging function;
– Map and update pugixml with the upstream repository instead of the one from RPCS3;
– Log sys_fs_utime values;
– Bump last PS3 firmware version indicator from 4.81 to 4.82;
– Travis: Updated URLs to retrieve glew and Vulkan deb packages;
– Updated OpenAL externals to 1.18.2;
– Updated GL header to 20180114;
– Remove ps3emu_api unused files that were really never used for anything;
– Update LLVM submodule URL (to rpcs3/llvm);
– Added ignore=dirty to hidapi submodule;
– AppVeyor: Various formatting and changes to the file structure (mainly cmd -> powershell for better readability);
– Updated versioning: rpcs3 latest release tag is now fetched using git describe, no need to manually update appveyor.yaml for each release or milestone;
– Added vscode and kdevelop files to gitignore;
– Fixed quoting in CMake files, solved an issue with packaging for NixOS;

v0.0.4 Alpha

@AniLeo AniLeo released this Nov 12, 2017 · 1112 commits to master since this release

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!



– 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


– 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


– 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)


– 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


– 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


– 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


– 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 range protection without trampling shared pages instead of only checking a single page. This fixes some missing graphics in some games without requiring strict mode (id tech 5)
– When encountering corrupt put/get registers do not discard entire commandbuffers in case there are semaphores held
– Fixed src/dst framebuffer detection
– Fixed memory protection checks when strict mode is disabled. Should help prevent WCB from hanging the emulator
– Re-implements index buffer expansion/emulation and improves use of the primitive restart flag
– Fixed clear commands for depth-only passes. This removes the need for the invalidate cache hack
– Restructures the texture cache to contain section manipulation to one function
– Fixed some leaking memory sections
– Fixed surface subsection sampling (Turbo: Super Stunt Squad)
– Workaround fixes for crashes due to 0 pitch (VirtualMemory.cpp crash)
– Better detection of situations that would require memory stitching (framebuffer blit operations). Should fix black screen regressions in some games
– Disables draw call batching when strict mode is enabled. Strict mode should always use the safest option and the batching solution has been shown to fail in rare cases (Okami HD)
– Fixed a critical bug in volatile attribute layouts that was introduced during vertex rewrite but went unnoticed. Likely fixes corrupt graphics or black screen in some games, probably only affects 2D elements since it requires immediate-mode drawing plus at least one referenced data register to trigger this condition
– Invalidates surface store address when tile unbound
– Makes dmactrl get 'readonly': rsx accuracy change, currently its possible to edit the get ptr from the game side and cause the rsxthread to freak out. It should only be able to be changed from the syscall, so we use an internal variable to keep track of command buffer position and write it to get ptr now
– Tag framebuffer memory when strict mode is enabled to check if content has been written to. This way, framebuffer contents can be ignored if they are known to be incorrect
– Rework memory protection and ignore flush requests if the data has already been written to the CPU. Speedup when using WCB
– Prevents recursive access violations that cause hanging when WCB is enabled
– Tries to determine pixel offsets when nv308a::color is indexed with a non-zero y coordinate. Hopefully fixes bugs where shader ucode is not properly written to rsx mem leading to failing to compile shaders
– Only reject framebuffer memory if it appears inside an actual texture. Ideally should destroy such textures if they exist since the framebuffer will replace the data as it is rendered to, but such a case may not even exist in practice
– Reimplemented the fragment shader pipeline (partially) and optimized cache access
– Implemented texture data casts where possible (1D <-> 2D)
– Implemented render-to-cubemap [realtime reflections] (still incomplete, but should work most of the time)
– Fixes for texture size detection using rsx antialias modes
– Fixes for hanging when using WCB
– Workaround for AMD driver: Catch segfaults in wglDeleteContext with SEH. In rare cases the driver derefs a nullptr and dies, taking the emulator with it. From testing, it seems the vram is indeed freed when this happens so its "safe" to continue
– Disables blit operations if the target will have a size of 0 in any dimension. Fixes blit engine crashing when GPU texture scaling is disabled.
– Bumped shader cache ver to 1.1. Vertex input declarations (unused since vertex rewrite) and texture sampling coord type (unnormalized vs normalized) no longer affect shader state and do not generate new shaders. Shader cache should generate fewer shaders in affected titles
– Do not respect FENCx instructions as they seem to be an optimization hint. Respecting FENCx instructions can result in some hilariously broken shaders including entire shaders that are one big NOP


– Fixed an bug when initializing framebuffers
– Implemented a weak vertex cache for OpenGL as well
– Properly implement VSync control when using OpenGL
– Fixed a zcull corner case
– Fixes for backbuffer blits and complete removal of the flip hack when using OpenGL
– Removal of redundant classes in OpenGL and general cleanup of the texture framework for that backend. There were 2 separate texture classes for example with very different approaches which was awful
– Improved mesa compatibility for OpenGL
– Checks that fence is not empty before calling destroy (workaround for a driver bug)
– Removed the broken strict mode behavior of depth range using GL
– GLVertexDecompiler: fixes undeclared diff_color and spec_color by using mapped variable name, even if the register is declared as output and nothing is written to it
– Compatibility workarounds for AMD cards: emulates glMultiDrawArrays which are broken on Windows driver
– Optimized get_surface_subresource


– Fixed vertex buffer binding for Vulkan. The key is to avoid 'stale' descriptors getting to the driver since the referenced buffer views are likely to have been destroyed, resulting in a use-after-free promptly followed by a segfault
– Improvements to multithreaded vertex processing
– Volatile vertex cache implemented to help performance in geometry heavy scenes
– Pre-emptive framebuffer flushing to lower the penalty of a cache miss
– Partial rewrite of the Vulkan renderer to take advantage of parallel frame processing. The frame queue is now double-buffered improving performance and reducing stutter.
– Fixed windowed mode -> fullscreen mode transition hangs and crashes
– Implementation of blit engine in hardware for Vulkan backend
– Reorganization of frame storage and heap management for Vulkan [WIP, slight performance degradation]
– Optimize frame storage and minimize hard sync point occurrence. Improves framerates and makes frametimes a lot more consistent.
– Mark resources with frameIDs to keep drivers that buffer up frames from crashing (Mostly NVIDIA)
– Implemented VSync mode
– Fixed window resize race condition when doing flip
– Improved error handling, recovery and display when running Vulkan (NVIDIA fullscreen & window resize woes)
– Tightens VSync control to not accept any modes that would allow tearing - including adaptive VSync. The reason for this is that gcm is timed to control the virtual graphics controller instead of running uncapped and letting the display limit the framerate. This causes slight judder where the overhead of threads getting scheduled around means we might miss a present window. While the adaptive VSync does a good job allowing consistent frametimes, it does allow tearing to prevent judder. This forces true VSync. If you experience frame judder, disable the VSync option
– Implemented notifications from the GSFrame QWindow to the Vulkan renderer thread. It is important as the renderer should pause until resizing is complete to keep some drivers from crashing when the native window suddenly changes size in the middle of drawing/presenting
– Updateed the vulkan dependancies to the newer spec version. Moves KHR_external to core. Also makes it easier to use newer Vulkan SDK on which newer drivers are based upon. Overall a very minor update, hopefully nothing breaks
– Compatibility workarounds for AMD cards: disabled primitive restart on Vulkan
– Fixed clipping bug when using Vulkan + GPU texture scaling
– Flush command queue before attempting to perform texture writeback to guarantee draw order
– Tag primary command buffers with a flush_only access hint to ensure they are always reopened if submitted outside flush_command_queue such as when dealing with access violations
– Improved handling of swap_bytes behaviour when using WCB

Direct3D 12

– Added [DO NOT USE] on D3D12 selection


– Implemented PulseAudio backend
– Added Buffer Count setting


– DualShock 4: Fixed bluetooth connectivity bug on controller reconnect
– DualShock 4: Fixed initial connection issue and hotplug/dongle calibration detection
– evdev: Added evdev joystick support
– evdev: Better joystick axis scaling
– evdev: Fixes axis reversal
– evdev: Improved controller detection, this fixes detection of the Steam Controller when used with sc-controller
– evdev: Added deadzones
– evdev: Added analog to dpad option
– XInput: Added config entry for Pad Squircling Factor
– Added joystick squircling, which makes running in certain games nicer, same implementation as XInput and DualShock 4 backends
– Respects the controller setting when returning data from cellPadGetData
– Added a window to setup multiple input types as once
– All controllers are now handled by a single thread
– Added ignoring of emulator shortcuts to keyboard_pad_handler


– sys_net: Converts endianess before passing buffers to setsockopt
– sys_net full rewrite: Implement sys_net syscalls, Clean libnet functions, LLE load libnet.sprx, libhttp.sprx, libssl.sprx, librudp.sprx and libbeisobmf.sprx (makes basic applications like YouTube now work)


– Fixes rXml limitation
– Fixes sceNpTrophyCreateContext
– Implemented a basic trophy notification dialog
– Allows null argument in sceNpTrophyUnlockTrophy (fixes null dereference on Jak 2)
– Fixes for trophies to show correct language depending on set system language
– Implemented Trophy Manager
– Prevent TROPUSR from crashing on "bad" input


– Enabled modules list multiselection
– Added drag and drop to gamelist for PUP, PKG, RAP, Disc Game Directories and EBOOTs
– Adjusted toolbar size
– Fixed a bug that would crash the emulator on second boot
– Added user defined notes to saves on Savedata Manager
– Added the ability to force a log comment while a game is running on Alt+L
– Fixed scroller and splitter on debugger frame
– Added hidden by default debug tab in settings
– Fixed GuiSettings to be in config_path settings
– Fixed sort and scroll in game list
– Added smooth icon size slider
– Fixed settings dialog size to be consistent
– Added custom config indicator (gear icon)
– Added disable mouse input setting while the game screen is active (for those who play with UCR)
– Minor refactoring on pad settings
– Added git_branch to version, displays branch on GSFrame when not RPCS3/master and prints to log as well
– Fixed resize on boot
– Fixed custom config creation. It created the yml file right when opening the dialog. Now it creates it only on saving
– Added user custom theme Kuroi (Dark theme)
– Implemented save manager
– Hide Utilities by default (it's displayed when Debug Tab is enabled)
– Forces single line text for out of bounds issue in Game List
– Fixed a layout bug in the Boot Recent menu
– Fixed small buttons/missing icons in the toolbar
– Fixed gamepad settings layout issue, added refresh button
– Added scrollbar to about dialog
– Fixed graphics adapter selection
– Added more customization options for styleshets
– Added char count label to osk dialog
– Fixed a bug in settings dialog layout
– Disabled viewport settings on custom configs
– Fixed fullscreen icon
– Added syntax highlighter for cg_disasm
– Show tooltips in description box when hovering settings
– Save manager improvements: Makes size only 60% height of window screen initially, adds ability to delete/select multiple rows, adds ability to open the directory of the save
– Debugger improvements: Repositioned the debugger's current instruction to be in the middle, added a breakpoints list so one can see all the current breakpoints
– GSFrame: Identify minimize/restore events as separate from regular resize and do not react to them
– GSFrame: Enable message queue consumption after loading the shaders cache. Also hides the frame during this step. This fixes the 'start fullscreen' bug when running vulkan
– Updated Tooltips
– Added Delete LLVM Cache option


– Resets windows sleep timer on pad input (prevents computer from sleeping when playing with controller input only)
– Registered Win32 error 32 (Sharing Violation)
– Minor Windows fix on fs::truncate_file and fs::utime
– Fixed an issue where having paths on games.yml that point to NOT_READY drives such as empty physical/virtual disc drives returns ERROR_NOT_READY (Win32 error code 21) which was not handled in fs::error, therefore throwing an exception and crashing RPCS3
– Finally fix version indicator. Now displays correct commit number instead of "3"


– Fixed saving/loading on Linux for some games by changing param.sfo to PARAM.SFO (lol)
– Finalized AppImage support, started providing proper Linux AppImages on rpcs3.net/download
– Fixed an LLVM issue on openSUSE Tumbleweed when using AMD by bundling Qt5Svg.so
– Fixed segmentation fault in boot recent list
– Fixed Fedora glew install instructions
– Make it pass desktop-file-validate in Ubuntu 14.04
– Added option to build using shared llvm libs for Gentoo users
– Added warning about needing to install libglvnd for NVIDIA linux users
– Implemented progress bar in taskbar
– Fixed some of libpng known incorrect profile spam
– Implemented set_native_priority (posix)


– Allows building with ALSA on BSD
– Makes Vulkan optional on Linux / makes it possible on FreeBSD. When the USE_Vulkan flag is on, finds the Vulkan loader using pkg-config, and uses it if it's been found. Also libX11 is now linked on any non-Apple Unix. It was necessary on FreeBSD


– Added an option to disable the vertex cache for cases where it causes bugs
– Added SPU and PPU Debug checkboxes to Debug tab
– Added a CPU-only mode for debugging texture management operations. While it is quite accurate, it is not perfect and is as expected is slow. Should only be used for debugging
– Fixes debug counters for texture cache. Also tracks texture memory usage
– Added buffer names to vulkan heaps to help debug OOM crashes ("Working buffer not enough" crash)
– Added check_program_status time to draw call setup statistics. It can slow down games significantly
– Added PPU instruction stat dumper, needs PPU Debug option to activate and PPU Interpreter, dumps after Resume (after Pause)


– Small improvements to error formatting on log
– Added CPU to log
– Compresses log to RPCS3.log.gz when closing RPCS3
– Makes it impossible to disable fatal errors logging
– Config now prints eventual errors for enums
– Backs up last log to old_logs/
– Fixed global variables in Log.cpp
– Added "Clear" option to TTY log context menu


– Added support for multi-files pkg
– Implemented log stacking for error report
– Removed several warnings from the code
– Allows project to be built on macOS with Clang. Only available Render there is Null
– Updated ffmpeg submodule
– Added experimental build warning for non-master builds
– Fixed rare occurence where there a /PS3_GAME+something directory lead to weird behavior
– Fix for unpkg
– Minor refactoring on GUI code for firmware libraries searching
– Fixes moving disc games with arbitrary dir name
– Adds specific how to ask for support instructions on fatal error dialog
– Travis.yml: Coverity and Coveralls code analysis are removed as they don't work currently, "dist: trusty" is removed as it is now the default Linux, some rework and cleanup added
– Cleans up old wxWidgets related references
– Added some visual studio filters for GUI code files
– Document some of the build options in README and CMakeLists.txt
– VS build: Copies Qt5WinExtras.dll to bin directory. When building RPCS3 on Visual Studio, there's some DLLs that are copied from the local QT installation to the RPCS3's output directory using a
post-build script. However, one of these DLL was missing, which is required for running the program on debug mode (for release versions, the file is already present on git)
– Deploy QT DLLs using windeployqt tool: Replace the old mechanism that manually copy the DLLs using either CMake or VS built-in functions. The new approach uses the windeployqt tool provided by the QT project that automatically detect the needed DLLs and perform the necessary copying. This approach should be more robust if there's an upstream change on QT project regarding DLLs usage
– Fixes an error when compiling with visual studio if you have other executables in the bin folder
– Added a GitHub issue template, hopefully helps with invalid issue spam
– Remove unused rsx-debugger submodule
– Change compiler requirements in cmake script to match with the values listed in the README file
– CMake: Builds LLVM from the submodule if there's no suitable version
– Moves optional.hpp as a submodule
– Fixed travis trying to upload AppImage from private forks. Always fails if not from upstream repo anyway and detects as an error
– AppVeyor: The project is now built with the Visual Studio solution instead of CMake. This should prevent contributors using Linux (like myself) to introduce a regression on Windows by missing changes in the Visual Studio project files. The AppVeyor artifact is generated with Qt 5.9.1 (previously Qt 5.8) like for Travis. The version 5.9.1 of Qt is not mandatory, there is no problem to keep the minimal requirement to Qt 5.7 except maybe if we have bugs fixed in a newer version

v0.0.3 Alpha

@AniLeo AniLeo released this Jul 20, 2017 · 1682 commits to master since this release

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


– Removed HACK instruction;
– Updated VREFP, VRSQRTEFP instructions;
– Optimized MTOCRF instruction;
– Analyser: TOC detection logic improved;
– Analyser: Several bugfixes;
– 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.


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


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


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


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


– 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 will get merged in later;
– Minor fixes for broken contexts on unsupported devices;
– Fix a few Vulkan API spec violations. Fixes a free-during-use on a leaky handle when the debug overlay is enabled. Also clips clear rects to always fit within the current render target;
– Monitor buffer usage to prevent running out of working space on Vulkan. Also reorganizes some of the buffer init process on Vulkan;
– Fix a rare Vulkan shader compiler bug;
– Adds 'add_signed' in blend ops;
– Added Stretch to Display area as an optional setting;
– Fix Vulkan layout transitions;
– Fix a Vulkan crash about undeclared fog_c. Also fixes default parameter initialization that should fix some games that have broken graphics with Vulkan but work fine with OpenGL.


– Lay foundation for GPU scaling implementation;
– Adds in a very old bugfix that makes D3D12 crash properly instead of throwing a cryptic range error. This DOES NOT fix D3D12 crashing, merely generates a more useful fatal error message.


– Fix SPRX/SELF check in npDrm;
– EDAT fixes;
– C00 SPRX Loading fixed.


– Implemented Native DualShock 4 Support;
– XInput/MMJoystick: Fix connection status;
– XInput: Vibration support;
– DualShock 4: Use controller calibration values for accel/gyro.


– Added Downmix to Stereo option.


– Mutexes fixed (cause of constant freezes);
– Added installation;
– Initial support for Linux AppImages;
– Reimplemented Vulkan Render on Linux;
– Implemented low-latency ALSA Audio Renderer for Linux;
– Added compatibility with mesa drivers;
– Fixed LLVM compatibility on Linux with gallium based drivers (mesa): llvm_map_components_to_libnames provides a list of static libraries to link our target to. Unfortunately, on linux, this causes llvm to be initialized once on program launch and then when any component loads shared llvm, e.g mesa resulting in the "inconsistent commandline options" error. This changed links against dynamic llvm library when compiling on linux;
– Added instructions and support for Fedora;
– Enable optimizations on TravisCI.


– Improved portability for BSDs.


– Icon updated;
– GUI rewrite: Replaced wxWidgets 3.1 with Qt 5.7;
– GUI Redesigned;
– Added Grid View;
– Added Tiny, Small and Huge Sizes;
– Added Welcome Screen;
– Debugger is now hidden by default;
– DPI Scaling issues fixed;
– Re-implemented VFS manager;
– Re-organized the graphics options tab a bit to separate main options from debugging options;
– Improved Debugger and Disassembly;
– Improved Categories in Gamelist;
– Added stacking option for same log messages to log contextmenu;
– Added sort indicator to Gamelist;
– Added background color to icons for better readability;
– Added default layout for better looks on first start;
– Added Resolution, Sound Format and Parental Level columns to Gamelist;
– Added Save Manager;
– Added tooltips and descriptions to Settings;
– Check system for SSSE3 presence and throw error message when opening the emulator;
– Added Toolbar Icon Color Picker;
– Added Game window resize on boot.

v0.0.2 Alpha

@AniLeo AniLeo released this Mar 12, 2017 · 2194 commits to master since this release

Latest builds available here.
Always use the latest build available.

– 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 system cleanup
– sys_memory_get_page_attribute improvements
– sys_mmapper improvements

– 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

– Major sys_net improvements
– cellOsk implemented
– cellVDec fixes and improvements
– Several other small improvements

– MMJoystick implemented

– Several Linux specific bugfixes were made. Some are still being worked on as there are still a few Linux specific bugs.

– Initial package unpacking implemented
– Small Interpreter improvements

– Logging system cleanup
– TLS bugfixes and improvements

– 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


@tambry tambry released this Apr 16, 2016 · 2780 commits to master since this release

Latest builds available here.

General changelog:

    • 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


@tambry tambry released this Oct 3, 2015 · 3518 commits to master since this release

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:

  • Jun 28, 2014


    bump to version v0.0.0.5 a lot has changed since the last version num…
    …ber and we don't have an annotated tag yet, which would be helpful for build name generation