]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/synchronizer.h
Redesign asynchronous buffer uploads
[libs/gl.git] / source / backends / vulkan / synchronizer.h
index ea3d07595e29a97d6583f9472c627469bcfa3912..077274f8200a0fd1fad5417dcde7d92ba9995b4e 100644 (file)
@@ -11,6 +11,15 @@ namespace GL {
 class Synchronizer
 {
 private:
+       struct ImageAccess
+       {
+               VkImage image = 0;
+               unsigned aspect;
+               int level = -1;
+               unsigned current_layout;
+               unsigned pending_layout;
+       };
+
        struct BufferAccess
        {
                VkBuffer buffer = 0;
@@ -22,13 +31,19 @@ private:
 
        Device &device;
        std::vector<BufferAccess> buffer_accesses;
+       std::vector<ImageAccess> image_accesses;
 
 public:
        Synchronizer(Device &);
 
-       void access(VkBuffer, std::size_t, std::size_t);
+       void write_buffer(VkBuffer, std::size_t, std::size_t, bool = false);
+       void split_image_mipmap(VkImage, unsigned, unsigned);
+       void change_image_layout(VkImage, unsigned, int, unsigned, bool);
        void reset();
        void barrier(VkCommandBuffer);
+
+private:
+       bool is_write_layout(unsigned);
 };
 
 } // namespace GL