To further increase the accuracy of the post process phase, I've added (scRGB) HDR support, which is necessary
to fully display the PAL and NTSC-J color spaces, and also to improve the quality of post process texture samplings and
do them in linear space instead of gamma space (which is very important when playing at low resolutions).
For SDR, the quality is also slightly increased, at least if any post process runs, as the buffer is now
R10G10B10A2 (on Vulkan, DX11 and DX12) if supported; previously it was R8G8B8A8 but the alpha bits were wasted.
Gamma correction is arguably the most important thing as Dolphin on Windows outputted in "sRGB" (implicitly)
as that's what Windows expects by default, though sRGB gamma is very different from the gamma commonly used
by video standards dating to the pre HDR era (roughly gamma 2.35).
Additionally, the addition of HDR support (which is pretty straight forward and minimal), added support for
our own custom AutoHDR shaders, which would allow us to achieve decent looking HDR in Dolphin games without
having to use SpecialK or Windows 11 AutoHDR. Both of which don't necessarily play nice with older games
with strongly different and simpler lighting. HDR should also be supported in Linux.
Development of my own AutoHDR shader is almost complete and will come next.
This has been carefully tested and there should be no regression in any of the different features that Dolphin
offers, like multisampling, stereo rendering, other post processes, etc etc.
Fixes: https://bugs.dolphin-emu.org/issues/8941
Co-authored-by: EndlesslyFlowering <EndlesslyFlowering@protonmail.com>
Co-authored-by: Dogway <lin_ares@hotmail.com>
These games seem to constantly have unused vertices, and this is worst shown in the Shadow Pokemon purification cutscene. The Shadow Pokemon purification cutscene is even worse on XD with forced single core mode, as instead of having FPS dropping with VPS staying 60ish, it will drop both, resulting in audio stuttering. Turning on CPUCall seems to have a 7/8 reduction of draw calls for that cutscene (~800 -> ~100), doubling performance. Many other areas of the game seem to benefit from this setting too, having some kind of performance boost.
See https://bugs.dolphin-emu.org/issues/13248. This is needed for the menus to work properly (not run at 1FPS and render incorrectly). Additionally, immediate XFB causes flickering.
Fixes dynamically changing dpi scaling.
Load resources from svg if possible.
Currently svg support is not in Qt build in Externals,
and image files need to be added later.
This extension is currently required to get good performance.
So instead of maybe triggering a GPU hang, let's just disable the shader and show a warning instead.
Sadly our postprocessing framework does not support reporting a warning, so the way to display the warning is a bit hacky.
But this is an ascii-art shader, we already have a font in the shader, so let's use it.
Dolphin had a nice but horrible slow asci art shader.
Beside being slow, it used the font from dolphin's old OSD implementation.
So it was also broken after the VideoCommon redesign.
This patch reintroduces the (almost) identical method for the asci art generation.
However with many improvements:
* Inline definition of the font, so no external dependency any more
* Optimized performance by partial unrolling with CSE'ing some memory loads
* Shader subgroup instructions, so 32 times faster on desktop CPUs on Vulkan + OGL (no D3D support)
* Option to select character size by internal or window resultion
* Dropped the last row of pixels of each character (only modification of the outcome)
Cubivore had an old issue before Hybrid XFB was merged involving the screen shifting left. Immediate XFB actually brings the issue back. It should be disabled for this title.
These games greatly benefit from CPU Culling, and there isn't much reason
not to just blanket enable it for all users. There is no case where you'd
want it disabled.
A call to GXCopyDisp(), made once before the title screen for no
apparent purpose, is causing heap corruption, but it isn't observed on
real hardware thanks to the data cache. Skipping the call works too,
preventing a crash on the main menu.
This patch substitutes field rendering with full frame rendering in the
NTSC and NTSC-J versions of Eggmania. This allows Dolphin's
"Force Progressive" hack to work with this title.
Codes originally from Swiss, written by Extrems.
This game follows the anti-pattern of calling memset on a buffer in the
midst of being DMA copied to ARAM, then calling a DVD read function that
effectively cancels the memset with dcbi instructions. Dolphin does not
emulate dcache for performance reasons, so this patch removes the
offending memset call.
Patches are included for two regions and are enabled by default.
https://bugs.dolphin-emu.org/issues/12759
- Given proper credits for the NTSC-U "Bypass Metafortress" patch (SUKE01.ini)
- Ported the "Bypass Metafortress" patch to the PAL version (SUKP01.ini)
This game has stale icache values in the logs during certain
loadscreens, and after disabling them I was able to play through the
entire game, with one crash that may have been related to savestates and
memory cards since during that loadscreen it said the memory card did
not match.
This does cause invalid reads to be spit out during parts of the game,
but you can safely skip them. Enabling MMU seems to surpress the
invalid reads without side-effects, but the aforementioned
memcard/savestate crash was with MMU on.
For unknown reasons, a Gecko Code on the Wiki for Rayman Arena that was
meant to help with widescreen patches. This doesn't actually change
anything about the game unless you enable Dolphin's built-in widescreen
hack, where it will cause enemies and whatnot to render on the edges of
the screen. This is because it patches out the culling function in the
game, which coincidentally is also the cause of the hang in Dolphin.
With "Store EFB Copies to Texture Only" set to True (the default setting), areas of Excite Truck appear darker than on console. For example, in Sylvan Glen under the Bronze cup, all of the trees appear very dark, nearly black. On console, this does not occur.
Start of the race on Dolphin: https://youtu.be/KjJ-55lwFkE?t=817
Start of the race on Console: https://youtu.be/0W9blwA8AG4?t=699
Setting EFBToTextureEnable = False fixes this issue and does not appear to introduce any performance impacts, so I am recommending that this be disabled by default for this game.
Apparently MMU is no longer needed in these titles. All 3 booted and
played into gameplay in the latest builds without issues, and disabling
MMU results in a very slight, but noticeable performance boost.
At least on Android, SyncGPU has really bad performance compared to
single core. It's less stable too - I get fatal GPU desyncs in
Pokémon XD using the default settings.
This Pull Request updates N64 INIs based on what I know about various
behaviors since the last time we updated it. This should result in more
sane settings for Mario Tennis and Super Smash Bros. while still
preventing the out of memory crash due to the tremendous amounts of EFB
copies.
Red Steel 2 has FMVs that get corrupted with Anisotropic filtering. It
also hangs on dualcore. While SyncGPU works, both another user and
myself saw much smoother gameplay when using Single Core for unknown
reasons.
Same problem as 658eed4... Except instead of just making the
comments use #, I'm actually removing some of the codes entirely
because they are of questionable value.
Should fix https://bugs.dolphin-emu.org/issues/12737.
This game requires emulating the Fifo Pipeline or have Single Core be
able to read ahead in the Fifo. Because Single Core currently processes
things in a serialized manner, this game will not run regardless of
CPU/GPU timing hacks.
This game is the earliest of Heavy Iron Studios' games and has a similar
offset issue to that of the SpongeBob and Incredibles games. While they
weren't offsetting it and breaking shadows like the other games, there's
still an offset in the upper left corner of the screen. This fixes
that, and has no effect at 1x IR, so it's safe to enable by default.