It’s been almost a year since the release of PCSX2 2.0. Since then, we’ve released PCSX2 2.2.0, and today, we’re excited to release 2.4.0! We’re even more excited to showcase how we’ve refined what 2.0 brought and then ramped up again – back to bringing you bold new features. We present this chronologically to show you the trajectory we’re on and therefore what to expect for the release of 2.6.0 – tentatively scheduled for late 2025.
PCSX2 2.2.0
PCSX2 2.0 may well have been our biggest single release to date. With several major contributors stepping back, including longtime PCSX2 lead developer refraction, the remaining team – still energized to contribute – confronted reality: for the first time in a long time, we’d delivered what we had to offer in the way of big, bombastic new features. What we resolved for PCSX2 2.2 was to take it out of the furnace, let it cool, and hammer it into something more refined before getting up to speed again in 2.4. For this period of a few months, the word on everyone’s mind was “polish”.
New Emulated Peripherals
1161411616116171163011633117151172312157
Almost immediately after 2.0, contributor Florin9doi got to work chipping away at the list of peripherals we haven’t implemented yet. Not long after, first-time contributor joestringer began working on train controller support. Thanks to them, in just about the first month of 2.0, we now have support for:
Trance VibratorGametrak/RealPlay deviceJogcon and NeGconTrain Mascon controllers (Type 2, Shinkansen, and Ryojōhen)Konami MicrophoneZip 100PictureParadise
On top of that, PCSX2’s EyeToy emulation now has audio support, and Buzz! devices now have a custom UI!
Will It Blend?
That is the question! PCSX2 team member and graphics expert LightningTerror has improved upon our existing per-pixel alpha blending (PABE) implementation, increasing both accuracy and speed. Software blending, run in shaders on the GPU, is highly accurate but incurs a performance hit as it forces us to tell shaders run for one triangle to wait for all previous triangles’ shaders to complete before starting to prevent them from fighting with each other over the values of pixels that overlap between the triangles. Hardware blending is run in special hardware blending units on the GPU, which are built to avoid this fighting, but can only run a very simple set of operations. The supported operations don’t cover everything the PS2’s blending unit can do, resulting in worse accuracy as PCSX2 tries to select the closest (but often not identical) supported operation.
The new PABE implementation blends (heh) software and hardware, specially crafting values in the shader such that when sent to the hardware blend unit, they result in accurate emulation of the PS2’s per-pixel alpha blending for supported PS2 blend configurations.
Symbol Parsing Overhaul
Courtesy of contributor Chaoticgd is a massively improved debugger. This overhaul, in the works for almost a year, allows the debugger to read MIPS debug (.mdebug), SNDLL (.sndata), and ELF (.symtab) symbol tables from a game’s executable binary if it has them included. If the .mdebug section is available, the debugger can now display information about global variables, local variables, and parameter variables, including data types. This means you can explore data structures in memory as a structured tree. He subsequently added settings that give you fine-grained control over how and when PCSX2 performs symbol analysis passes. A few games that shipped with their debug symbols include Pac-Man World 2, Sega Soccer Slam, Fatal Frame, and hundreds more shipped with symbols in general. Below is a screenshot showing the tree of global variables and the list of functions in Pac-Man World 2.
Savestate Compression Options
Thanks to KamFretoZ, you can now configure both the compression method and the level of compression for savestates! These formats are Zstandard (default), Deflate64, and LZMA2, and there are four compression levels for each. You can also choose to leave your states uncompressed if your 40 TB NAS feels lonely. Higher compression will result in lower file sizes but may increase the time needed to save the states.
DEV9 Fixes
After 2.0, longtime contributor AirGamer launched into an effort to fix our DEV9 emulation and try to get PS2 Linux and PlayStation Broadband Navigator (PSBBN) working on PCSX2. His work has brought us tantalizingly close: as best we can tell, our lack of full emulation for the PS2’s translation lookaside buffer (TLB) is now the only barrier still preventing PS2 Linux and PSBBN from working. Whoever steps up and conquers the TLB will bring the penguin to PCSX2.
Various Smaller Improvements in 2.2
Before we move on to 2.4 and the big changes it brought, we want to stop and spotlight the smaller work that goes into making PCSX2 a polished experience. Below are just a few among hundreds, and we’re grateful for every single one.
#11562 – Team lead fobes adds little endian support to the debugger.#11372 – macOS expert TellowKrinkle fixes VAAPI support on Linux.#11593 – Team lead fobes adds selectable pixel formats on a per-codec basis to the video capture tool.#11571 – Wiki maintainer TheTechnician27 adds a way to go directly to a game’s wiki page from the PCSX2 application.#11602, #11808 – DB maintainer JordanTheToast and UI artist KamFretoZ add hardware info to our statistics overlay.#11730 – UI artist KamFretoZ adds a game icon in our Discord Rich Presence for supported games using RetroAchievements.#11787 – Memcard and gamepad expert RedPanda4552 fixes an issue with input profiles being blocked by old settings.#11839 – Graphics expert LightningTerror fixes a longstanding graphical issue in Knights of the Temple: Infernal Crusade.#11935 – First-time contributor rares-fodor adds a search bar to the cheats list.
PCSX2 2.4.0
After 2.0, the 2.2 development cycle let us catch our breath and – for the most part – focus on finer details. Brewing under the surface, though, were fresh ideas and the zeal to bring them to life. We all wanted to get back to innovating, so that’s what we did. The 2.2 development cycles comes with many performance improvements and new features.
RT in RT Support
For his capstone contribution to PCSX2 after over 20 years of unimaginable dedication, former lead developer refraction turned to his unfinished work on RT in RT support. Feeling duty-bound not to leave this to rot after he left, he agonized for months to get this working, and the end result is something to behold. First, though, let’s address what this even is.
“RT in RT” stands for “render target in render target”. If a game wanted to render to a subset of an image (e.g. only the right half) on the PS2, it had two options. The first, which is the way PC games have to do it, is to draw with triangles whose coordinates are positioned over the subsection they want to draw over (in the example, making sure all the triangles are positioned over the right half of the image). The second is to take the memory address of the pixels in the image and adjust it so it starts at the right half (so the new RT pointed to memory that was inside the old RT, hence the feature name). Now, drawing to the top left corner of the render target actually writes to the top left corner of the right half of the image (and drawing to the right half of the render target would corrupt the image, so don’t do that).
Games that chose this second option confused PCSX2 very badly, and it would end up drawing to a separate RT that it never properly merged with the outer RT, effectively deleting all the triangles drawn this way. No longer! With this change, PCSX2 now recognizes when this is happening, figures out what section the PS2 game was trying to draw to, and moves the triangles accordingly, converting option 2 draws into option 1 draws, which PC APIs know how to handle.
This brings massive fixes to a huge variety of games – at minimum, multiple games with two-player splitscreen (such as Jak X: Combat Racing), multiple games that no longer need a hack to work (such as Ghost in the Shell: Stand Alone Complex), multiple games whose effects now work (such as Drakengard; comparison below), and multiple games that would only work before in software rendering (such as Hitman: Contracts; comparison below).
BeforeAfter
BeforeAfter
BeforeAfter
Custom Real-Time Clock
The PlayStation 2 uses a real-time clock (RTC) to keep track of the date and time in the real world. Games often use the RTC in order to seed pseudorandom number generation (RNG) because of its high variability. Additionally, save files show a timestamp in the BIOS, and these timestamps are sometimes shown in-game too. However, some games use the RTC in a more interactive way. Ratchet & Clank 2 and Ratchet & Clank 3, for example, let you teleport to the post-game Insomniac Museum area from 03:00–04:00, bypassing completion checks. The Simpsons: Hit & Run, The Simpsons: Road Rage, SpongeBob SquarePants: Battle for Bikini Bottom, and Scooby-Doo! Night of 100 Frights have holiday-exclusive Easter eggs. Need for Speed: Hot Pursuit 2 displays the date and time on a camera recording when you get busted. And Metal Gear Solid 3… if you know, you know.
By default, when a user starts a game, PCSX2 sets the RTC to the date and time from the user’s desktop. For input recordings which require perfect determinacy to function correctly, we instead used a fixed, arbitrary date and time after the release of Metal Gear Solid 3 (which crashes if the date is too old). With the introduction of RTC settings by TheTechnician27, you can now optionally select a custom RTC starting point in the per-game settings (Game Properties > Emulation > Real-Time Clock). This provides niche benefits for regular users (especially Ratchet players and enjoyers of Hideo Kojima’s antics), and it brings PCSX2 closer to having a mature suite of tool-assisted speedrun (TAS) capabilities.
This currently requires you to have your BIOS set to GMT+0 and daylight savings time (DST) set to Summer Time (this is the default PCSX2 creates if no .nvm file exists). Additionally, it will only work within the bounds of 2000-01-01 at 00:00 and 2099-12-31 at 23:59, which is the range of an actual PlayStation 2. Below is the Halloween-exclusive title screen from The Simpsons: Hit & Run.
HDR Optimization
The PS2 doesn’t have HDR support, so why does PCSX2 use HDR textures? When two numbers are added that sum to a result that won’t fit in the output, like adding 200 + 200 with an 8-bit result (which can represent the values 0-255), there are two main ways computers may deal with this. The first is overflow / wrapping, famous for looping counters back to zero after they cross 255 in many NES games. In this case, the number wraps back around to 0, so 200 + 200 would result in the value 144. The second is clamping, where numbers greater than the maximum representable value are clamped to it, so 200 + 200 would equal 255. When rendering graphics, most humans consider clamping to look more visually pleasing than wrapping, since having brighter than white turn into white looks better than it turning into black or gray. As a result, PC blend hardware clamps the results of math on all 8-bit textures. But the PS2 lets developers pick between clamping and wrapping, so how do we emulate wrapping?
Well if we don’t want the result to clamp, why not just use an HDR texture, which can store values much larger than 255. We can draw all the triangles to this texture, letting the numbers accumulate more and more, then at the end, run a separate shader that wraps them all back to 8 bits. One minus of this approach is that there’s still clamping, it just happens at a value much larger than 255, decided by the HDR format we use. For a while we used 32-bit float textures, which could accurately represent values up to 16 million, allowing a minimum of 65 thousand overlapping triangles before problems started appearing, but a while back we switched to 16-bit normalized integer textures, which many GPUs process at twice the speed, giving a minimum of 257 overlapping triangles before problems. This was enough for all the games we tested.
But performance still wasn’t great, so former lead PCSX2 developer refraction (codename: “One Last Job”) came back from retirement swinging with a major optimization. Previously, for every group of triangles the game rendered, PCSX2 would convert the texture to an HDR texture, render the group of triangles, and then perform the wrapping while converting the texture back to non-HDR. But some games would render multiple groups of triangles in a row, and for each group, PCSX2 would convert, wrap, and convert again. Now, PCSX2 converts to HDR once at the beginning, and leaves the results in the HDR texture until the game stops using the wrapping mode, greatly reducing the number of conversions needed in games like Sly 2: Band of Thieves and Big Mutha Truckers.
Loading Chart Data
Direct3D 11 Comes Back with a Speedy Vengeance
The Direct3D 11 renderer might have been the second-class citizen for some time now, but not this time! Graphics expert LightningTerror has come back with a toolbox in an attempt to revitalize the elder. How did he do it? The first phase was to lay out the groundwork by fixing the Direct3D 11 Resource Hazard API warnings, which paves the way of enabling him to implement Resource Shader Caching that manages to give noticable performance boost in quite handful of games. And as if those optimizations weren’t enough, the daredevil himself has backported even more optimizations from other renderers which gives quite a performance boost in many games.
Don’t believe us? Here is the benchmarks:
![](data:image/webp;base64,UklGRtggAABXRUJQVlA4TMsgAAAvscJkAGZR3LaNY+4/9vX6jogJyHfr3ssaw2v+EvbZ0/Ca+4qW3ln9hMw0ZGmeqpyFkVJzaGNbPRX39f/r3Db6h77NVPFYOslY1rFqH7txTuu6UVpV3YLCrsNgtsJMjg+XlDMFh2NHx3BGUkCpSfVo5cgrGk01c/TTaH7/hb40U4P01XdhlpnZuVomtctMSpZ577LMzAyBZeaynWXevSz3s8y8e8W7V1wMLTMzMzMzM++qjF5mZrhjZmZmpkn5s7zSMjMzMzMzUJz2/1Ea/S8tjY9DnOzgJIRUGTi5cTY9nJmGqQwppHLW9N48UzRj2uwVTZULKViIFwznmoN1hQSQdWV3+O2yv+u931F89v9R2+6xe++9h/fkE12QL5OQaVuOSGWE6TgyXWpZdvYke++dOMHxEjKpTLSJixtBzolpqFePE/Fg+IwO7n5cf93tvyzatuK22a9GAcmIDqhEGd9qv+jE/2dHcghNZmTDx7VAPByGgQfAwuj+/f9z75PkV6gSBFUpVJVSP+gYyGsPxUaK/ATxK7MwiKNwVUqEoCGMAVzsfCOxuKwbXGf3J6FQTCa66FJGEdCGMcS/uvCTQ8jwgIMhABUMIbANZPSBC89fQBaHGASgkeg/NNTWwjY3NKC16fvAz9rkdZt0v3ZRMSXkYTTArF3Pqo2buW1XJmtERdkEYpr3dM13Fp9gx4pCo+riPez+MuHA502XFVTdNDaZksp/6VXyP42eJf8sVP7TNFg0AWh5sKidmtXlxy9otCdftj5ZONXsKRWAKfsvPpvy/xM01v71qX1c+MgyG1Uze5t+umfJP/V8rFLy+4wzdozvGi7SzTGUc6VCtI3lRNl14xkCa9YdZaTaRFwYy6JsJcsPvXYhQvRNvxhbWzAea4km76iSLFhV1Q3Xy6KFaYWoj2vYT5JJEWbs62bvNxVqUgoAHsqTZvSviwKASTWPNto9spwwwCjUZXRFfYpWY+jSesJhiwsy9CH5cQ4cC4zt3RccPcPFGWW9tB2RgOm7PmRIWhlNrSmuJ1aMMxZY+rRcni6AgBZEwJQpAICXDra8iuRVYZNQgBqvHrO/3kCqgf/kOD9SqmhgFCfTUhcj3JBZuu+NC5HEfuUXpmZ0HAJDsveRkc3UlOjxvrHlxAxOG6sr/3XKr1M/JaOV7hatDNqwPuuB7Ne1Iu3Xvdxgxp2ZrMdXvNFAFiIQAtPIqylgkSpvIbAXhigAvG2OEohvY/mfnqsgJAWrwgqmIeasVJqWWrJsROiC4CvnrXSpRjZWThAbxj5DiSRwQBYvf4jfxSZmbv8Nw35FXjG2kKBi6EXZrYfm6jJH2uZ3dF/1xEmatPf/JXuvVBoH45ynUUhsNBYsSdKUnB3RAodrINY1XD5TVZdbHLxKC9aODoZnf8COfb9qyvGZQsBWuOL9ivRLckyg0fA/Ky8ZvEqMNlf38QV9k4p9jKsd0hT36ELXHlvkEmNbtrkoSkYoTZKxxe/9IuX/J6Qxz7UPOO0sfp8k9Y5xhDHsxzPkU6Kz9YK7Jnt4kjHpjPYwrStPFURIZsF51T1cg9lyV1R9+ZCWWKrkCC9T3TfsbROpxVhHYDq7LOIiq4DrbBz3FEPN20AFHg0iHuk0WyCBPmHJHmePXGwEY87gye49Y7K5lc8Ya7Gt1iL4lHjnsEHBzDb9Sr089jhzNy8BHiM1doBQ0MgPT9eBcQo/znlLOTBxxtac8sRIv+QKRAKsVjfi0fssxyCaJNeRfsltrGa2jmCLe4BScXC5hcGrPKp7ID5TiBmwK5qW20WsGDcQ8aCCtRmn5DH6NbJuQ1FYGyQ11CH2cg2VFIZ30wnRqsrzcgP+ebJBlY4imJ4WkM5Iu048QIIG13Oy5rtaZhVHv6EKrbqAaF8lukmAHEBKfXwLfNks2dV01XFXdGSWBwyOG4h40ECMQ6chprrzlZdoqGI8B0SC73MfkvT8rrB6uacA5pr+I6euvyc6mritdesLX6T3lTBjFBxFg2TNtB0xaf4Dnzw20wMQVPZvFX15zaSaiwzMzrHYzd5foogjopJfl7tE0Bx7s4NSGaF+SnJVfsbLDNYlObzFIjENzauPjIolPAb/u/QEpkENY8LO1xMGwSE1tpweMobcbdnMBDjRlQaIRstLkYtyQlEsCovfve5KBZueAXLO2RCk9PjAz5k0k0+C8df1iK3NJ8f0y9dYRpWMrPP+XvKJR8l9xQlSaHSTesy3sKuQT1/jTR0o67J5gRZYHOdHX4kN6Txd5NHQZ3FfQXvbEXJHZD1SD0gA8FTnbAipHqMmzr25eMU0qM+Q1xK2vXRwyDpT5vW0S3/Q+oIepdFwXumFBIjp1+dyf47fL4wfN6ozvQUKUZeyPVY+c1ix0eSZtFPxAZm1Yd7LelThQEOxN/NTZajUYa0Ht2zx6I+TQlXhmdBt5MaGfzlWRpR3JVg88LhoTGVMqnn00eX7LWG8hfzXilmkPkNOSe61OHGkwpCSngwcRFAnGkZshYipJZq8oxTAoOG4O3h3Nw28C3OIgccjr1TjIqGZbrNBmgk3fWll3aTD4gSqWXxsAIuV/caxYn15S93D5ZLrP03ADt4Tz9Wu/zTBnA1aJSdpJSy7lnfUIOLc94zTMN+kX4i7NT76OLrZ+/2KulHWNVvLt1aHOZtTs8m16N1ME2zL/ZxcFqnBDGg3EpmhckuTLcZ2rMs1TDyU/902zE3jrbK6uM5qm7XCar40Jy0eMUqaTSo/AYdg1nv6cqp93IazVrUWDCt+Q82RB5P7dlhXQuIEgUz/YZEUAdNtea8xoZXR1FqiMyeYWCZajgJD0JyKp3WDMXGxsyhKcrRr29iwqzBMMpV2m4dNtDW7YyQls4FYrE9cYoz07nfMUL+wZWXTvadPnLW5Ec9ceg2HtI1YDJt79KHEW4ZopnZop5SndUf6kbwq7CfpgamT0e75K7h5n5TalJsTgji0lyTI4Mz+CBebxHqNZGpTSbNJU5tyvvzBjSQ5OLHgh3P7036D5CrDq708+lgSu9uSHcjsZz7m0D+/T3l2EvHoNMbkHrwJbWjI5KQ/+9G+XG9ezmvZBRT41fS64/ubuI0ru/nSCTIguzbcw9XvUxLLR8wRjGm1QNhQw3F3cJ1mjjhl79wXuWiWXd0zUqJFknrNhCk/gF8wlJG9dOPJ7j1dOmll9e1dHq+gvOuRCkPUrQ8l3TPHzq/PvCO7jYAlAG5O8M67/+6xEi3cpttoY7gNPkq4tICtFZLmB30Xjg3c5oYejrsDAkOyN/RzhiGNSP3c7pb5EhXMVBVTu5f8GcASZSJFr+ceORh9FnhjRmp89l6w9kbY6x5Sen+12IoNrn6ybroecTdoNxKTHQfxUh6lz3IMeH/xNVw0y3BX7/3UCl4Sir4AdgLSzDr8E7n6bbId9DqeNrUjQAEAUGrIg1KHvwzx/pJWtw97Me7La4YxlvRsoWi6/cWB7PZwkRTSBvv68Aiptd9x4Y8NI9H9laWOMYT44yN2NvP+fCwxiKWsQUMR4zggrukZzde8xGN94ietw32xArtML+3ypsYu2ZYf9URVu2hFTMT10nexuzpPF+khXrARy32mW7sfGQDW3tII9TxxQF5UA4DPSN1zhBuIBGw71pkRjBiTGv1JCeJ8WYFccTBa46IrqqRK++8YEdEGR+7z6PLhU7lhxSxqOQVvTAM4bjXwLkiAQd5EkXGP+K3ZnJqhHCVWYCQc7kHlA6/TyIm3hgS1+UEtVXaEkYBL6wwtFqy0rxI9JGg7BbqccZJWwtoLQ6pd5BBf9keOI/UV7kFC1ze3YojSvGEEKNhrxB4tkhSqCiPeafKRe7m87Nc1+pNSr1ikbCiAeaddZwiMGSeSAAAmzQyRHGGCmk0+JQOlDUvYgp58MPosmuGcZ4QCd9XuZu/3KPzvYt28iz2FvHyN3I2IQ/wuQ5orhrfJwCJd2R24IgkLrJkdsqvoI34IfiCQJutLAtmL2VWY6G/f4SoWxMRPpy/t7C2Q/JGHwOOO4/6gQyHtJvXWJ34qxPMsJN0/zV32DYECAJg0/vh0GIGxlQnAfVx1wIokLKha/7RUXAzGnIKgsaMokGcPomLDlrwQcRZclvVAisCQcmA0NX0wpSG2cf5MpJMbdWuyX2qFgB1HDthPAwBgUiVZsF6nkQsfB49UGFL4BfK7A4uvJqvsm71rYGxlAmBSacEBBKzIIr6y3RvPDJhoUDBtpncEkDDjINMSzSXx5G2xjosLvKUV+KYulc94mEzP7w3/uHtItY/bEBGR+XH3EHFkT0bXMdKCNM/ZoFUaTdykDoiIwZmX8ZdJE+3DDCL2cA6exYx3ITiHzt99GcDUcxHASzpvTfR5Y/nVQrn7p+k5JYUvP7rne+juGPCqg9wf9Jek+KLNwjPdb29svuSil09xyw0MygBvrEDvJtvBHRKU8yt9Jy8fK0fubwsUYs2fng6g4bzSgIdgBLjMLjlLvWqtBzJzW7z5KT7muGnkVSlZsGL5OWVFQdFLvEvH3CNPHUZEpPiCYHHPQPtMZwyrrxt164FDcXMgGDE4WhxV3jXIQ7ifaWHRZ/ED6eQ8G8JCvUxrqpDvWK50ogFmMb/kIcHos2BPLYnLyw4bMRqH3VFSqk08PRLMcBxMFOu/LfawhjDMAk53dqy3xQUwsTj1ILfbrK5yIbcz/yUp9+9G
[Content truncated due to length…]
From PCSX2 Blog via this RSS feed