X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fvulkan%2Fbuffer_backend.cpp;h=14164daf208a8b67f4fdba00284b10df2d2aedc3;hb=d9c769b5847beefa378d2c5555f5b5d8e5d26c0e;hp=29dd15ef363fa26fe36794e3d1a877bc821cb996;hpb=644b81d62660bafa702bfd7acedd3a0039aad993;p=libs%2Fgl.git diff --git a/source/backends/vulkan/buffer_backend.cpp b/source/backends/vulkan/buffer_backend.cpp index 29dd15ef..14164daf 100644 --- a/source/backends/vulkan/buffer_backend.cpp +++ b/source/backends/vulkan/buffer_backend.cpp @@ -52,17 +52,19 @@ 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(); - - VkBufferCopy region = { }; - region.srcOffset = src_off; - region.dstOffset = off; - region.size = sz; - vk.CmdCopyBuffer(cmd_buf, staging_buf, handle, 1, ®ion); - }); + void *staging = device.get_transfer_queue().prepare_transfer(sz, + [this, off, sz](){ + device.get_synchronizer().write_buffer(handle, off, sz); + }, + [this, off, sz](VkCommandBuffer cmd_buf, VkBuffer staging_buf, size_t src_off){ + const VulkanFunctions &vk = device.get_functions(); + + VkBufferCopy region = { }; + region.srcOffset = src_off; + region.dstOffset = off; + region.size = sz; + vk.CmdCopyBuffer(cmd_buf, staging_buf, handle, 1, ®ion); + }); const char *src = static_cast(d); copy(src, src+sz, static_cast(staging));