From cf0bced6cd86782e9706acda1b3b6ce6b4e98481 Mon Sep 17 00:00:00 2001 From: Nicolas James Date: Sun, 5 Apr 2026 22:01:11 +1000 Subject: Implement refactored AL2, todo frame limit --- src/strategies/anti_lag/queue_strategy.cc | 52 +++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'src/strategies/anti_lag/queue_strategy.cc') diff --git a/src/strategies/anti_lag/queue_strategy.cc b/src/strategies/anti_lag/queue_strategy.cc index ba60535..9dbe127 100644 --- a/src/strategies/anti_lag/queue_strategy.cc +++ b/src/strategies/anti_lag/queue_strategy.cc @@ -1,4 +1,7 @@ #include "queue_strategy.hh" +#include "device_context.hh" +#include "device_strategy.hh" +#include "queue_context.hh" namespace low_latency { @@ -7,4 +10,53 @@ AntiLagQueueStrategy::AntiLagQueueStrategy(QueueContext& queue) AntiLagQueueStrategy::~AntiLagQueueStrategy() {} +void AntiLagQueueStrategy::notify_submit( + [[maybe_unused]] const VkSubmitInfo& submit, + std::unique_ptr submission) { + + const auto strategy = + dynamic_cast(this->queue.device.strategy.get()); + assert(strategy); + if (!strategy->should_track_submissions()) { + return; + } + + const auto lock = std::scoped_lock(this->mutex); + this->pending_submissions.push_back(std::move(submission)); +} + +void AntiLagQueueStrategy::notify_submit( + [[maybe_unused]] const VkSubmitInfo2& submit, + std::unique_ptr submission) { + + const auto strategy = + dynamic_cast(this->queue.device.strategy.get()); + assert(strategy); + if (!strategy->should_track_submissions()) { + return; + } + + 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> { + 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; + } + const auto& last = submissions.back(); + last->end->await_time(); +} + } // namespace low_latency -- cgit v1.2.3