libretro / LRPS2

GNU General Public License v2.0
159 stars 47 forks source link

(Feature Request) Add VUs Round and Clamping Mode settings. #165

Closed GABO1423 closed 2 years ago

GABO1423 commented 2 years ago

We currently only have the EE/FPU Round/Clamping mode settings, which after some testing, do work as intended (sorry for stating the opposite @covey-j). But while some games might rely on those settings, it still does not cover all of them. So adding these options would allow users to cover all grounds so to speak. This is especially important for Xbox users since as of the time of me writing this, the automatic game fixes from the GameDB are broken on the Xbox (see #162). So adding these provides an adequate workaround for the time being. Thanks for reading.

SeventySixx commented 2 years ago

That's quite strange, because clamping setting and round mode for both FPU and VU should already be affected by the core setting

https://github.com/libretro/pcsx2/blob/3f45fe7dc1ee91e3ed76d9c8589d063a2a0be57e/libretro/main.cpp#L377-L388

but a some point there is this function:

https://github.com/libretro/pcsx2/blob/3f45fe7dc1ee91e3ed76d9c8589d063a2a0be57e/pcsx2/Pcsx2Config.cpp#L90-L121

that maybe do something like setting default values for VU, I don't know, here is a little bit dark for my knowledges

GABO1423 commented 2 years ago

The problem I see with this implementation @SeventySixx is that the EE and VUs Clamping and Round mode aren't the same and don't have the same effects. For example, VU Clamping Mode does not have the full setting that the EE Clamping Mode does, and the EE Clamping Mode does not have the Extra setting the VU counterpart does. Not to mention, some games require a different setting for both modes at the same time. Gran Turismo 4 for instance requires the EE Clamp mode to be set to 3 (Extra + Preserve Sign) and VU Clamp to be set to 2 (Normal) at the same time to fix text-related issues. So if the current setting is set to Extra + Preserve Sign, only half of the fixes are applied here.

Klonoa 2 has the exact same scenario, EE Clamp needs to be 3 in order to fix the problematic Object Misplacement issues, while VU Clamp needs to be set to 2 to fix some graphical reflection glitches. Plus, the code in the main.cpp file from what I can see is lacking the fourth VU Clamp mode setting shown in Pcsx2Config.cpp (vuUnderflow, which I assume corresponds to the "None" setting, but I am not so sure there).

SeventySixx commented 2 years ago

So, having separate "clamping mode" and "Round Mode" settings for both EE and VUs do will solve the problem?

I mean having in the core the settings:

VUs Clamping Mode
VUs Round Mode

EE/FPU Clamping Mode
EE/FPU Round Mode

About vuUnderflow, I think it wasn't set directly by the settings also in the standalone, but I will do a double check EDIT: I confirm, also in standalone vuUnderflow seems not touched by user settings

GABO1423 commented 2 years ago

So, having separate "clamping mode" and "Round Mode" settings for both EE and VUs do will solve the problem?

I mean having in the core the settings:


VUs Clamping Mode
VUs Round Mode

EE/FPU Clamping Mode
EE/FPU Round Mode
``
Yeah, I think this will do nicely. 

EDIT: I confirm, also in standalone vuUnderflow seems not touched by user settings

Thanks for the confirmation mate!

SeventySixx commented 2 years ago

Ok, perfect, I'm going to implement it 👍

GABO1423 commented 2 years ago

PR #166 has implemented these options successfully, so this can now be closed.