|
|
|
@ -66,19 +66,20 @@ const DmaPusher& GPU::DmaPusher() const { |
|
|
|
return *dma_pusher; |
|
|
|
} |
|
|
|
|
|
|
|
void GPU::WaitFence(u32 syncpoint_id, u32 value) const { |
|
|
|
void GPU::WaitFence(u32 syncpoint_id, u32 value) { |
|
|
|
// Synced GPU, is always in sync
|
|
|
|
if (!is_async) { |
|
|
|
return; |
|
|
|
} |
|
|
|
MICROPROFILE_SCOPE(GPU_wait); |
|
|
|
while (syncpoints[syncpoint_id].load(std::memory_order_relaxed) < value) { |
|
|
|
} |
|
|
|
std::unique_lock lock{sync_mutex}; |
|
|
|
sync_cv.wait(lock, [=]() { return syncpoints[syncpoint_id].load() >= value; }); |
|
|
|
} |
|
|
|
|
|
|
|
void GPU::IncrementSyncPoint(const u32 syncpoint_id) { |
|
|
|
syncpoints[syncpoint_id]++; |
|
|
|
std::lock_guard lock{sync_mutex}; |
|
|
|
sync_cv.notify_all(); |
|
|
|
if (!syncpt_interrupts[syncpoint_id].empty()) { |
|
|
|
u32 value = syncpoints[syncpoint_id].load(); |
|
|
|
auto it = syncpt_interrupts[syncpoint_id].begin(); |
|
|
|
|