aboutsummaryrefslogtreecommitdiff
path: root/src/swapchain_monitor.hh
diff options
context:
space:
mode:
authorNicolas James <Eele1Ephe7uZahRie@tutanota.com>2026-03-31 16:15:00 +1100
committerNicolas James <Eele1Ephe7uZahRie@tutanota.com>2026-03-31 16:15:00 +1100
commit5e3837cadac73ba5b7d4085cddc48b0e816d826a (patch)
treeced4c413506409f17806a5c6ea4864b4026ca924 /src/swapchain_monitor.hh
parentdf2933fd9c0ea2a99e89a6837123dfdf8b549d4a (diff)
Fix vram leak in Cyberpunk 2077, reduce duplicated logic + general cleanup
Diffstat (limited to 'src/swapchain_monitor.hh')
-rw-r--r--src/swapchain_monitor.hh16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/swapchain_monitor.hh b/src/swapchain_monitor.hh
index b993b83..295ac5b 100644
--- a/src/swapchain_monitor.hh
+++ b/src/swapchain_monitor.hh
@@ -21,6 +21,9 @@ class DeviceContext;
// currently have an option to frame pace, to disable low_latency mode
// (become a no-op), and must track in_flight_submissions to function.
class SwapchainMonitor {
+ private:
+ static constexpr auto MAX_TRACKED_IN_FLIGHT_SUBMISSIONS = 50u;
+
protected:
const DeviceContext& device;
@@ -28,7 +31,12 @@ class SwapchainMonitor {
std::chrono::milliseconds present_delay = std::chrono::milliseconds{0};
bool was_low_latency_requested = false;
- std::deque<QueueContext::submissions_t> in_flight_submissions;
+ std::deque<QueueContext::submissions_ptr_t> in_flight_submissions;
+
+ protected:
+ // Small fix to avoid submissions growing limitlessly in size if this
+ // swapchain is never presented to.
+ void prune_submissions();
public:
SwapchainMonitor(const DeviceContext& device,
@@ -45,7 +53,7 @@ class SwapchainMonitor {
public:
virtual void
- notify_present(const QueueContext::submissions_t& submissions) = 0;
+ notify_present(const QueueContext::submissions_ptr_t& submissions) = 0;
};
// Provides asynchronous monitoring of submissions and signalling of some
@@ -79,7 +87,7 @@ class ReflexSwapchainMonitor final : public SwapchainMonitor {
public:
virtual void
- notify_present(const QueueContext::submissions_t& submissions) override;
+ notify_present(const QueueContext::submissions_ptr_t& submissions) override;
};
// Much simpler synchronous waiting with no thread requirement.
@@ -95,7 +103,7 @@ class AntiLagSwapchainMonitor final : public SwapchainMonitor {
public:
virtual void
- notify_present(const QueueContext::submissions_t& submissions) override;
+ notify_present(const QueueContext::submissions_ptr_t& submissions) override;
};
} // namespace low_latency