]> git.tdb.fi Git - libs/gl.git/commitdiff
Pass frame number to TransferQueue from the outside
authorMikko Rasa <tdb@tdb.fi>
Fri, 7 Oct 2022 18:32:43 +0000 (21:32 +0300)
committerMikko Rasa <tdb@tdb.fi>
Fri, 7 Oct 2022 18:45:44 +0000 (21:45 +0300)
It can't reliably track it by itself since transfers may be dispatched
multiple times per frame.

source/backends/vulkan/commands_backend.cpp
source/backends/vulkan/commands_backend.h
source/backends/vulkan/transferqueue.cpp
source/backends/vulkan/transferqueue.h

index 4791122f3528ff47110618aa19996bee1a8ef9e6..7f56c9845abf80dff8118ea36d16fc6c657a97fb 100644 (file)
@@ -115,7 +115,7 @@ void VulkanCommands::end_render_pass()
 
        vk.EndCommandBuffer(pass_buffer);
 
-       device.get_transfer_queue().dispatch_transfers(vkCmd);
+       device.get_transfer_queue().dispatch_transfers(vkCmd, frame_number);
 
        Synchronizer &sync = device.get_synchronizer();
        sync.reset();
@@ -133,11 +133,12 @@ void VulkanCommands::end_render_pass()
        pass_buffer = 0;
 }
 
-void VulkanCommands::begin_frame(unsigned index)
+void VulkanCommands::begin_frame(unsigned fnum)
 {
        const VulkanFunctions &vk = device.get_functions();
 
-       frame_index = index%device.get_n_frames_in_flight();
+       frame_number = fnum;
+       frame_index = fnum%device.get_n_frames_in_flight();
        if(frame_index>=command_pools.size())
        {
                command_pools.reserve(frame_index+1);
index feb7d0778aaef40d4100445370402df92deee696..e17636a8a315ac1cfb18f3952e238b5cc952c531 100644 (file)
@@ -43,6 +43,7 @@ protected:
 
        Device &device;
        std::vector<CommandPool> command_pools;
+       unsigned frame_number = 0;
        unsigned frame_index = 0;
        VkCommandBuffer primary_buffer = 0;
        VkCommandBuffer pass_buffer = 0;
index 5419245b3ac793dc1bc2936e7826e124b31d0df5..95f170d4509086973967aa43910f27a856a8d4f3 100644 (file)
@@ -78,12 +78,11 @@ TransferQueue::PendingTransfer &TransferQueue::insert_transfer(PendingTransfer &
        return *j;
 }
 
-void TransferQueue::dispatch_transfers(const VulkanCommandRecorder &vkCmd)
+void TransferQueue::dispatch_transfers(const VulkanCommandRecorder &vkCmd, unsigned current_frame)
 {
        if(transfers.empty())
                return;
 
-       ++current_frame;
        for(auto i=transfers.begin(); i!=transfers.end(); )
        {
                auto j = i;
index 536edbd8782830f1352444e2c5f38419653523f4..14654b760e143aca590ecd38244a244416c1b2e0 100644 (file)
@@ -49,7 +49,6 @@ private:
        std::vector<PendingTransfer> transfers;
        std::vector<PendingTransfer> async_transfers;
        std::map<const void *, unsigned> next_orders;
-       unsigned current_frame = 0;
 
 public:
        TransferQueue(Device &);
@@ -69,7 +68,7 @@ private:
        PendingTransfer &insert_transfer(PendingTransfer &&);
 
 public:
-       void dispatch_transfers(const VulkanCommandRecorder &);
+       void dispatch_transfers(const VulkanCommandRecorder &, unsigned);
 };
 
 template<typename S, typename T>