For buttons and some character icons the game loads palleted PNGs and
tiles the pallet indices directly into C4 textures but fails to take
into account that PNG and C4 use opposite nibble orders. This causes
adjacent pixel columns to be swapped, see issue 13370.
Also disable Immediate XFB for the Japanese release. It has the same
black screen and flickering issues as the other regions.
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