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
Implement transform feedback emulation for hardware without native support #5080
Conversation
Download the artifacts for this pull request: Experimental GUI (Avalonia)GUI-less (SDL2)Only for Developers
|
Xenoblade Chronicles 3 / Future Connected (DLC Wave 4)This PR enables the game to boot and run for the first time on master (previously it only "ran" on macos1.) Screen.Recording.2023-05-27.at.12.39.16.mp4Screen.Recording.2023-05-27.at.12.39.16-2.mp4 |
This comment was marked as off-topic.
This comment was marked as off-topic.
152d0f4
to
681a51d
Compare
I was testing with Hellblade which requires TFB, and it now works (getting 30fps without mirrors). But I noticed a new warning that doesn't appear on
I thought it might be related to #5203, since it mentions BGRA. |
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.
LGTM, nice work!
This implements partial support for transform feedback emulation, for platforms that do not have native support for this feature (like macOS).
Test results
I tested some games that uses transform feedback locally to validate that the implementation is working. Below I show the results and also some observations regarding issues that I found.
Pokémon Scarlet/Violet:
This test was done with buffer mirrors (#4899).
Without it, the performance is abysmal and for some reason, some objects are flickering (maybe related to the low performance)(The performance issue was fixed on 5447548). NoInvalidResource
error with and without mirrors.Pokémon Legends Arceus:
This was tested without buffer mirrors.(Can also reach 30 fps without mirrors now). With buffer mirros, it can reach 30 fps, but there are a lot ofInvalidResource
errors which prevents the game from rendering properly, so I don't recommend right now.SNK Heroines: Tag Team Frenzy:
Tons of
InvalidResource
error with and without mirrors. But the characters does render when it is not erroring, which shows that transform feedback is working. Can reach 60 fps with and without mirrors.Xenoblade Chronicles Definitive Edition:
Title screen render fine (the grass uses transform feedback). In-game it starts having a lot of
InvalidResource
errors and does not render properly unfortunately:I did not test with mirrors.
Pokkén Tournament:
Works, no
InvalidResource
errors, can reach 60 fps. I did not test with mirrors.Metroid Prime Remastered:
What is uses transform feedback for (Samus shadows) is not really working since it does it from a geometry shader. But at least the game doesn't crash anymore.
Donkey Kong Country: Tropical Freeze:
Tested without mirrors, looks fine and runs at 60 fps the entire time.
Note: All tests performed on 2020 MacBook Air.
What's still not supported:
So I mentioned before that this is partial support, because there are a few cases that are not yet supported:
What is implemented on this PR matches what is on the macos1 build, however the actual implementation here is different and makes use of the new methods I implement on the shader and backend to represent buffer access for emulator reserved buffers.
Contributes to #4062.
Closes #5068, closes #4889.