A single merger can represent days, months, or even years of work. Most of the commits are relatively small, but once in a while you get absolutely huge changes like Tev_Fixes_New or the GLSL rewrite that span across years between initial concept and merged code. There's a special sense of accomplishment when one of the long awaited changes finally show up in the emulator. The number of commits and the amount of code changed; neither of those indicators often tell of the trials faced by the contributor over the course of their journey.
And don't think that just because the code is merged that things are finished. Part of the purpose of having progress report is to put a spotlight on some of the latest and greatest changes. The users are the last line of defense against potential bugs, problems, and unintended consequences that often come with new features.
All of the latest features mentioned this month can be found in the latest development builds available here.
4.0-3471 - Support Higher Internal Resolutions by RachelB and neobrain¶
One of the best enhancements in Dolphin is to increase the internal resolution of the games, allowing you to play them to 1080p and beyond. Until now, Dolphin has been limited to rendering to 4x Native (2560x2112) for no real reason other than that no one can agree with how to select between arbitrary internal resolutions with the GUI. Truth be told, the actual feature for increased internal resolution was actually added ages ago by neobrain but there was no way to control the feature due to arguments on how it should be implemented into the GUI! RachelB side steps all of that and adds the controls for higher internal resolutions into the INI files.
From now you can go into either the video backend or per-game INI files and add "EFBScale = 8" to access 5x IR, 9 for 6x IR, etc. The next step of course is to add it to the GUI and fix up other inconsistencies with how it's implemented.
Fixed issue 5656
For more information on handling INIs, please check here.
4.0-3473 - Fix MMU Loads/Stores that cross page boundaries by Fiora¶
Dolphin is a very, very compatible emulator when it comes to GameCube titles. In fact, if you include branches (some that were never merged to master) Dolphin has booted every single GameCube title... except one. Courtesy of Factor 5, Star Wars Rogue Squadron III: Rebel Strike remained the only title that Dolphin could not boot at all.
Unbeknownst to the Dolphin developers, the PAL version of the game has technically ran since Fifo-BP was merged way back in 3.5-644, although it was subject to very frequent crashes and an absolute plethora of ridiculous bugs. This included but wasn't limited to headless stormtroopers, AT-STs with missing legs, color issues, and animation issues in pretty much everything.
Because the animation issues only happened on the JIT and JITIL cores, Fiora decided to take a look at this problem. Despite not seeming to be a JIT problem based when bisecting the memory addresses, she continued to look into it until finally coming up with this fix. It was meant to be a small change to fix the PAL versions animations, but it ended up fixing almost every MMU issue in the game! For the first time in Dolphin's history, the NTSC version of Rebel Strike could boot up in Dolphin!
Unfortunately, those who want to experience the game in HD will still have to contend with zfreeze problems and the occasional hang, along with severe HLE audio problems that can only be avoided with LLE. All of the problems from Rogue Leader that Rebel Strike inherited are still there. But the absolutely insane among us have proven that yes, it is possible to complete Rebel Strike from beginning to end in Dolphin. Why? Because they could.
Fixed issue 5336
4.0-3543 - Fix GCI Folders with Greater Than 127 Files by LPFaint99¶
The GCI folder feature allows Dolphin to do all kinds of neat things that memory card files simply couldn't do. The GameCube memory cards, even if they weren't full, can only hold 127 files at once before declaring they can't hold any more. This is a hardware limitation, so outside of introducing some kind of ridiculous hack, there was pretty much no getting around this issue.
This commit makes it so that the emulator can handle any number of save files in your GCI Folders without any issues. It intelligently loads GCI files linked to the chosen game and about 100 other saves, preferring to get those related to the running game. That means that titles like Super Smash Bros. Melee and Metal Gear Solid: The Twin Snakes can still scan your virtual memory card to unlock trophies and easter eggs!
Of course, astute readers may realize this has been promised before. This feature was supposedly added a while ago... but wasn't functioning correctly. Almost no one has over 128 save files on their memory cards, so it went unnoticed for a while. Thanks to some insane testers with way too many games, this is now handled. GCI folders continue their march toward being the future of memory cards in Dolphin!
Fixed issue 7431
4.0-3595 - Proper Audio and Video Dumping by RisingFog¶
Anyone who has tried to use Dolphin's video dumping feature in the past has been sorely disappointed. While technically functional, it suffered from a few very critical issues.
- The video only outputted when frames were outputted. Sometimes loading screens would only output one frame every few seconds. This means what you record and what you're seeing don't match up to what the emulator is actually doing, which is problematic.
- As of recently, audio dumped at realtime, making it so that if you couldn't render the video realtime, then you'll get choppy, broken audio.
- Even if you could dump the video fullspeed, you'd suffer audio/video desyncs because of problem 1.
The brand new movie menu.
Dolphin's video dumping support left a lot to be desired. One community that was inconvenienced by this more than any other was none other than TASVideos. Their superplays and speedruns cannot be enjoyed by most viewers without the ability to dump the video and audio.
How did they deal with Dolphin's video dumping? They didn't. Instead, they wrote their own video dumping patch that completely replaced Dolphin's native solution. Unfortunately the code wasn't up to the Dolphin standards and couldn't be merged, and there were tons of problems with full compatibility. DiscTracK audio games not working properly is just one of many bugs that kept it out of the main repository.
After years of waiting, RisingFog stepped up to the plate to handle the long standing issue of video dumping in Dolphin. He tuned up their AVSync patch, fixed the bugs, and added a bunch of necessary features to get full compatibility with titles. Thanks to his work, Dolphin can now dump video without needing any hacks, patches or other modification.
Because Dolphin finally has good video and audio dumping, the menus have been moved to a more prominent place. Underneath the new "Movie" menu, you can now find "Dump Audio" and "Dump Frames" options!
Fixed issues 3490, 7111 and 7505
4.0-3610 - Reimplement Bounding Box Emulation via Software Fallback by crudelios¶
Crudelios has been on a long, difficult mission that seemingly stretches back forever - getting the Bounding Box effects used by the Paper Mario series to work properly.
He's been chipping away at this problem with many merges leading up to the nuclear option: implementing it in software renderer, and having OpenGL and D3D use software for these effects. There is a moderate performance hit, but it's only a ~20% increase on the GPU thread only when the bounding box effects are active. Considering how badly broken the old implementation was along with how much faster Dolphin is now; perfect bounding box emulation is worth the price. Remember, Super Paper Mario would outright crash due to incorrect bounding box emulation, and this corrects it!
The software fallback closes the rest of those difficult to fix issues that have been plaguing the bounding box games.
Another benefit of this change is that the option to disable bounding box emulation has finally been removed. Bounding box is only used in four games (along with Resident Evil on Wii, where they erroneously turn it on for no reason whatsoever), and those titles are unplayable without it. It will simply be used when it's needed, and off when it's not. With this merge, the bounding box saga can finally be put to rest. Thanks again crudelios, for your hard work and undying persistence on this feature.
Fixed issues 6168, 6193, 6196, 6525 and 7050
4.0-3631 - Remove the MMU speedhack option by skidau¶
Before everyone panics, no, the MMU speedhack that over 100 games rely on has not been removed. Rather, through some stringent testing, a number of facts were collected.
- Enabling the MMU Speedhack in games that didn't use it resulted in no change in behavior, and no performance hit whatsoever.
- Accidentally disabling the MMU Speedhack could result in broken games.
- Games not in the INI database that needed the MMU Speedhack would crash by default until someone reported it.
And most importantly, the MMU Speedhack, despite the name, represents a more accurate way of handling things than the default method. This is because there are really three levels of MMU emulation, and the MMU speedhack falls squarely in the middle.
- No MMU Emulation: Most games don't even know it's there.
- MMU Speedhack: Allocate a ton of memory for the MMU. This allows most MMU games to work without issues.
- Full MMU Emulation: Accurately map the MMU with Full Exception Checking. Extremely costly, hard to emulate properly.
With all of this new information, it was a fairly easy decision to finally enable it by default and remove the option to disable it altogether. Special thanks to LinktothePast for constantly looking for and finding games that needed the MMU Speedhack and adding them to the INI database over the years. Without him, things could have been a lot worse up until this point, and we'd have little idea of how many games actually use this feature.
Fixed issue 7318
4.0-3633 - MMU: Option to Disable BAT Resolution by Fiora¶
This is one of those very expensive, advanced features that Dolphin has implemented for the MMU. While Fiora was looking for features to optimize, she realized that full MMU games spent a great deal of time in BAT translation.
Except this was a completely unnecessary step in every one of the games that she checked. Disabling BAT resolution results in a 10% speedboost in MMU titles with no downside whatsoever. The only known title that could possibly need this feature, Star Wars: The Clone Wars, doesn't run in Dolphin at all.
4.0-3644 - D3D: Fix XFB Scaling by slx7R4GDZM¶
Last month's progress report mentioned that the XFB Scaling patch was incomplete because it didn't work in D3D, and that it would be a good task for newcomers. It wasn't a long wait. Within a couple of days slx7R4GDZM had a patch whipped up and ready for testing. All of the same fixes from last month's XFB Scaling merge now apply to D3D!
Fixed issue 7681
4.0-3669 - Correct the physical memory access to MEM2 via the MMU by skidau¶
Speaking of annoying MMU bugs, there are actually a few Wii titles that require full MMU emulation. For various reasons in the past, none of these titles actually worked in Dolphin. skidau uncovered one of those reasons recently when he found out that MEM2 wasn't actually connected to the MMU. By correcting that flaw, at least one of the Wii MMU titles has started booting: Toy Story 3!
Fixed issue 2823
4.0-3673 - Hash: unroll CRC loop by Fiora¶
Safe Texture Cache isn't quite a last resort feature like software renderer and interpreter. But it's still monumentally slower than medium and fast texture cache. For example, in the NES Virtual Console title Castlevania III: Dracula's Curse can approach 300fps on medium texture cache on a typical Ivy Bridge CPU. But the game requires safe texture cache to display correctly, and it will quickly drop down to under 40fps on that very same machine.
The main reason for this is that each setting is doing more and more work. Fast texture cache calculates with 1KB of the texture while medium calculates with 4KB. Safe on the other hand calculates the hash with the whole texture, and considering some games have textures bigger than 1MB, it is easy to see why it's so much slower!
On Intel CPUs including and newer than Nehalem i7s, CRC32 operations took three cycles before. By unrolling the CRC loop, multiple CRC operations can be started while the first one is finishing, meaning that during the two cycles that the first operation is still doing work, two more can already be started! Unfortunately, CRC32 takes multiple micro-operations on AMD and so can't be pipelined quite as effectively, though it hasn't been benchmarked yet. It could be an even greater speedup, or it could be far less effective.
It should be noted that Dolphin's hash isn't exactly CRC32 any more. But since the cache doesn't care what algorithm is used, everything still works as it should, with a very nifty speedup that should make everyone happy.
4.0-3681 - Cache D3D State by kayru¶
Dolphin has two very evenly matched graphics backends with their own individual strengths and weaknesses. However, recently OpenGL has started to outperform D3D. kayru bucked that trend with a massive 15 - 30% performance boost to the D3D backend.
Don't panic about the AMD results being a lot lower. The HD5850 is pretty old by modern standards, but this does show how much an older GPU can affect framerates.
The chart tells a very poignant story. The D3D state cache increases the efficiency of the backend on all graphics cards. While the effect is greater on NVIDIA cards, it still isn't quite as fast as OpenGL in typical situations. For AMD users, they'll find that this optimization only pushes D3D further as the best choice for their configurations.
Still want more? 4.0-3926 brought another sizable performance boost to the D3D backend. Depending on the game, D3D will be roughly 10% faster than before. Add both of these merges together, and the difference in performance is very, very obvious.
4.0-3743 - DSP-HLE: Clamp AX Volume by konpie¶
Dolphin's HLE audio has been improving more and more in recent years, to the point where in most games, there's really no difference in output between the HLE and LLE backends. Unfortunately, a lot of Wii and GC games were showing a strange behavior: HLE audio would start crackling for no real reason.
It turns out that during the New-AX-HLE rewrite, a small detail was missed that when the volume exceeded a certain level, it would be clamped. DSP-LLE already correctly handled this and was integral for us to see that this change was implemented properly.
Crackling in games can be really annoying.
With the correct clamping, there is no static.
This fixes a TON of static bugs in Wii, GameCube and Wiiware titles. Anyone who has experienced crackling issues should update and give it another try.
Fixed issues 6393, 6439, 6955, 7116, 7264, 7519 and 7605
4.0-3748 - D3D: Enable Depth Clipping by kayru¶
There's a weird problem in the D3D backend that's been going on for years. Stage objects, UI, and other things that were supposed to be clipped were still being rendered by the D3D backend for some reason.
This was because clipping was... turned off. Oops. Enabling clipped in D3D revealed even more clipping bugs that it inherited from D3D9. A second merge will handle those in due time. OpenGL and D3D should be more or less equal with clipping by the time all of the dust has settled.
This unfortunately means those games affected by the Sonic Unleashed Hack removal are now broken in D3D. They've been broken in OpenGL for some time, but D3D managed to still show the games' UI since it wasn't clipping anything. Getting the matter of clipping figured out in Dolphin is one of the top priorities right now, and there are more fixes on the way. This comparison below shows that Dolphin is still getting things wrong, even with the unmerged changes added.
This is a hardware test. Triangles and rectangles are being drawn between coordinates -2 through 2, and we're seeing which ones are clipped. This is how a Wii rasters the scene.
Fixed issues 6268, 6562, 6766, 7055, 7223 and 7755
Special Thanks to ALL of October's Contributors...¶
- Lioncash - 38 commits
- sonicadvance1 - 36 commits
- skidau - 23 commits
- comex - 22 commits
- Fiora - 13 commits
- Stevoisiak - 13 commits
- kayru - 11 commits
- phire - 11 commits
- RachelB - 11 commits
- RisingFog - 6 commits
- waddlesplash - 6 commits
- degasus - 4 commits
- crudelios - 3 commits
- rohit-n - 3 commits
- Armada651 - 3 commits
- ector - 3 commits
- Linktothepast - 2 commits
- s1x7R4GDZM - 1 commit
- SeannyM - 1 commit
- booto - 1 commit
- archshift - 1 commit
- Jasper - 1 commit
- konpie - 1 commit
Thank you all for incrementing Dolphin from 4.0-3471 through to 4.0-3950!