]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/transferqueue.cpp
Support transfers with no staged data
[libs/gl.git] / source / backends / vulkan / transferqueue.cpp
index 87afc3c0b516fcefc0ec395fb93e1a4fa63dd3a8..8040f245f5360a33ae31fb6a23b34cd392c8dbf9 100644 (file)
@@ -23,18 +23,21 @@ TransferQueue::PendingTransfer &TransferQueue::prepare_transfer(void *object, bo
        PendingTransfer &transfer = *transfers.emplace(j);
        transfer.order = order;
 
-       auto i = find_if(buffers, [size](const StagingBuffer &b){ return b.used+size<=b.size; });
-       if(i==buffers.end())
+       if(size)
        {
-               buffers.emplace_back(device, max(default_buffer_size, size));
-               i = prev(buffers.end());
-       }
+               auto i = find_if(buffers, [size](const StagingBuffer &b){ return b.used+size<=b.size; });
+               if(i==buffers.end())
+               {
+                       buffers.emplace_back(device, max(default_buffer_size, size));
+                       i = prev(buffers.end());
+               }
 
-       transfer.buffer_index = distance(buffers.begin(), i);
-       transfer.offset = i->used;
-       transfer.size = size;
+               transfer.buffer_index = distance(buffers.begin(), i);
+               transfer.offset = i->used;
+               transfer.size = size;
 
-       i->used += size;
+               i->used += size;
+       }
 
        order += ordered;
 
@@ -56,7 +59,7 @@ void TransferQueue::dispatch_transfers(VkCommandBuffer command_buffer)
 
                for(; i!=j; ++i)
                {
-                       VkBuffer buffer = buffers[i->buffer_index].buffer;
+                       VkBuffer buffer = (i->buffer_index>=0 ? buffers[i->buffer_index].buffer : 0);
                        i->transfer(command_buffer, buffer, i->offset);
                }
        }