]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/destroyqueue.h
Initial implementation of Vulkan backend
[libs/gl.git] / source / backends / vulkan / destroyqueue.h
diff --git a/source/backends/vulkan/destroyqueue.h b/source/backends/vulkan/destroyqueue.h
new file mode 100644 (file)
index 0000000..577e89d
--- /dev/null
@@ -0,0 +1,49 @@
+#ifndef MSP_GL_VULKAN_DESTROYQUEUE_H_
+#define MSP_GL_VULKAN_DESTROYQUEUE_H_
+
+#include <deque>
+#include "handles.h"
+
+namespace Msp {
+namespace GL {
+
+class Device;
+class VulkanFunctions;
+
+class DestroyQueue
+{
+private:
+       struct Entry
+       {
+               void *handle = 0;
+               void (*destroy_func)(const VulkanFunctions &, void *) = 0;
+               unsigned memory_id = 0;
+               unsigned on_frame = 0;
+       };
+
+       Device &device;
+       std::deque<Entry> queue;
+       unsigned current_frame = 0;
+
+public:
+       DestroyQueue(Device &);
+       ~DestroyQueue();
+
+       void destroy(VkBuffer, unsigned);
+       void destroy(VkFence);
+       void destroy(VkFramebuffer);
+       void destroy(VkImageView);
+       void destroy(VkSemaphore);
+
+private:
+       template<typename T, void (VulkanFunctions::*)(T) const>
+       void destroy(T, unsigned = 0);
+
+public:
+       void tick();
+};
+
+} // namespace GL
+} // namespace Msp
+
+#endif