]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/synchronizer.cpp
Redesign asynchronous buffer uploads
[libs/gl.git] / source / backends / vulkan / synchronizer.cpp
index 93f48b847f9290cc456d06fe4d108bea1068bf2b..9995f248c89d06503dc00a507b2748e08f3cb964 100644 (file)
@@ -15,7 +15,7 @@ Synchronizer::Synchronizer(Device &d):
        device(d)
 { }
 
-void Synchronizer::write_buffer(VkBuffer buffer, size_t offset, size_t size)
+void Synchronizer::write_buffer(VkBuffer buffer, size_t offset, size_t size, bool mapped)
 {
        auto i = lower_bound_member(buffer_accesses, buffer, &BufferAccess::buffer);
        if(i==buffer_accesses.end() || i->buffer!=buffer)
@@ -33,6 +33,8 @@ void Synchronizer::write_buffer(VkBuffer buffer, size_t offset, size_t size)
                i->size = end-begin;
        }
 
+       if(mapped)
+               i->was_written = true;
        i->pending_write = true;
 }
 
@@ -131,7 +133,8 @@ void Synchronizer::barrier(VkCommandBuffer command_buffer)
 
        static constexpr VkPipelineStageFlags buffer_read_stages = VK_PIPELINE_STAGE_VERTEX_INPUT_BIT|
                VK_PIPELINE_STAGE_VERTEX_SHADER_BIT|VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
-       static constexpr VkPipelineStageFlags buffer_write_stages = VK_PIPELINE_STAGE_TRANSFER_BIT;
+       static constexpr VkPipelineStageFlags buffer_write_stages = VK_PIPELINE_STAGE_TRANSFER_BIT|
+               VK_PIPELINE_STAGE_HOST_BIT;
 
        vector<VkBufferMemoryBarrier> buffer_barriers;
        buffer_barriers.reserve(buffer_accesses.size());