Q3 2021 Progress Report

Authored By:  RedDevilus
Co-Authored By:  lightningterror
Published: 

Core Improvements #

#4436 Core/GS: Merge Last Plugin GSdx Into the Core By GovanifY

As we finally merge the last plugin namely the one responsible for the graphics settings (upscaling, blending, shaders) we can look back towards the past releases. Plugins were once a great source to decouple the core team and separate contributors so neither one wasn’t blocked for doing improvements, however, these plugin creators diminished over the years until 2016 had not many advancements:

There was pretty much only ongoing work for USBqemu-wheel by jackun and CLR-DEV9 by TheLastRar, not only that the core team had better replacements over time and the last plugin creators also became de facto more a core contributor and residing in the discord group. While we do lose some other notable plugins that are highly requested like Nuvee for LightGuns, OnePad legacy which handled controller remapping but these are only temporary drawbacks as the pros outweigh the cons as you don’t need to scour our website or GitHub for plugins and fewer clicks in the GUI.

It’s also one of the reasons why Q2 2021 was on the meager side, it blocked a lot of contributors potential work or even would invalidate other PRs.

DEV9 #

#4220 Add Internal DNS Server By TheLastRar

#4834 Auto Gateway Fix for WinPcap Backend By TheLastRar

In this quarter TheLastRar has added a fix for the gateway which is the route outside your local network as it will now work manually or automatically. There is also the new internal DNS server if you know what the hosts file on your computer is, it’s that. If you don’t know you can compare it to a telephone book where it has your contacts with their names (URL/Websites) and their telephone number (IP addresses / Location) this is available in your ini folder.

Counters #

#4621 Reset Timer Count Regardless of Interrupt Enable By F0bes

#4647 Correct H-Blank for 1080i Mode By refractionpcsx2

#4690 COP0 PCCR: Don’t Update Counters if Counting Is Disabled By refractionpcsx2

  • Gets rid of the spooky apparition in Grand Theft Auto 3 if you watch the intro.
  • This is kind of just enabling the old code which was kind of correct, but the old code didn’t ignore the time passed, so this also updates the last cycles.

RedDevilus: “I’ve recently bought GTA 3 second-hand and did my regular testing phase when I heard talks about a cloned character, it was not triggered on my screen because I skipped the intro FMV. So if anyone says we only fix certain games or big bugs, you can look again. It was a minor bug that was actually a regression. Meanwhile, before the fix, I had my own methods of solving the issue but refraction wasn’t happy with this brute-force approach”

#989262 Fix Scanline Count for Double Strike Modes By refractionpcsx2

MTVU #

#4503 Enable T-Bit to Work With MTVU By refractionpcsx2

#98b196 VU: Fix Address Masking in MTVU By refractionpcsx2

VU #

#4539 Improve Sync With VU Kickstart, Loosen Without Kickstart By refractionpcsx2

This tightens the VU Sync with the EE when Kickstart is enabled to fix some SPS in PAL Ratchet games, also loosened it slightly when Kickstart is disabled to improve the speed of games that don’t require it.

#4694 Optimise Entering VU JITs By refractionpcsx2

This is a pretty huge performance uplift on multiple games, it’s one of the hugest gains (with the exception being the frametimes tolerance PR) of the dev build cycle.

Keep in mind the Speed percentage for the title bar on top of the viewport (also referred to as the emulation window) are the emulator frames called VPS, or in full Vsync per second in essence, how much the emulator refreshes but not the game itself which would be the Internal Frames or real FPS. It could be 60 VPS and 60 FPS (like Final Fantasy X pause screen) or 60 VPS with 20 FPS or other combinations like SOCOM II menus are 33-34 FPS even though it reports 60 VPS so you can feel the differences.

Another side note is that for normal PC games the internal resolution = viewport but in PCSX2 case, it’s separated in Graphics Settings for upscaling and in General Settings where GS Window is, is the location of how big your viewport (window size) would be.

Here is an example of 3 tested games:

  • Ratchet: +12.36%
  • Tekken: +19.8%
  • My Street: +1.91%

#93e5f8 Mask Start Addresses By refractionpcsx2

#ddb300 Improve Sync During Interlock and Scratchpad VU Mem Writes By refractionpcsx2

#b919de Adjust Sync Timing for VU Kickstart - Fixes Crash Twinsanity By refractionpcsx2

