aboutsummaryrefslogtreecommitdiff
path: root/src/strategies/anti_lag/queue_strategy.cc
diff options
context:
space:
mode:
authorNicolas James <Eele1Ephe7uZahRie@tutanota.com>2026-04-05 22:01:11 +1000
committerNicolas James <Eele1Ephe7uZahRie@tutanota.com>2026-04-05 22:01:11 +1000
commitcf0bced6cd86782e9706acda1b3b6ce6b4e98481 (patch)
tree618912ff9025cf0d249e10203b110002a26450f9 /src/strategies/anti_lag/queue_strategy.cc
parent21e55ae8a1b3ddd4dff6c24a57bdc7d7272fff16 (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.cc52
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