aboutsummaryrefslogtreecommitdiff
path: root/src/strategies/anti_lag/queue_strategy.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/strategies/anti_lag/queue_strategy.cc')
-rw-r--r--src/strategies/anti_lag/queue_strategy.cc33
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.