-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Introduce "Compatibility Flags". #8006
Conversation
Hmm. Not sure how I feel about this. -[Unknown] |
@@ -96,6 +96,7 @@ set(SRCS | |||
Util/PPGeDraw.cpp | |||
CPU.cpp | |||
CoreTiming.cpp | |||
Compatibility.cpp |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you meant to add this to /CMakeLists.txt. Can we delete Core/CMakeLists.txt?
-[Unknown]
I'm also not sure how I feel about this, but I see no other way out anymore for the depth stuff, I've done what I can. |
Well, yeah, same here. Something might be possible on modern GL, like using a buffer for depth or etc., with probably significant perf impact... but it's true that depth is a hard problem... -[Unknown] |
c37c22f
to
e1e8b70
Compare
These should be used very restrictively, see comment in Compatibility.h. Should help #8004, by disabling depth rounding in Fight Night round 3.
e1e8b70
to
d6a370a
Compare
I think this is ready for merge now. @unknownbrackets , if you think it's alright, I'm going to try to add one more compat setting to revert sceAtrac's behaviour to something that GTA is happy with and then push out 1.1 fairly soon with that. Hopefully we'll find a better fix later, but I really want to get this release out, given that it contains major stuff like Android TV and 64-bit ARM support. |
Yeah, fair enough. Hopefully we can fix it better later. Really need an example of its syscall usage... -[Unknown] |
Introduce "Compatibility Flags".
@hrydgard @unknownbrackets do you guys think we could add those 2 lines from 4561440#commitcomment-6889647 as another compatibility flag? I wouldn't really ask about this, but MechaBouncer on the forum in Armored Core game thread made a valid point that we knew what change broke those games from over a year ago. I can add the new compatibility flag and open a pull request if you accept it, if not, no big deal, I didn't really posted on the forum that I'll ask about it so no pressure, nobody will feel disappointed. |
The problem with GTA turns out to be that it's managing the data incorrectly. Recent changes made parts of the code manage data more correctly, but that breaks GTA because it depends on other parts managing the data incorrectly the same way (#4483 is a great example of this.) I'm hoping the GTA thing can be removed very soon. It probably loops incorrectly and etc. I'm fairly sure that the change in the commit you mentioned is not correct. I'm not really a fan of squirreling away whatever actual bug Armored Core has. -[Unknown] |
Yeah I know it's just a hack, it's just that on the user end it's just a compatibility regression lasting for over a year and nobody was able to find real culprit or even a clue about it. I tried to find out about PSP_SIGNAL_HANDLER_PAUSE which the hack changes to make a CWCheat workaround for the affected game I have at least(only Bleach), but can't find any info about it, I only found sceGuSignal on pspsdk which lists only 2 behaviours:
is this http://psp.jim.sh/pspsdk-doc/index.html SDK incomplete or PPSSPP added something which should not exist for example on older firmware? |
Yeah that documentation is very outdated. I think they added more handlers in later firmware versions, and also slightly changed the behavior... I think it was in 2.00? Basically PAUSE just tells the list to keep going until FINISH, at which point it pauses. The essential process can be seen here: https://github.com/hrydgard/pspautotests/blob/master/tests/gpu/signals/pause.cpp As you can see:
I guess it might be possible to try adding an sceUpdateStallAddr call here: If it unpauses it before Continue, then the previous behavior is correct. I think this might be covered by a separate test already, but might be clearer to add to this one or create a pause2 or something. Anyway, at this point based on all my testing, my thinking of Most likely, what's happening in Armored Core is that something ELSE is failing to sceGeContinue, or is doing so too early, or isn't getting scheduled, or whatever... and so this hack makes it work. From the perspective of correctness, it's just a little landmine reset switch that magically unpauses lists at unexpected but sometimes not that problematic times. -[Unknown] |
Given how games use it, I agree that sceUpdateStallAddr really just sets the address at which the GPU will stop reading, and nothing else. For example there are no guarantees about exactly where the GPU will be afterwards, except not having passed that address. We incorrectly "rush" the GPU forwards to the stall address in single core mode, practically all games are quite happy with that though, and as the GPU has a really fast command reader, it's probably fairly close to what they see in practice except when the GPU is doing large draw calls. |
Thanks for lots of info:) will have something to digest(and will also know the sdk site is outdated;p). For now I checked what's happening right before the hang in Bleach game, it sets the signal to pause, then it calls sceGeContinue twice and finally hangs(only graphics) I assume that's the moment it get's the finish which triggers the pause. I noticed also two things:
|
Many China people use this hack (from I compiled ppsspp) to play |
Hmm. So wait, it's like that - SIGNAL, FINISH, END? That's weird and seems like a bug in the game. I don't think I've ever tested that sequence - it should normally be SIGNAL, END, FINISH, END. It could definitely be that we handle that particular sequence differently than we should. -[Unnown] |
Oh, sorry, I misread - signal, end, finish, end, is what's there. Yes, that's when it should trigger the callback. Our debug output could be clearer... -[Unknown] |
Compatibility fixes are controlled by assets/compat.ini.
Alternatively, if PSP/SYSTEM/compat.ini exists, it is merged on top, to enable editing the file on Android for tests.
This file is not meant to be user-editable, although is kept as a separate ini file instead of compiled into the code for debugging purposes.
The uses cases are strict:
performance for other games, such as the screen copies in Dangan Ronpa
implement them at all in a 100% compatible way
music problem where every attempted fix has reduced compatibility with other games
others cannot. We do not currently have any of those.
This functionality should NOT be used for any of the following:
We already have the Action Replay-based cheat system for such use cases.
Should help #8004, by disabling depth rounding in Fight Night round 3.