diff options
| author | Nicolas James <Eele1Ephe7uZahRie@tutanota.com> | 2026-04-01 00:49:34 +1100 |
|---|---|---|
| committer | Nicolas James <Eele1Ephe7uZahRie@tutanota.com> | 2026-04-01 00:49:34 +1100 |
| commit | 31c69428639c0674339c3752c5401542d38693bc (patch) | |
| tree | e5d215ffbbe6ec0630aaadef6afa218cd6f60a21 /src | |
| parent | aa3dbff2342a4d698c10a5fd816904de01b03605 (diff) | |
Turn shared_ptr to unique_ptr in Context, strictly transfer ownership in notify_present
Diffstat (limited to 'src')
| -rw-r--r-- | src/device_context.cc | 7 | ||||
| -rw-r--r-- | src/device_context.hh | 2 | ||||
| -rw-r--r-- | src/queue_context.cc | 6 | ||||
| -rw-r--r-- | src/queue_context.hh | 4 | ||||
| -rw-r--r-- | src/swapchain_monitor.cc | 17 | ||||
| -rw-r--r-- | src/swapchain_monitor.hh | 14 |
6 files changed, 25 insertions, 25 deletions
diff --git a/src/device_context.cc b/src/device_context.cc index 33f2aa4..fcbc9ef 100644 --- a/src/device_context.cc +++ b/src/device_context.cc @@ -37,7 +37,8 @@ void DeviceContext::update_params( // swapchains) just write it to everything. if (!target.has_value()) { for (auto& iter : this->swapchain_monitors) { - iter.second->update_params(was_low_latency_requested, present_delay); + iter.second->update_params(was_low_latency_requested, + present_delay); } return; } @@ -49,12 +50,12 @@ void DeviceContext::update_params( void DeviceContext::notify_present( const VkSwapchainKHR& swapchain, - const QueueContext::submissions_ptr_t& submissions) { + std::unique_ptr<QueueContext::Submissions> submissions) { const auto iter = this->swapchain_monitors.find(swapchain); assert(iter != std::end(this->swapchain_monitors)); - iter->second->notify_present(submissions); + iter->second->notify_present(std::move(submissions)); } } // namespace low_latency
\ No newline at end of file diff --git a/src/device_context.hh b/src/device_context.hh index ed2991b..df1b58d 100644 --- a/src/device_context.hh +++ b/src/device_context.hh @@ -53,7 +53,7 @@ class DeviceContext final : public Context { const bool was_low_latency_requested); void notify_present(const VkSwapchainKHR& swapchain, - const QueueContext::submissions_ptr_t& submissions); + std::unique_ptr<QueueContext::Submissions> submissions); }; }; // namespace low_latency diff --git a/src/queue_context.cc b/src/queue_context.cc index e9f9c3c..b4591f8 100644 --- a/src/queue_context.cc +++ b/src/queue_context.cc @@ -96,7 +96,7 @@ void QueueContext::notify_submit( // mapping (might be empty, but handled with operator[]). auto& submissions = this->unpresented_submissions[present_id]; if (submissions == nullptr) { - submissions = std::make_shared<Submissions>(); + submissions = std::make_unique<Submissions>(); if (present_id) { this->present_id_ring.emplace_back(present_id); } @@ -119,10 +119,10 @@ void QueueContext::notify_present(const VkSwapchainKHR& swapchain, // We're avoiding a double hash here - don't use operator[] and erase. auto iter = this->unpresented_submissions.try_emplace(present_id).first; if (iter->second == nullptr) { - iter->second = std::make_shared<Submissions>(); + iter->second = std::make_unique<Submissions>(); } - this->device.notify_present(swapchain, iter->second); + this->device.notify_present(swapchain, std::move(iter->second)); // Important, we nuke the submission because now it's presented. this->unpresented_submissions.erase(iter); diff --git a/src/queue_context.hh b/src/queue_context.hh index 2abd44c..326ee79 100644 --- a/src/queue_context.hh +++ b/src/queue_context.hh @@ -99,8 +99,8 @@ class QueueContext final : public Context { }; using present_id_t = std::uint64_t; - using submissions_ptr_t = std::shared_ptr<Submissions>; - std::unordered_map<present_id_t, submissions_ptr_t> unpresented_submissions; + std::unordered_map<present_id_t, std::unique_ptr<Submissions>> + unpresented_submissions; // We might be tracking present_ids which aren't presented to - and as a // result we don't ever clear those Submissions. So manually evict them by diff --git a/src/swapchain_monitor.cc b/src/swapchain_monitor.cc index bc4fc9b..002f729 100644 --- a/src/swapchain_monitor.cc +++ b/src/swapchain_monitor.cc @@ -67,10 +67,9 @@ void ReflexSwapchainMonitor::do_monitor(const std::stop_token stoken) { // Look for the latest submission and make sure it's completed. if (!this->in_flight_submissions.empty()) { - const auto last_submission = this->in_flight_submissions.back(); - this->in_flight_submissions.clear(); - last_submission->await_completed(); + this->in_flight_submissions.back()->await_completed(); + this->in_flight_submissions.clear(); } // We might want to signal them all? In theory it's the same timeline @@ -104,7 +103,7 @@ void ReflexSwapchainMonitor::notify_semaphore( } void ReflexSwapchainMonitor::notify_present( - const QueueContext::submissions_ptr_t& submissions) { + std::unique_ptr<QueueContext::Submissions> submissions) { const auto lock = std::scoped_lock{this->mutex}; @@ -121,7 +120,7 @@ void ReflexSwapchainMonitor::notify_present( return; } - this->in_flight_submissions.emplace_back(submissions); + this->in_flight_submissions.emplace_back(std::move(submissions)); this->prune_submissions(); this->cv.notify_one(); @@ -133,13 +132,13 @@ AntiLagSwapchainMonitor::AntiLagSwapchainMonitor( AntiLagSwapchainMonitor::~AntiLagSwapchainMonitor() {} void AntiLagSwapchainMonitor::notify_present( - const QueueContext::submissions_ptr_t& submissions) { + std::unique_ptr<QueueContext::Submissions> submissions) { if (!this->was_low_latency_requested) { return; } - this->in_flight_submissions.emplace_back(submissions); + this->in_flight_submissions.emplace_back(std::move(submissions)); this->prune_submissions(); } @@ -148,10 +147,8 @@ void AntiLagSwapchainMonitor::await_submissions() { return; } - const auto last_submission = this->in_flight_submissions.back(); + this->in_flight_submissions.back()->await_completed(); this->in_flight_submissions.clear(); - - last_submission->await_completed(); } } // namespace low_latency
\ No newline at end of file diff --git a/src/swapchain_monitor.hh b/src/swapchain_monitor.hh index 295ac5b..4fed3f8 100644 --- a/src/swapchain_monitor.hh +++ b/src/swapchain_monitor.hh @@ -8,6 +8,7 @@ #include <chrono> #include <condition_variable> #include <deque> +#include <memory> #include <mutex> #include <thread> @@ -31,7 +32,8 @@ class SwapchainMonitor { std::chrono::milliseconds present_delay = std::chrono::milliseconds{0}; bool was_low_latency_requested = false; - std::deque<QueueContext::submissions_ptr_t> in_flight_submissions; + std::deque<std::unique_ptr<QueueContext::Submissions>> + in_flight_submissions; protected: // Small fix to avoid submissions growing limitlessly in size if this @@ -53,7 +55,7 @@ class SwapchainMonitor { public: virtual void - notify_present(const QueueContext::submissions_ptr_t& submissions) = 0; + notify_present(std::unique_ptr<QueueContext::Submissions> submissions) = 0; }; // Provides asynchronous monitoring of submissions and signalling of some @@ -86,8 +88,8 @@ class ReflexSwapchainMonitor final : public SwapchainMonitor { const std::uint64_t& value); public: - virtual void - notify_present(const QueueContext::submissions_ptr_t& submissions) override; + virtual void notify_present( + std::unique_ptr<QueueContext::Submissions> submissions) override; }; // Much simpler synchronous waiting with no thread requirement. @@ -102,8 +104,8 @@ class AntiLagSwapchainMonitor final : public SwapchainMonitor { void await_submissions(); public: - virtual void - notify_present(const QueueContext::submissions_ptr_t& submissions) override; + virtual void notify_present( + std::unique_ptr<QueueContext::Submissions> submissions) override; }; } // namespace low_latency |
