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();
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);
Device &device;
std::vector<CommandPool> command_pools;
+ unsigned frame_number = 0;
unsigned frame_index = 0;
VkCommandBuffer primary_buffer = 0;
VkCommandBuffer pass_buffer = 0;
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;
std::vector<PendingTransfer> transfers;
std::vector<PendingTransfer> async_transfers;
std::map<const void *, unsigned> next_orders;
- unsigned current_frame = 0;
public:
TransferQueue(Device &);
PendingTransfer &insert_transfer(PendingTransfer &&);
public:
- void dispatch_transfers(const VulkanCommandRecorder &);
+ void dispatch_transfers(const VulkanCommandRecorder &, unsigned);
};
template<typename S, typename T>