diff options
Diffstat (limited to '')
-rw-r--r-- | src/video_core/fence_manager.h | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/video_core/fence_manager.h b/src/video_core/fence_manager.h index 027e663bf..19bbdd547 100644 --- a/src/video_core/fence_manager.h +++ b/src/video_core/fence_manager.h @@ -64,19 +64,24 @@ public: } void SignalFence(std::function<void()>&& func) { + bool delay_fence = Settings::IsGPULevelHigh(); if constexpr (!can_async_check) { TryReleasePendingFences<false>(); } - std::function<void()> callback = std::move(func); const bool should_flush = ShouldFlush(); CommitAsyncFlushes(); TFence new_fence = CreateFence(!should_flush); if constexpr (can_async_check) { guard.lock(); } + if (delay_fence) { + uncommitted_operations.emplace_back(std::move(func)); + } pending_operations.emplace_back(std::move(uncommitted_operations)); QueueFence(new_fence); - callback(); + if (!delay_fence) { + func(); + } fences.push(std::move(new_fence)); if (should_flush) { rasterizer.FlushCommands(); |