mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-08-15 05:15:14 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1cd91f3063 | |||
| c4f977dda6 |
@@ -1,4 +1,4 @@
|
|||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
|
||||||
@@ -80,9 +80,7 @@ void MasterSemaphore::Wait(u64 tick) {
|
|||||||
if (!semaphore) {
|
if (!semaphore) {
|
||||||
// If we don't support timeline semaphores, wait for the value normally
|
// If we don't support timeline semaphores, wait for the value normally
|
||||||
std::unique_lock lk{free_mutex};
|
std::unique_lock lk{free_mutex};
|
||||||
free_cv.wait(lk, [&] {
|
free_cv.wait(lk, [&] { return gpu_tick.load(std::memory_order_relaxed) >= tick; });
|
||||||
return gpu_tick.load(std::memory_order_acquire) >= tick;
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,33 +215,18 @@ void MasterSemaphore::WaitThread(std::stop_token token) {
|
|||||||
std::tie(host_tick, fence) = std::move(wait_queue.front());
|
std::tie(host_tick, fence) = std::move(wait_queue.front());
|
||||||
wait_queue.pop();
|
wait_queue.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ANDROID
|
|
||||||
VkResult status;
|
|
||||||
do {
|
|
||||||
status = fence.GetStatus();
|
|
||||||
if (status == VK_NOT_READY) {
|
|
||||||
std::this_thread::sleep_for(std::chrono::microseconds(100));
|
|
||||||
}
|
|
||||||
} while (status == VK_NOT_READY);
|
|
||||||
|
|
||||||
if (status == VK_SUCCESS) {
|
|
||||||
fence.Reset();
|
|
||||||
} else {
|
|
||||||
vk::Check(status);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
fence.Wait();
|
fence.Wait();
|
||||||
fence.Reset();
|
fence.Reset();
|
||||||
#endif
|
|
||||||
|
|
||||||
{
|
{
|
||||||
std::scoped_lock lock{free_mutex};
|
std::scoped_lock lock{free_mutex};
|
||||||
free_queue.push_front(std::move(fence));
|
free_queue.push_front(std::move(fence));
|
||||||
gpu_tick.store(host_tick, std::memory_order_release);
|
gpu_tick.store(host_tick);
|
||||||
}
|
}
|
||||||
|
#ifdef ANDROID
|
||||||
free_cv.notify_all();
|
free_cv.notify_all();
|
||||||
|
#else
|
||||||
|
free_cv.notify_one();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user