summaryrefslogtreecommitdiffstats
path: root/src/libs/dxvk-native-1.9.2a/src/dxvk/dxvk_lifetime.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/libs/dxvk-native-1.9.2a/src/dxvk/dxvk_lifetime.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/libs/dxvk-native-1.9.2a/src/dxvk/dxvk_lifetime.h b/src/libs/dxvk-native-1.9.2a/src/dxvk/dxvk_lifetime.h
new file mode 100644
index 00000000..75f3c8df
--- /dev/null
+++ b/src/libs/dxvk-native-1.9.2a/src/dxvk/dxvk_lifetime.h
@@ -0,0 +1,48 @@
+#pragma once
+
+#include <vector>
+
+#include "dxvk_resource.h"
+
+namespace dxvk {
+
+ /**
+ * \brief DXVK lifetime tracker
+ *
+ * Maintains references to a set of resources. This is
+ * used to guarantee that resources are not destroyed
+ * or otherwise accessed in an unsafe manner until the
+ * device has finished using them.
+ */
+ class DxvkLifetimeTracker {
+
+ public:
+
+ DxvkLifetimeTracker();
+ ~DxvkLifetimeTracker();
+
+ /**
+ * \brief Adds a resource to track
+ * \param [in] rc The resource to track
+ */
+ template<DxvkAccess Access>
+ void trackResource(Rc<DxvkResource>&& rc) {
+ rc->acquire(Access);
+ m_resources.emplace_back(std::move(rc), Access);
+ }
+
+ /**
+ * \brief Resets the command list
+ *
+ * Called automatically by the device when
+ * the command list has completed execution.
+ */
+ void reset();
+
+ private:
+
+ std::vector<std::pair<Rc<DxvkResource>, DxvkAccess>> m_resources;
+
+ };
+
+} \ No newline at end of file