X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fvulkan%2Fsynchronizer.h;h=32a4d9793e303125a76e841aff368276ab791541;hb=4e0a26d2c6b2c8034d0cf7611cbfda3ea3681d89;hp=ea3d07595e29a97d6583f9472c627469bcfa3912;hpb=644b81d62660bafa702bfd7acedd3a0039aad993;p=libs%2Fgl.git diff --git a/source/backends/vulkan/synchronizer.h b/source/backends/vulkan/synchronizer.h index ea3d0759..32a4d979 100644 --- a/source/backends/vulkan/synchronizer.h +++ b/source/backends/vulkan/synchronizer.h @@ -8,9 +8,20 @@ namespace Msp { namespace GL { +class VulkanCommandRecorder; + 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 +33,19 @@ private: Device &device; std::vector buffer_accesses; + std::vector 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); + void barrier(const VulkanCommandRecorder &); + +private: + bool is_write_layout(unsigned); }; } // namespace GL