#154ed5 Remove the Need to Pass VU Struct to XGKick Function By refractionpcsx2

microVU #

#4487 Consolidate I-Bit Hacks Into One Generic One By refractionpcsx2

#4703 Skip VU1 Instructions on VU0 By F0bes

#4719 Combine MVU0cacheReserve and MVU1cacheReserve By lightningterror

#4767 Replace XGKick Hack With Synced XGKick Option By refractionpcsx2

#8f82cd Avoid Half-Completed Program Loading Null Block By refractionpcsx2

#4668 Don’t Emit Add Reg, 0 in a Few Instructions #4668 By stenzek

GIF #

#4619 Reimplement GIF FIFO to Enable Only When It Is Needed By refractionpcsx2

VIF #

#4726 VU Int Improve By refractionpcsx2

Our interpreters were frankly inaccurate and slow, this Pull Request has improved the accuracy in turn fixing a lot of visuals on uncountable games. Most people won’t notice this change but it can help in comparing between the speedy recompilers if there is a bug hiding in plain sight.

#97bfe0 Only Enable Reverse FIFO Hack if VIF1 Is Still Active By refractionpcsx2

SPU2 #

#4530 Delete Broken/Unused Alsa Backend By Ziemas

#4574 Minor Cleanup By MrCK1

#4581 Remove NEVER_SKIP_VOICES By Ziemas

#4582 Remove Unused Variable By Mrlinkwii

#4591 Remove User Options for Disabling Reverb and De-Alias Filter By MrCK1

#4648 Remove Waveout Backend From Windows By Mrlinkwii

#4699 Adjust DMA Timings for IRQ’s and Small Packets By refractionpcsx2

#4700 Don’t Initialise Sound Buffer if It’s Not Open By refractionpcsx2

#4774 Disallow KeyOn Within 2T of Last KeyOn By refractionpcsx2

#4803 PortAudio: Remove DirectSound Backend By CookiePLMonster

Perhaps an oversight as we removed DirectSound module but it was still listed as a Host API for PortAudio, reason for removal is it tends to break audio samples to even refuse to work at all. In the future, it would be nice to have Cubeb as an audio module.

#06d600 Add Rogue BIOS Loop Point Which Megaman X7 Relies On By refractionpcsx2 Ziemas

USB #

#4571 Freeze Mode Enum for Keyboardmania By Ziemas

CDVD #

#4578 CHD: Fix Parent Search on Windows By Ziemas

#4645 Fix CdlReadS for PS1 Games With CDDA By kozarovv

#4646 Implement SCMD 0x27 By kozarovv

  • Implement SCMD 0x27 to allow PS1 games to boot on SCPH-50009 and DTL-H50009 bios.
  • According to krat0s, this command should return PS1 Disc Serial.
  • Disc Serial is later used by ps1drv itself to find matching game config.

Note: While DTL consoles are known to use region-free PS1 bios, SCPH-50009 uses Asia/Japan PS1 bios, and region lock applies here.

For the observant people if you have looked at our compatibility rating you may have noticed that we had 0 games for several months until we detected that the Chinese entries and BIOS were different in code and very few exist in our proximity. Now we are up to 2 entries (actually 1 but the forum compatibility needs an update).

#4702 Fix Up Pause and Some Status Behavior By refractionpcsx2

Correctly sets the CDVD Status after a Pause command and corrects how the CDVD Status is handled during N-Commands. Also adjusted game fixes as necessary for known fixed games. Some games refused to boot as PCSX2 ignored the correct way to handle them.

IPU #

#4526 IPU: Fix SETTH Threshold Masks By kozarovv

  • According to available sources, it’s 8:0 for transparency, and 24:16 for translucency.
  • Currently, PCSX2 is masking bits 8 and 24 making them always 0.

In essence, IPU handles FMV/cutscenes and this PR improves some issues with them.

Hype Time Quest: Before > After

#4613 IPU: Store Thresholds for Color Conversions in U16, Bump Savestate Version By kozarovv

Debuggers #

#4638 Debugger: Add Option to Display VU0F Registers as Floats By F0bes

#4644 Debugger: Fix Vmulai and Vmaddai Disassembly By JayFoxRox

#4671 Debugger: Purge 64 / 32 Bit Register View Options By F0bes

