diff options
Diffstat (limited to 'src/strategies/anti_lag/queue_strategy.cc')
| -rw-r--r-- | src/strategies/anti_lag/queue_strategy.cc | 33 |
1 files changed, 11 insertions, 22 deletions
diff --git a/src/strategies/anti_lag/queue_strategy.cc b/src/strategies/anti_lag/queue_strategy.cc index 27a9337..9c49e7c 100644 --- a/src/strategies/anti_lag/queue_strategy.cc +++ b/src/strategies/anti_lag/queue_strategy.cc @@ -12,7 +12,7 @@ AntiLagQueueStrategy::~AntiLagQueueStrategy() {} void AntiLagQueueStrategy::notify_submit( [[maybe_unused]] const VkSubmitInfo& submit, - std::unique_ptr<Submission> submission) { + std::shared_ptr<TimestampPool::Handle> handle) { const auto strategy = dynamic_cast<AntiLagDeviceStrategy*>(this->queue.device.strategy.get()); @@ -22,12 +22,16 @@ void AntiLagQueueStrategy::notify_submit( } const auto lock = std::scoped_lock(this->mutex); - this->pending_submissions.push_back(std::move(submission)); + if (this->frame_span) { + this->frame_span->update(std::move(handle)); + } else { + this->frame_span = std::make_unique<FrameSpan>(std::move(handle)); + } } void AntiLagQueueStrategy::notify_submit( [[maybe_unused]] const VkSubmitInfo2& submit, - std::unique_ptr<Submission> submission) { + std::shared_ptr<TimestampPool::Handle> handle) { const auto strategy = dynamic_cast<AntiLagDeviceStrategy*>(this->queue.device.strategy.get()); @@ -37,26 +41,11 @@ void AntiLagQueueStrategy::notify_submit( } const auto lock = std::scoped_lock(this->mutex); - this->pending_submissions.push_back(std::move(submission)); -} - -void AntiLagQueueStrategy::await_complete() { - - // Grab submissions while under a lock. - const auto submissions = [&]() -> std::deque<std::unique_ptr<Submission>> { - const auto lock = std::scoped_lock{this->mutex}; - - auto submissions = std::move(this->pending_submissions); - this->pending_submissions.clear(); - return submissions; - }(); - - // Wait for completion on the last submission. - if (submissions.empty()) { - return; + if (this->frame_span) { + this->frame_span->update(std::move(handle)); + } else { + this->frame_span = std::make_unique<FrameSpan>(std::move(handle)); } - const auto& last = submissions.back(); - last->handle->await_end_time(); } // Stub - AntiLag doesn't care about presents. |
