X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fvulkan%2Ftransferqueue.h;h=a25519c8a121b417b0fe1dc1a60692bc7f7f90ff;hb=d9c769b5847beefa378d2c5555f5b5d8e5d26c0e;hp=419760bdf4d6b709bd4b28a393428f8da45f9383;hpb=99ca354f18119f82f1adeca100cd665a8f640317;p=libs%2Fgl.git diff --git a/source/backends/vulkan/transferqueue.h b/source/backends/vulkan/transferqueue.h index 419760bd..a25519c8 100644 --- a/source/backends/vulkan/transferqueue.h +++ b/source/backends/vulkan/transferqueue.h @@ -28,14 +28,13 @@ private: ~StagingBuffer(); }; - using TransferCallback = void(VkCommandBuffer, VkBuffer, std::size_t); - struct PendingTransfer { unsigned buffer_index = 0; std::size_t offset = 0; std::size_t size = 0; - std::function callback; + std::function synchronize; + std::function transfer; }; Device &device; @@ -46,8 +45,8 @@ private: public: TransferQueue(Device &); - template - void *prepare_transfer(std::size_t, T &&); + template + void *prepare_transfer(std::size_t, S &&, T &&); private: PendingTransfer &prepare_transfer(std::size_t); @@ -56,11 +55,12 @@ public: void dispatch_transfers(VkCommandBuffer); }; -template -void *TransferQueue::prepare_transfer(std::size_t size, T &&callback) +template +void *TransferQueue::prepare_transfer(std::size_t size, S &&synchronize, T &&transfer) { PendingTransfer &pt = prepare_transfer(size); - pt.callback = std::forward(callback); + pt.synchronize = std::forward(synchronize); + pt.transfer = std::forward(transfer); return static_cast(buffers[pt.buffer_index].mapped_address)+pt.offset; }