-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
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
rsx: Ignore or recover from unknown primitives #7077
Conversation
|
The backend already have their own handlers for empty draw commands. No need to diverge the path here and its also likely just what the realhw does anyway. If end() is called with no draw calls, nothing will happen. No draw calls will be emitted. |
|
What I mean is. go through begin/end as usual, just remember to empty the queue if its invalid and raise error if there actually exists draw calls for some reason. I'm trying to avoid turning the dispatch methods into a soupy mess of infinitely branching logic just to satiate some random game that will crash a few milliseconds later anyway. |
|
On second thought, just leave it, I'll change it properly later. |
3ae4369 to
c9aafca
Compare
|
Refactored it. |
8b84a54 to
5bfbfce
Compare
5bfbfce to
dd02ec9
Compare
|
Also happens in Naughty Dog's games, but very randomly, will try anyway. |
9f7b3cc to
a15a72e
Compare
633c791 to
39aaa6b
Compare
|
To 39aaa6b : does have effect != does make sense. It doesn't really make any sense to rely on this fragile feature. |
This also fixes a bug when recovering FIFO or creating such recovery point inside in_begin_end == true scope.
39aaa6b to
4a8d9c6
Compare
From hw tests: as long as there are no vertex ranges/draw commands passed while in_begin_end = true, it is allowed to begin and end with an invalid primitive, otheriwise crashes on realhw.
Where realhw crashes I've put fifo recovery as usual.
Known to improve stability in Beyond Two Souls.
Possibly improves stability in Metal Gear Solid 4 as it also happens with it (testers are welcome).
This also fixes a bug when recovering FIFO or creating such recovery point inside in_begin_end == true scope.