Remove the option to view > 32 bit registers as 32 bit or 64 bit and instead display the entire register value.

#4741 Debugger: CtrlRegisterList: Fix Warning and Screw Up By F0bes

Misc core #

#4742 Emitter: Use 64-Bit Operations on X64 By TellowKrinkle

#4636 HostFS: Add Remove File Functionality By fjtrujy

#4642 PGIF: Code Refactoring/Cleanup By kozarovv

Playing PS1 games has been a passion for some but we don’t recommend it in its current state. However, we made some big improvements but it’s better to use a dedicated PS1 emulator like DuckStation.

Here are some example comparisons of the improvements we witnessed:

Resident Evil: Before > After

Before
After

Street Fighter EX Plus Alpha: Before > After

Before
After

#4676 IOPBios: Fix OOB Read When IRQ Line Is Invalid By F0bes

#4739 EE JIT: Implement SDR/SDL, LDR/LDL Instructions By refractionpcsx2

This has a very huge performance lift, though this is the best-case scenario if it uses these instructions.So don’t expect games to reflect such large performance increases like these charts would initially suggest.

Above were refraction’s results from the homebrew ELF, located here: SDL/SDR LDL/LDR Homebrew ELF

Below are the results of RedDevilus on the same homebrew which taxed the registers.

#627f21 Core: Reset Game CRC When Rebooting. Avoids Previous Games Patches Being Loaded By refractionpcsx2

An oddity was discovered where patches meant for one game were accidentally injected into another which effectively broke games. Oops!

#4667 IR5900: Use a Signed Multiply for MULT1 Const Prop By stenzek

#4748 R5900: Fix LWL Did Not Sign Extending in Interpreter By stenzek

#4548 IOP Interpreter: Warn on Branches to Zero By F0bes

#4523 Misc: Replace ATL With WIL By CookiePLMonster

While this may seem an innocent library API change (how it interprets everything from instructions to clicks)

Definition of WIL: The Windows Implementation Libraries (WIL) is a header-only C++ library created to make life easier for developers on Windows through readable type-safe C++ interfaces for common Windows coding patterns.

Silent: ‘I used their CoInitializeEx that explodes loudly on failure, so regressions = quietly ignored errors in the code started showing up spectacularlyATL->WIL refactor itself isn’t that interesting, if anything those regressions wereas they were issues that were always around but quietly ignored instead of manifesting themselves in an obvious way.’

So as you can refer from Silent’s statement, it led to a domino effect in that lots of things seemed to break from audio to wherever, as seems consistent with PCSX2 how did this even work in the first place to then see old bugs float to the surface hiding in wait. Every day PCSX2 becomes less hacky and has a more sane codebase. You can imagine the chaos and the confusion it brought to many when trying to comprehend it all not only in terms of the PS2 but how PCSX2 has implemented it.

GS Improvements #

Misc GS #

#4508 GS-Hw: Enable Pabe Bit Only When Sw Blending Is Enabled By lightningterror

#4615 GS: Manage Draw Rectangle in GS Instead of Wx By stenzek

#4632 GS-D3d11: Cleanup Fxaa and External Shader By lightningterror

#4633 GS-D3d11: Minor Blend Changes By lightningterror

#4664 GS-GUI: Add 7x Multiplier By RedDevilus

#4682 GS-GUI: Enable Software Edge Anti-Aliasing by Default By RedDevilus

This option helps several games on Software renderer but it won’t help on a Hardware Renderer as it’s not implemented at this time. Some examples where AA is useful to fix issues:

Final Fantasy X: Before > After - #983

Look at the weird line on the tree (bottom left) and the black triangle that is right of Tidus.

Before
After

Final Fantasy X: Before > After - #3341

Look at the blue triangle below Tidus.

Before
After

Doko Demo Issho - Toro to Ippai, Toro to Kyuujitsu: Before > After - #4674

Look at the eyes of these weird cat characters.

Before
After

Football 2002: Before > After

Look at the number 4 on the orange shirt.

Before
After

Syphon Filter - Dark Mirror: Before > After

Look at the shadows of the character, a harder one to see than the other comparisons.

Before
After

These are just a few examples, of course there are more.

#4706 GS: Update Tooltip to Remove Reference to DirectX By Mrlinkwii

#4789 GS-GUI: Add Tooltip for Dithering By RedDevilus

