diff options
| author | Nicolas James <Eele1Ephe7uZahRie@tutanota.com> | 2026-04-05 22:01:11 +1000 |
|---|---|---|
| committer | Nicolas James <Eele1Ephe7uZahRie@tutanota.com> | 2026-04-05 22:01:11 +1000 |
| commit | cf0bced6cd86782e9706acda1b3b6ce6b4e98481 (patch) | |
| tree | 618912ff9025cf0d249e10203b110002a26450f9 /src/strategies/anti_lag/queue_strategy.cc | |
| parent | 21e55ae8a1b3ddd4dff6c24a57bdc7d7272fff16 (diff) | |
Implement refactored AL2, todo frame limit
Diffstat (limited to 'src/strategies/anti_lag/queue_strategy.cc')
| -rw-r--r-- | src/strategies/anti_lag/queue_strategy.cc | 52 |
1 files changed, 52 insertions, 0 deletions
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> submission) { + + const auto strategy = + dynamic_cast<AntiLagDeviceStrategy*>(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> submission) { + + const auto strategy = + dynamic_cast<AntiLagDeviceStrategy*>(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<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; + } + const auto& last = submissions.back(); + last->end->await_time(); +} + } // namespace low_latency |
