]> git.tdb.fi Git - libs/gl.git/blob - source/backends/vulkan/destroyqueue.h
Implement textures and samplers for Vulkan
[libs/gl.git] / source / backends / vulkan / destroyqueue.h
1 #ifndef MSP_GL_VULKAN_DESTROYQUEUE_H_
2 #define MSP_GL_VULKAN_DESTROYQUEUE_H_
3
4 #include <deque>
5 #include "handles.h"
6
7 namespace Msp {
8 namespace GL {
9
10 class Device;
11 class VulkanFunctions;
12
13 class DestroyQueue
14 {
15 private:
16         struct Entry
17         {
18                 void *handle = 0;
19                 void (*destroy_func)(const VulkanFunctions &, void *) = 0;
20                 unsigned memory_id = 0;
21                 unsigned on_frame = 0;
22         };
23
24         Device &device;
25         std::deque<Entry> queue;
26         unsigned current_frame = 0;
27
28 public:
29         DestroyQueue(Device &);
30         ~DestroyQueue();
31
32         void destroy(VkBuffer, unsigned);
33         void destroy(VkFence);
34         void destroy(VkFramebuffer);
35         void destroy(VkImage, unsigned);
36         void destroy(VkImageView);
37         void destroy(VkSampler);
38         void destroy(VkSemaphore);
39
40 private:
41         template<typename T, void (VulkanFunctions::*)(T) const>
42         void destroy(T, unsigned = 0);
43
44 public:
45         void tick();
46 };
47
48 } // namespace GL
49 } // namespace Msp
50
51 #endif