#4811 GS: Test for Th for Tex0 Flush By tadanokojin

Misc Improvements #

GUI #

#4512 Re-Order Config Settings By RedDevilus

It will look closer to the layout of 1.6 stable release, help with muscle memory and visual cues.

#4532 Set Missing Icons and Update Titles By Florin9doi

#4620 Rehaul BIOS / Folder Selector By RedDevilus

BIOS and folder tabs are now together in General Settings (Used to be called Emulation Settings) This will make it easier to find settings with fewer clicks, although there is a height issue that forces you to scroll for the time being.

#4640 AppMain: Fix No$ Symbol Loading for Elfs By F0bes

#4663 Misc: Fix Lastpath Updating When Using the –Elf Cmdline Arg By F0bes

#4675 WX: Make Position Validation Multi-Monitor Aware By tadanokojin

#4750 Config: Normalize Limiter Values Before Saving By tadanokojin

#4756 Stdio Console on Mac By tellowkrinkle

#4791 Select a Bios by Default By F0bes

This will automatically click on the first BIOS in the list if you haven’t selected one, affecting First-time Wizard and in General Settings. It’s nice for the User Experience and it hopefully grows on you when using dev builds.

#4798 Fix Crash on Assertion in Newer Wx By tellowkrinkle

#4838 Make ‘Synchronized MTGS’ UI Settings Exclusive to Debug/Devel By Mrlinkwii

The setting below has been quite the staple in releases and it has actually no business in here as its only purpose is debug and not the greatest at that.

#4844 Move Vu Overflow Flag Checks to a Gamefix + Reorganise Panel By refractionpcsx2

GitHub/CI #

#4509 Update PR Labelers to Match GS Merge By lightningterror

#4522 Split AVX2 and Non-AVX2 Windows Builds By xTVaser

At the start of this report was the last GS merge, it has produced one minor annoyance. We couldn’t keep all 3 GS plugins, we removed SSE2 plugin (which frankly was bad anyway) then there was SSE4 and AVX2.

What is PCSX2-AVX2?

PCSX2 uses SIMD instructions to process graphics. The following are the SIMD instruction sets PCSX2 supports:

  • AVX2: Newest and fastest. Recommended for CPUs released in the last 8-10 years.
  • SSE4: Older, still fast. Recommended for older CPUs which do not support AVX2.
  • SSE2: Oldest, and slowest. Recommended only if your CPU is too old for SSE4.

Which one do I pick?

  • 1.6.0: PCSX2 will choose the appropriate plugin for you automatically.
  • 1.7.0: Try pcsx2-avx2.exe. If the program fails to start, then use pcsx2.exe.

So in essence, if you have a 4th gen intel or higher with exception the Pentiums you are probably fine or AMD Ryzen series. In the future this will turn back into a single exe where it’s default SSE4 with a checker to enable AVX2 if you support it.

#4529 Remove Dashes From Build Names By tellowkrinkle

#4840 Bump Macos Version to 11 By lightningterror

#4657 GitHub: Switch to New Issue Forms By xTVaser

Other misc #

#4501 MacOS: Fix Async File Reader Error Handling By tellowkrinkle

#4527 KeyboardQueue: Remove a Windows-Specific Critsec By CookiePLMonster

#4554 3rdparty: Add Webpd Project By tadanokojin

#4566 Misc: Don’t Update Homebrew When Not Necessary By tellowkrinkle

#4570 Dependencies: Update GHC 1.5.4 to 1.5.8 By RedDevilus

#4592 Dependencies: Update OpenGL Dependencies By RedDevilus

#4651 Misc: Add StartupWMClass to Desktop File By GiantEnemyCrab

#4670 Add Linux Distro Information to Program Log By Mrlinkwii

#4701 App: Add Windows Exe Version Information By refractionpcsx2

GameDB Improvements #

As always there are many GameDB changes per quarter, since there are too many to even list we will just link the date range for merged pull requests, not counting directly pushed commits to master. List can be found at GameDB Q3 2021 .

#4556 Noteworthy changes include patches for unplayable games which makes the games playable from this thread. RedDevilus took the patches and opened a pull request adding the patches to the GameDB.

Thank you all, see you in our next coverage, cheers.

Metadata #

Q3 2021:
(dev1300 to dev1837) (2021-07-01 - 2021-09-30)