mirror of
https://github.com/citra-emu/citra.git
synced 2024-12-18 13:00:07 +00:00
Merge pull request #5030 from jroweboy/reorder-queue-acquire
Remove wait for free buffer
This commit is contained in:
commit
020cd56ad8
@ -77,7 +77,6 @@ public:
|
|||||||
std::scoped_lock lock(swap_chain_lock);
|
std::scoped_lock lock(swap_chain_lock);
|
||||||
std::queue<Frontend::Frame*>().swap(free_queue);
|
std::queue<Frontend::Frame*>().swap(free_queue);
|
||||||
present_queue.clear();
|
present_queue.clear();
|
||||||
free_cv.notify_all();
|
|
||||||
present_cv.notify_all();
|
present_cv.notify_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,10 +125,6 @@ public:
|
|||||||
|
|
||||||
Frontend::Frame* GetRenderFrame() override {
|
Frontend::Frame* GetRenderFrame() override {
|
||||||
std::unique_lock<std::mutex> lock(swap_chain_lock);
|
std::unique_lock<std::mutex> lock(swap_chain_lock);
|
||||||
// wait for new entries in the free_queue
|
|
||||||
// we want to break at some point to prevent a softlock on close if the presentation thread
|
|
||||||
// stops consuming buffers
|
|
||||||
free_cv.wait_for(lock, std::chrono::milliseconds(100), [&] { return !free_queue.empty(); });
|
|
||||||
|
|
||||||
// If theres no free frames, we will reuse the oldest render frame
|
// If theres no free frames, we will reuse the oldest render frame
|
||||||
if (free_queue.empty()) {
|
if (free_queue.empty()) {
|
||||||
@ -162,7 +157,6 @@ public:
|
|||||||
// free the previous frame and add it back to the free queue
|
// free the previous frame and add it back to the free queue
|
||||||
if (previous_frame) {
|
if (previous_frame) {
|
||||||
free_queue.push(previous_frame);
|
free_queue.push(previous_frame);
|
||||||
free_cv.notify_one();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// the newest entries are pushed to the front of the queue
|
// the newest entries are pushed to the front of the queue
|
||||||
@ -172,7 +166,6 @@ public:
|
|||||||
for (auto f : present_queue) {
|
for (auto f : present_queue) {
|
||||||
free_queue.push(f);
|
free_queue.push(f);
|
||||||
}
|
}
|
||||||
free_cv.notify_one();
|
|
||||||
present_queue.clear();
|
present_queue.clear();
|
||||||
previous_frame = frame;
|
previous_frame = frame;
|
||||||
return frame;
|
return frame;
|
||||||
|
Loading…
Reference in New Issue
Block a user