Q4 2021 Progress Report
Looks at the date and notices something. Yes, my dear readers (or glancers) Q1 2022 should've been published 2 months ago and this is the predecessor to that. Sorry for the delay but there have been several reasons to this almost half year delay. Some of those reasons being the process of making the progress reports:
- Publish on private forum thread who has access
- Needing it to be HTML without a working preview
- Having multiple middlemen to check, update and publish on preview site
- Finally go mad at how inefficient the process was that 80% of the time was spent on making sure that all the Pull Requests are listed and pointed correctly instead of actual writing
Ok, moving on to better news is the the fantastic work from everybody involved in making sure that PCSX2 doesn't cave into a lesser program. In case you didn't notice we have a new site that brings PCSX2 from 2002 to 2022 as PCSX2 is reborn, and besides, seeing that amazing animation on the homepage is something that you have to decide for yourself on how you feel about it.
So all around we will improve all aspects of the emulator and have better progress reports that cater to the technical, light-hearted or the changelog oriented people. There are also a ton of pictures in this edition of the progress report and I'm sure that quite a few of you readers are waiting on the new look of the Qt GUI, but that will still take a while to see in fruition to the public.
Here is a glimpse of what to expect:
Happy Reading!
Core Improvements
CDVD
CDVD: Implement correct SpindleCtrl handling
Fixes some more videos not playing like Digital Devil Saga and fixes texture issues on Shadowman.
CDVD: Fix possible uncaught exception in CheckDiskTypeFS
CDVD: Implement Disc Swapping
Disc-Swapping has always been a highly requested feature for multi-disc games which may ask you to swap to the second disc half-way through the game.
Others that use it as more as an addendum to unlocking more items in games such as Dynasty Warriors 5. Another game like Alter Echo which requests to put the original disc back when you eject the game even though it has only 1 disc. Surprisingly the SingStar series might handle this the best as it can swap songs via disc-swapping and sure there is a button to do disc-swapping but it correctly handles swapping without it.
As you see, there are multiple behaviors possible when you are using the disc-swapping functionality (e.g. ejecting games) ranging from quite a few games being fine and nothing happening until it requires new data and thus likely crash to giving you error messages or simply freezing.
CDVD: Time reads by sectors per second instead of bytes + Some rotational latency
Another refinement on how the disc emulation handles reading and latencies which again improves the timing which the PS2 so desires.
CDVD: Simulate 1 sector read ahead
Queues 1 sector from a future read as ready which fixes Star Ocean 3 stuttering and Winning Eleven 8 crashing.
CDVD: Reset VM on sceCdPowerOff writes
Instead of forcefully ‘pulling the cord’ when you reset or press the power button on a real console once, it will send a signal to reset. So it acts more like how the console worked.
CDVD: Buffer up to 16 sectors
Buffers up to 16 sectors on a DVD from its current position.
Documentation from developers shows that the DVD drive will always read 16 sectors as a minimum, so this means if it reads in advance, it can buffer up a bunch of sectors to be read off quickly by the DMA.
CDVD: set the correct RTC year when input recording
Changes how the date is handled for input recording as some games like Metal Gear Solid 3 are sensitive about the date for time-based events.
CDVD: Adjust DMA timing based on PS1 timings.
The DMA timing calculations were changed to be based on the PS1 DMA timings, but with the difference in bus widths considered, leading to closer DMA timings for CDVD which in turn fixed SpongeBob Lights, Camera, Pants.
CDVD: Fix some read timing logic
Improves the timing of read times when buffering sectors but also corrects the status of the CDVD when running certain commands.
CDVD: Some Error handling, Status+Ready Flag changes and fix CdStop
Corrects some of the statuses and IRQ reasons available to the CDVD, correcting the status of the CDVD controller in certain games. In turn it fixes certain games that were spinning eternally in a black screen or seem to just freeze on the spot like Spyro, Aberenbou Princes, Evergrace and more.
CDVD: Check file actually opened before proceeding
VU
COP2: Simplify reg allocation
Fix unparenthesized macro input
microVU: Use uncached reg when clamping for FMAC instructions
This was causing broken lighting in 64-bit mode, due to the larger number of registers available. Ft gets loaded and cached, but then the FMAC instructions clamp it in all modes except none, which disturbs the cached value (mismatched with the VU state). Jak happens to rely on this value not being clamped, so it was "okay" in 8-register mode because it had to be reloaded.
Savestates: Add missing things from Savestates
Makes savestates more robust by giving more information so as to lessen the chance of breaking the game.
microVU: Preserve XGKick cycles in delay slot
Preserve XGKick cycles calculated when there is a memory write in a delay slot, also added handling for xgkick sync on single instructions.
Previously there was no handling on single instructions (evil blocks) so that's sorted. The other problem was if there was a mem write in a branch delay slot, it would add the XGkick cycles it needed to run, then erase them! causing the sync to go out, this resolves it.
SPU2
SPU: Fix videos in Stolen
SPU2: Add Cubeb backend, remove Portaudio and SDL2 backends
The current stable (1.6 as of writing) had multiple back-ends namely Xaudio2, DirectSound, PortAudio, WaveOut. DirectSound was being a buggy mess to maintain, WaveOut wasn't much better, PortAudio was fine and Xaudio2 was de facto standard on the Windows side. Now Cubeb replaces PortAudio as its successor and keep Xaudio2 as a back-up. Keep in mind in Cubeb the latency slider states 100ms in the GUI but isn't exactly true as it automatically uses a very low latency automatically based on your system:
Best Case:
(Cubeb) Minimum latency: 10.00 ms (480 audio frames)
Worst Case:
(Cubeb) Minimum latency: 25.00 ms (1200 audio frames)
If it's above 25.00 ms you either have a computer issue like corrupt drivers or your computer is far too weak.
Xaudio2 can't handle the same low latency that Cubeb has without bad skipping and warping even on better systems. I hope you guys like the sound. How time-stretching actually works is that you see the first video frame and the sound comes after the targeted sound latency, which for years was defaulted to 0.1 seconds of latency.
Rename ConfigSoundtouch.cpp to ConfigSoundTouch.cpp
PAD
GUI(linux): Abort 'set all buttons' & fixed window size
Create a shared pad header, get rid of the originals, and do some cleanup.
USB
USB: Gametrak/RealPlay
This Pull Request made the last non-working game work and looks more like a current Linus Tech Videos about VR with all those wires than a PS2 accessory. I'll stick to my Black Nintendo Wii instead of this seemingly weird copy-cat.
USB: Sony DPP-MP1 printer emulation
Most users won't see any usage with this and that is fine but the goal of emulating the endless USB and PAD devices do scare me, here is a small subset of still needing to be emulated: https://github.com/PCSX2/pcsx2/issues/4763
DEV9
Convert DEV9 config dialog to wxWidgets
DEV9: Fix Windows config saving/loading
DEV9: DNS Logger Crash fix
DEV9: Don't shadow return value of GetAdaptersAddresses (Pcap)
Shadowing dwStatus for the return value of GetAdaptersAddresses will prevent the return value of second call from being inspected in the following if statement.
If the user had a large amount of network adapters, this would prevent the code from getting the adapter information of a the selected pcap adaptor.
The equivalent TAP adapter code is already correct.
DEV9: Enable pcap non-blocking
IPU
IPU: Overhaul DMA transfers
Changes how DMA Transfers are handled for example some games like them to be in a specific order.
Fixes https://github.com/PCSX2/pcsx2/issues/5168 (Top Trumps).
Fixes https://github.com/PCSX2/pcsx2/issues/4063 (Phase Paradox). Improves the moving billboard quality in Test Drive (Master has corruption).
Fixes video hang in Eggo Mania/Egg Mania - Eggstreme Madness (patch no longer required).
Fixes Smackdown Shut Your Mouth Titantrons.
Fixes Gladiator - Sword of Vengeance videos (patch no longer required) Partial https://github.com/PCSX2/pcsx2/issues/3489.
Fixes https://github.com/PCSX2/pcsx2/issues/4360 (Flipnic UFO mission hang).
Debugger
Debugger: Fix Goto in Disasm option for memory view
Debugger: Separate symbol maps for EE and IOP
Adds a new member function to the DebugInterface for retrieving the symbol map for the CPU and uses this where relevant instead of accessing the map directly.
Previously there was only one symbol map, which doesn't make a whole lot of sense. This prepares for future work on IOP symbol detection.
Debugger: Support multi-line assembling
When multiple lines of opcodes are selected, the 'Assemble Opcode(s)' context menu and M-key shortcut will in turn reassemble all of those opcodes.
Debugger: Initial memory search implementation
Now you can finally go into a search for specific memory address or string instead of scrolling just like in cheat engine.
- I think Fobes needs a hug for this secretive message.
Debugger: Make the register list DPI aware (Windows)
Fixes the debugger view for registers when the system DPI is not the default 100%.
Debugger: Reset breakpoint skip on savestate load
Debugger: Fix breakpoint edit window on linux
Debugger: Allow access to all of 0xBXXXXXXX
Not sure why certain memory was blocked from being modified, this will alleviate all memory restrictions.
Debugger: Make memory dialog transparent
Debugger: Format search hits with proper specifier
Make sure certain text doesn't hard-crash the search. (Print size_t with %zu instead of %d)
Input Recording
input-rec: Use a constant RTC for power-on recordings
Gives a specific date for input recording (speedrunning).
Miscellanous Core
Config: Fix folder memory cards initial load
Folder memory cards weren't recognized as a memory card being plugged-in unless you opened the config dialog.
CI: Retain Workflow Artifacts permanently via Github Releases
This pull request has brought permanent downloadable (pre)releases on GitHub itself instead of just using Orphis which will not make everything more central but makes it easier to tag commits that are made outside of a pull request and just force-pushed the changes to the project. stares at certain people that have been naughty.
If you want to see more details, Vaser has written an essay-like detail on it - https://github.com/PCSX2/pcsx2/pull/4914
So it will pre-compile working versions of the nightlies/dev and future stable versions on GitHub forever instead of only temporary on GitHub or what was used in the past being AppVeyor (nickname: Slowveyor) which took easily 10-20 minutes per build.
The nice thing about actions is that it can do multiple builds in parallel for free and can also publish these now permanent builds which are again linked on pcsx2.net as GitHub requires you to have an account in addition to being logged in so you have enough options.
GS Improvements
GS
GS: Merge assembly files in GS
Convert GS Settings dialog to use wxwidgets
GSVertexTrace::FindMinMax improvements
This PR contains the following changes:
- Prevents clang from optimizing out our denormal-removal shuffles (10x faster than before for people who compile with clang!)
- Run divides on four elements at a time instead of two elements and two useless numbers
- Remove inaccurate stq
- With the above division improvements, on processors with partially-pipelined division (Ivy Bridge and later, Bulldozer and later), accurate stq is actually faster (according to both IACA of inaccurate vs accurate and LLVM MCA). On older CPUs expect performance to be about 2/3 of the old algorithm before taking into account improvements from not double-checking vertices.
- There seems to be a check of accurate_stq when the OGL backend is deciding whether to use geometry shaders to process sprites.
In the end, ignoring clang issues, GSVertexTrace::FindMinMax goes from taking about 3% of MTGS thread runtime to 1.5% on my computer. (Most of the time was spent doing OpenGL things so if you have a more efficient OpenGL driver it might make more of a difference for you)
GS-hw: fix Burnout games black sky.
Burnout games weren't emulated correctly due to the texture cache being the biggest pain in the GS side, which you can avoid by switching to the Software renderer and then switching to HW. The game downloaded the texture and then modified it to finally draw it on the CPU side.
Now no more shenanigans in having to switch or ignore the sky issue, there is another game that has a similar issue a shooter called 'Black' (A recurring theme that PS2 game title names fit with their badly emulated issues). Black hasn't been fixed yet, perhaps in the future.
Spin before sleeping threads to reduce thread sleeps/wakes
"Drawing triangles is super easy to parallelize! GPUs are super parallel, and it should be nice and easy to spread a software renderer across lots of CPU cores!" is probably what most people think. And this is generally true, if you're trying to software render for a normal PC graphics API like OpenGL. But we're emulating a GS. That's okay though, it's still a just bunch of triangles, right? PCSX2 has a software renderer, and it lets you set the number of cores it used, so we can see how well it scales. And if you messed with that number, you'd generally find that going above 3 worker threads didn't help much. In some games, like Hitman Blood Money, you'd get the best performance with 0 worker threads. What?
The culprit is thread synchronization. But why would you need to synchronize worker threads when drawing a bunch of triangles? It turns out some PS2 games like to use the result of a previous draw as the texture for another draw. Whenever a game does this, one thread could need pixels drawn on another thread, so we have to sync them all up. PC games do this too, but they'll usually only do this a few times per frame, rendering an entire image before reading it. When processing effects, PS2 games like to do this on small parts of images at a time, resulting in huge numbers of thread synchronizations. Ratchet & Clank, which previously saw speed start to die off at around 3 worker threads, requires about 500 synchronizations to draw a single frame. Hitman Blood Money, whose title screen's FPS previously ran in the single digits, sees a whopping 10,000 synchronizations in a single frame, or 600,000 per second! Ouch!
So what went into one of these synchronizations? Before this PR, the control thread would see the need for synchronization, go to the first worker thread, see that it was still running, and go to sleep. When that worker thread finished its work, it would wake up the control thread, which would then go through the rest of the worker threads, checking that they were finished as well. While this was happening, the worker threads would each see that they have no work to do, and go to sleep themselves. Then, the control thread would decode the image they just rendered into the format worker threads can read, at which point it would submit the next piece of work for the worker threads to process, and go through and wake all the worker threads back up.
Sleeping and waking threads is pretty fast, but it's not that fast. One round trip seems to take around 5-10 microseconds on most computers. Which seems pretty fast, until you compare that to the average time one of the threads spends rendering a pixel: 5-10 nanoseconds. So in the time all these threads spent going to sleep and waking up, a single thread could have rendered 1000 pixels! Another way to look at it is how much time Hitman Blood Money spends watching its threads sleep and wake rendering a frame: 50-100ms. That's like 10-20 fps, and we haven't even rendered anything!
So how do we solve this? Well you could say "just sync less", and we are working on that (some of the more recent autoflush PRs have helped here), but that's not an especially easy solution. The easy solution is "just don't go to sleep". In the new implementation, threads keep spinning, staring at the status variable, for up to 50 microseconds before going to sleep. Maybe not the best use of CPU time, but it brings the time for one round trip communication from 5-10 microseconds down to just 0.2 microseconds, or 200 nanoseconds, an over 10x improvement. With this, using multiple threads manages to not be slower than 0 threads on even Hitman Blood Money, though it isn't much faster either. For less sync-intensive games, the falloff point for increasing threads has increased and is now usually in the 4-5 thread area (assuming you have that many cores on your CPU), bringing PAL R&C3's FPS from having dips into the mid 30s to a smooth locked 50 on a Ryzen 5 5600X.
Replace cached GSOffset with live calculations
The way the PS2's GS stores images in memory is a bit special. If you took a piece of memory and just read it like normal, your image would look like a scrambled mess. The GS actually has a different scrambling for each of its image formats, often referred to as swizzles, which allowed devs to do more effects on the shader-free GS. As a result, PCSX2 has to deal with a lot of different possible swizzles.
Calculating swizzled offsets for every pixel of an image every time you read it would be pretty slow, so GSOffset was created to work around this. A GSOffset stored a list of memory offsets from the top left pixel in an image to each pixel on the left edge, and a list of offsets from a pixel on the left edge to each pixel not on the left edge. This took up 16kb, but it allowed PCSX2 to go from some pixel coordinates to the memory address of that pixel with two table lookups and two additions. Since a GSOffset was only valid for a specific combination of texture format, texture size, and texture starting address, a new GSOffset was generated for each unique combination of those a game used.
For most games, this worked fine. But a few games, including MLB Power Pros, Remote Control Dandy SF, and Ultimate Spider-man, liked to throw garbage data at the GS register that describes the information for the current texture. For for each piece of garbage data, PCSX2 would create a new 16kb GSOffset, filling up a 32-bit application's 4GB address space and running out of memory in just 40 seconds. (Sure, 64-bit has access to more memory, but if it filled up 4GB in 40 seconds, even a computer with 64GB of ram wouldn't last long...) So why not just clean up unused GSOffsets and free them? GSOffset was clearly not made with this in mind. It didn't provide anything to help with actually using its data, so any code that wanted to use it had to do all the calculations manually. Some code pulled pointers from the GSOffset and threw them all over the place. Cleaning all that up for liveness tracking would have been a pain, and the lack of nice methods for using its data was also annoying, so we instead opted for replacing GSOffset entirely with a new class that didn't require any runtime allocations (and therefore had nothing to track).
The new GSOffset takes advantage of the fact that the table of offsets from a pixel on the left edge to any other pixel doesn't actually depend on the texture size or starting address, only on the texture format. One of these tables is created for each of the PS2's supported texture formats by the compiler, which is possible because there's a fairly small number of them. The rest of the calculations (e.g. the left edge calculation) are done whenever they're needed, taking advantage of the fact that images are usually read left to right, top to bottom, so while a 512x512 texture has about 260 thousand pixels, reading it using the GSOffset would only run the slightly slower left edge pixel calculation 512 times. In the end, this slightly slower calculation was offset by the reduction in time it took to look up and create GSOffsets, resulting in no performance regression from this change.
GS: Simulate scan mask (fix transparency in MGS2 & MGS3)
For what feels like forever, transparency didn't work correctly for Metal Gear Solid 3 and other games such as Gran Turismo 4.
Improved stats printout from sw renderer
If you want to printout your stats from the SW renderer, it doesn't look as readable as it was badly aligned and has no header.
GS-hw: Don't write clamped depth test value to depth buffer when ZMSK is enabled.
Fixes broken shadows from Kingdom Hearts Re-Chain which produced lines.
GS: Cleanup ini ranges for some values.
GS: Fix OSD, Shade Boost slider values not showing.
gs-tc: propagate texture shuffle format on readback
Due to the way some effects work on the GS and how our Texture Cache handles it, sometimes the wrong texture format can be remembered, which will cause it to get stored in an incorrect memory format when it is saved back to the real GS memory for downloading to the EE core. This PR corrected this behaviour and properly fixes the flashlight in the Silent Hill series:
GS: Revert be7e1163b4f7e3fe19876462fb26cd082ffb3ab4
This PR reverts an older commit from 2013 (1.2 era) which had wrong assumptions on texture region repeating and how the clamping is handled along with it. Multiple games were affected on the visual side or even performance-side.
Test Drive Limited (Blue roads):
Kaan Barbarian Blade (Black Character Model):
The Chronicles of Narnia - The Lion, The Witch and The Wardrobe (Heat Haze Effect of the fire):
GS: Use stream buffer for vertices/indices/uniforms
This will certainly help AMD GPUs on Windows but it does help NVIDIA GPU users too as the default behaviour was to stall (essentially wait and stop for new instructions) which caused bad performance.
These charts below lists 3 different systems that will give you an easier way to tell how much it could help:
GS: gsstate (the old gsdx one) cleanup
GS: Use custom allocator for SW renderer
This new behavior improves the software renderer quite drastically in a good way and handles it more specifically in certain situations. I would even state that the software renderer has never been this fast even compared to the older stable versions as I always tried to play True Crime NYC and never got full speed in the software renderer and now it's handling it with ease.
GS: Further state cleanup + fixes for older dump compatibility
GS: Let draw happen even if invalid, log invalid draws
In some scenarios, the ZBUF or FRAME values may get set to invalid data, but on draws where they are not getting used. Before this would completely ignore the draw which caused problems, however this lets it continue since the data it needs is valid.
GS: Fix up CLUT offset handling in 32bit I8 mode
This pull request fixes several games with the wrong colors, which depended on the CLUT (Color Look-up table) which basically is a value corresponding to a color palette an example being the RGB values (255, 0, 0) which means full red color, for example. The issue arose around the fact that the 256 colour palette is split in to 16 chunks of 16 colours and it can update it at any one of these chunks, unfortunately memory writes only really worked if it was updated on either chunks 0, 3, 7, 11 or 15, others would break down. Further to this the behaviour when it was asked to update the end of the buffer only was incorrect (The dirt in GTA: San Andreas relied on this!), which has now been corrected.
A few examples but not limited to:
Miscellaneous fixes for macOS
GS-ogl: Remove device, driver checks in GLLoader.
GS:SW: Fix fog on x64 avx2
Fixes a bug where 'f' would be incorrect for the blue channel when fogging was enabled on the rendering of a sprite on avx2 x64.
Like you see this purple grass on Hitman which everybody should agree isn't realistic and is a bug:
GS: Only reload Auto MIPs on TEX base change
The handling of MTBA was previously not handled very well and was somewhat of a mystery, we have since discovered the correct behaviour for when it can be triggered through restrictions in texture sizes and formats, which this PR attempted to correct, enough to fix Parappa The Rapper 2 and Ape Escape 3.
Actually this pull request is fine, but we discovered later is that the formula for updating the MIP addresses was incorrect, but also the pending draws needed to be flushed if these new MIPMAP values were different. It does remain that hardware mode has difficulty handling mip-maps.
GS: Fix Half Pixel Offset and Half Screen Fix config swap
GS SW: Handle flat prims without float conversion
Large floats are not handled very well in the software renderer due to the range being limited by signed integers but also some precision is lost by being single floats which only have a precision of 24bits. This PR makes it so flat triangles are treated like sprites and the Z values are passed as integer so no precision is lost, which fixes games which use flat triangles to draw UI/2D screens.
GS-gui: Change blending option from None to Minimum.
GS/OpenGL: Use shader+draw for CopyRectConv
GS: Improve FixedTEX0 accuracy
The calculation of how to handle texture sizes wasn't perfect and would cause graphical issues when upscaling such as Final Fantasy X.
GS-hw: Adjust/minor optimization on SW blend shader a bit
GS-hw: Improve how we handle AA1 draws
In the last progress report (Q3 2021) there have been improvements to how Edge Anti-Aliasing works for the software renderer (lines and triangles type), this time the hardware renderer has also been improved for several games such as Doko Demo Issho series, FIFA 2002 and other unknown games.
However it has only been fixed on the lines type but not the triangles type which is used a ton for a game like Final Fantasy X. Hopefully in the future we can get feature parity with the software renderer which handles both types correctly and while the issue on hardware renderer is about the same it will be look worse in the severity factor.
GS-d3d11: Properly set afix in EmulateBlending.
GS/OpenGL: Use CreateRenderTarget() for temp HDR target
GS-wx: Fix some gui interaction.
GS: Unify HW texture caches
GS-glsl/fx: Split color clamp/wrap in it's own function.
GS Debugger: Fix Length of dump.
GS-hw: Sample depth on green channel
GS-hw: Try to use a mix of HW/SW blending in more situations.
This will improve the blending behavior on default settings. Blending affects many things such as the lighting, shadows and more.
GS-ogl: Optimize fragment shader uniform buffer.
GS-hw: Optimize pabe (per pixel alpha blending)
GS: Replace separate HW renderers with single shared renderer
In the past all the hardware renderers like OpenGL, Direct3D11 all had their own code locations which causes a lot of duplicated code and if someone made an improvement to one they shouldn't forget improving the other hardware renderers which causes code debt if they do.
Now they all will share more code with each other.
Fix broken resources
GS: Check CLUT dirty write on vertex kick
GS: Fix looping over pages of textures with massive strides
GS/OpenGL: Add a shader/program cache
GS: Move afix check to high blend level
GS-hw: Fix recent alpha max check.
GS: Unify constant buffers between renderers
GS: Add missing override specifier to a few files
GS-hw: Extend Blend mix to work when alpha is higher than 1.
GS-hw: Mirror anisotropic filtering behavior on Direct3D11 like OpenGL, and allow it to run on Nearest texture filtering
Misc Improvements
GUI
Allow relative elf file paths on command line
Instead of the absolute path C:/User/Documents/PCSX2/ELF/test.elf, you can do things like ELF/test.elf instead.
IPC: rename to pine
IPC is a generic name for this function so PINE was chosen as it's replacement. Especially when it's already useful for RPCS3 and other potentially other emulators or programs.
Savestates: Small refactoring
In the times always knoweth, there lies an evil power known as entropy but one angry kot has arisen to the challenge to bring order to chaos. Okay, maybe not as epic as the first sentence makes you believe but CK1 made sure to automatically bring a subfolder per-game instead of one blob (root) of savestates inside the 'sstates' folder.
What does it solve you wonder? Well, my dear reader if you do have several games and you make a lot of savestates in multiple slots (Don't look at me) you will gain the ability to have an easier overview which ironically kinda mimics how a real memcard structure works. If you want to compare it, just save normally on your memcard save and make sure it's a folder memcard to see the differences and similarities.
WX: Fix GS hotkeys losing values after reboot
Makes sure that the hotkeys still retain their function after rebooting.
Fix memory card saving and trace log setting loading/saving
GUI: remove presets 4,5,6
Preset 4,5,6 (Preset 1 is bad too to be fair) were removed as they only brought specific improvements for specific hardware and it wasn't good in most cases anyway as it just did some random EE cyclerate and cycleskip.
PCSX2 shouldn't obfuscate with mostly useless settings that will only appeal a minority.
Personally there should be only 3 modes for people:
- Preset 2 which are the default settings (good for weaker computers that don't have enough cores)
- Preset 3 which is just Preset 2 + MTVU (it is free performance for the taking for good hardware)
- Custom global and custom per-game settings (any other situation that does not benefit the other two above ones)
GUI : remove EE Cycle Skipping 3
Since all these major timing changes, this isn't really useful and broke more often than not. More often than not downclocking the EE Cyclerate will give better results for the more lower-end hardware.
Though even in it's current state Cycleskip 1 and 2 will have decent results for Shadow of The Collosus which didn't run full speed on the 'PlayStation 2'.
Add the current profile to the status bar.
The main window will now say what preset you are using.
GS Debugger: Show \
Replace GSWnd with GL context wrappers, remove pDsp
This is preparation part 2 to bring in the new Qt GUI.
Core: Few more warnings fixup.
Add \
If you moved or renamed your ISOs, you either had to nuke the recently played list, ignore it or set it back how it was before. More granular control on how you want to handle latest games played.
PCSX2-GUI: Fix GUI inconsistencies
While not as exciting as a new fix for a game, increased performance on better compatibility this will make the text more aligned with the rest of the windows. Though it did have a meaningful change that the maximum audio latency is now 200 instead of 750.
The default is still 100 ms (0.1 seconds of audio latency) on Xaudio2 but technically lower with Cubeb if you read that section and if you really need 750 ms (0.75 seconds of audio latency) then it's unlikely you will have a good experience on PCSX2. You may want to consider upgrading your computer in that case.
Can you spot the differences?
WX: Fix pxExplore
on macOS
GUI: Bring back F6 string (Aspect Ratio)
Doesn't need much explaining as it was gone by accident to show the keybinding for aspect ratio. Emulation development can have it fair share of regressions.
Rebase more de-wx-ifying from last month
GSDumpDialog: Cache length instead of querying every packet
GameDB
GameDB: Typo Cleanup
GameDB :add 'SingStar ABBA' entry
GameDB: Add VU clamping to Monster Rancher 3
GameDB: Add missing entry
GameDB: Add 'VUKickstart' to 'Maken Shao' games
GameDB: Add and fix SingStar Entries
GameDB: Add and fix Power Pros series
GameDB: Add EE clamping to 'Shadow of Zorro' and 'Evil Twin - Cyprien's Chronicles'
GameDB: Add nearest rounding to 'Hitman - Contracts' and various fixes
GameDB: Add 'GIFFIFOHack' to 'Gunfighter 2 - Legend of Jesse James'
GameDB: Add EE-Rounding and VU-Rounding to various entries
GameDB : Add various fixes for various games and remove not needed patches
GameDB : Add fixes for various games
Gamedb: Remove the patch for Virtua Fighter 4
GameDB: Purge patches for 'Knockout Kings 2002'
GameDB: Fix Fuuraiki 2 patch
GameDB: Add fixes for 'Shadow Man - 2econd Coming' and 'Ghosthunter' games.
GameDB: Add 'VIFFIFOHack' to 'Men in Black II: Alien Escape'
GameDB: Add 'VUKickstartHack' to 'Crash Twinsanity'
GameDB: Add patches to the 'K-1 World' series games add EE clamping full to 'D1 Professional Drift Grand Prix Series'
GameDB: Add EEclamping full to 'Shinobido Takumi'
GameDB: Add VU clamping to 'MVP Baseball 2003'
GameDB: Add EEtiminghack to 'MGS2' and change VU- and EE-rounding for 'Primal' and add missing entries
GameDB: Add patches to the 'Netsu Chu!' series and 'Samurai 7' series
GameDB: Add EE-clamping to 'Chou Saisoku! Zokusha King B.U.'
GameDB: Add EE-clamping to 'Dark cloud 2'
GameDB: Add patches to 2k games
Add \
GameDB: Add more 2k games patches
GameDB: Add gamefixes to 'Titeuf Mega-compet' and patch 'Yamiyo ni Sasayaku - Tantei Sagara Kyouichirou' series
GameDB: Add EE Clamping to 'Digimon Battle Chronicle' and fixes to other games
GameDB: Change VU-clamping on \
GameDB: add VU-clamping to \
The game had wrongly colored eye textures (yellow/blue) but are now correctly white:
Merge the Qt branch: Part 1
The new GUI is moving along very well, but is not at feature parity as the current WX-Widgets GUI is. Please be patient when it will be released to you guys.
GameDB: Remove patches for 'Neo Contra' and add EE rounding and clamping
Maintenance
Remove wxString ↔︎ std::string implicit conversions
GS Include Cleanup
Remove configuration coupling to GUI
Add partial LTO to CMake
EE: Fix JIT exits on 64-bit Windows
Fix some compile warnings spewed by MSVC x64
FreeBSD fixup
Remove 30-day artifact retention on windows builds
Remove GTK dependency on macOS
Fix compilation with LTO on GCC
actions: create automatic controller db updating workflow
actions: cleanup discord embed links and add release body
Create AppRun hook to handle variables
GHActions: Don't shallow clone submodules
actions: increase max linux build times as well until cache-hit rate is reliable
CMake: Always default CMAKE_BUILD_PO
off
Update libchdr
Update the FAQ, as well as some general cleanup.
3rd Party: Update rogue file to correct BSD license
Build: Remove old unused cheatscpp.h file
GitHub: Update and add new issue template for non-game related bug reports
3rdparty: Upgrade soundtouch lib to 2.3.1
3rdparty: Upgrade xbyak to 6.00
actions: Only announce pre-release
releases
Fixes to CMake and version upgrade with CMake
Bump mathieudutour/github-tag-action from 5.6 to 6.0
Bump actions/cache from 2.1.6 to 2.1.7
Readme : update links
GHActions: Fix Mac build
GameDB / Memcards - Replace yaml-cpp
with rapidyaml
Linux and Windows CMake Builds: Change output executable to lowercase
VS: Add some missing vcxproj filters
Only pass C++ flags to C++ files.
Make native builds default on Linux when using build.sh. Remove unused switch.
CMake: Remove gio dependency on macOS
VS: Fix location of shaders in project
FreeBSD: fix compilation
GHActions: Fix game controller db updater
Other
PGIF: Remove force fifo clear on GP1 (00-01)
Common/StringHelpers: Fix printing of 64-bit pointers
IOP Recompiler: Fix BIOS trace logging on 64bit
Common: Fix AT&T mixup in FastJmp code
Config: Fix zoom/stretch options not updating on Apply
Misc: Fix more warnings.
EE JIT: Backup shift on LDR/L if rs==rt
CI:Add build date to program log of nightly builds
pad-linux: Update to latest controller database
VSProps: Set MultiProcessorCompilation in CodeGen props
GIF: Modify fifo read behaviour
EERec: Remove zero-distance jmp in full fpu mode
Common: Fix GetWorkingDirectory on unix
Metadata
See you in our next progress report that is the first quarterly of 2022.
Q4 2021:
(dev1838 to dev2185) (2021-10-01 - 2021-12-31)