Skip to content
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

Asyncevents #1992

Merged
merged 4 commits into from Feb 23, 2015
Merged

Asyncevents #1992

merged 4 commits into from Feb 23, 2015

Conversation

degasus
Copy link
Member

@degasus degasus commented Jan 31, 2015

This PR creates a new async event handling framework. It is used to queue swap events, efb access, bbox reads and perf querys reads into a single atomic read on the gpu thread.

There are likely still lots of optimizations remaining, so this PR tries to not be slower and to clean up the code a bit.


static AsyncRequests s_singleton;

std::atomic<bool> m_empty;

This comment was marked as off-topic.

@magumagu
Copy link
Contributor

bbox, perf queries, and efb poke/peek are unlikely to happen if the GPU thread is actually busy (from the CPU's perspective, the results would be unpredictable). Is there some way we can optimize based on that?

@degasus
Copy link
Member Author

degasus commented Jan 31, 2015

@magumagu likely. My primary goal right now is to support non-blocking events for swap request and efb pokes.


AsyncRequests();

void PullEvents() { if (!m_empty) PullEventsInternal(); }

This comment was marked as off-topic.

@PatrickFerry
Copy link
Contributor

Report:
"Skip EFB Access from CPU" doesn't work anymore.

In OpenGL with AMD
The time it takes 4X4 Evo 2 to load:
From 16:49 minutes in master to -> 4:22 in this PR

@degasus
Copy link
Member Author

degasus commented Feb 1, 2015

@ZephyrSurfer fixed. Could you please also try D3D? I guess there the performance difference could be bigger.

@PatrickFerry
Copy link
Contributor

@degasus This benchmark in D3D is so fast with this PR it makes no difference if Skip EFB Access or not.
I had thought wrongly that telling you had shaved off just over 12 minutes in OpenGL was better news than D3D.
In master it takes 1:06 - 1:17 minutes in this PR it takes 34.4 seconds (Same as console roughly, and same result with Skip EFB access)

@degasus
Copy link
Member Author

degasus commented Feb 4, 2015

So any remaining reviews?

@JMC47
Copy link
Contributor

JMC47 commented Feb 4, 2015

Melee is a lot slower in this Pull Request as of my last check.

@degasus
Copy link
Member Author

degasus commented Feb 4, 2015

What does Melee use? EFB pokes or peeks, XFB, perf querys or bbox? How can I reproduce this issue?

@degasus
Copy link
Member Author

degasus commented Feb 14, 2015

@JMC47 oh, do I remember correctly that Melee was the game which had a slowdown because of the faster vertex loader jit? So this could be a dual core issue within this game...

@JMC47
Copy link
Contributor

JMC47 commented Feb 15, 2015

Yeah, perhaps. But, I am indeed getting slowdowns in some titles with this.

@Mullin
Copy link
Contributor

Mullin commented Feb 16, 2015

Tested since weeks. This is really faster than master but force Paper Mario : The Thousand Door to crash after the opening scene.(With the boat)

@degasus
Copy link
Member Author

degasus commented Feb 21, 2015

@Mullin This also happens for me on master. So does master works fine for you?

@degasus
Copy link
Member Author

degasus commented Feb 22, 2015

JMC47> yeah, doesn't seem like a performance regression any more

SO ready for merging

skidau added a commit that referenced this pull request Feb 23, 2015
@skidau skidau merged commit 1c29774 into dolphin-emu:master Feb 23, 2015
@degasus degasus deleted the asyncevents branch August 9, 2015 08:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
8 participants