]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/buffer_backend.cpp
Add a synchronization helper class to the Vulkan backend
[libs/gl.git] / source / backends / vulkan / buffer_backend.cpp
index 4207e87d35d96a4bde10ff3dc642eb02f9c90267..29dd15ef363fa26fe36794e3d1a877bc821cb996 100644 (file)
@@ -52,6 +52,8 @@ void VulkanBuffer::allocate()
 
 void VulkanBuffer::sub_data(size_t off, size_t sz, const void *d)
 {
+       device.get_synchronizer().access(handle, off, sz);
+
        void *staging = device.get_transfer_queue().prepare_transfer(sz, [this, off, sz](VkCommandBuffer cmd_buf, VkBuffer staging_buf, size_t src_off){
                const VulkanFunctions &vk = device.get_functions();
 
@@ -60,19 +62,6 @@ void VulkanBuffer::sub_data(size_t off, size_t sz, const void *d)
                region.dstOffset = off;
                region.size = sz;
                vk.CmdCopyBuffer(cmd_buf, staging_buf, handle, 1, &region);
-
-               VkBufferMemoryBarrier barrier = { };
-               barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER;
-               barrier.srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT;
-               barrier.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT;
-               barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-               barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
-               barrier.buffer = handle_cast<::VkBuffer>(handle);
-               barrier.offset = off;
-               barrier.size = sz;
-
-               vk.CmdPipelineBarrier(cmd_buf, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
-                       0, 0, 0, 1, &barrier, 0, 0);
        });
 
        const char *src = static_cast<const char *>(d);