]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/transferqueue.cpp
Use const void * for the object pointers in TransferQueue
[libs/gl.git] / source / backends / vulkan / transferqueue.cpp
index 87afc3c0b516fcefc0ec395fb93e1a4fa63dd3a8..f356510e4b3a02d57dddb387825eb478ea88fa37 100644 (file)
@@ -12,7 +12,7 @@ TransferQueue::TransferQueue(Device &d):
        device(d)
 { }
 
-TransferQueue::PendingTransfer &TransferQueue::prepare_transfer(void *object, bool ordered, size_t size)
+TransferQueue::PendingTransfer &TransferQueue::prepare_transfer(const void *object, bool ordered, size_t size)
 {
        unsigned &order = next_orders[object];
        order += !order;
@@ -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);
                }
        }