diff --git a/include/vsg/app/TransferTask.h b/include/vsg/app/TransferTask.h index b098bbb0b..d783bf60f 100644 --- a/include/vsg/app/TransferTask.h +++ b/include/vsg/app/TransferTask.h @@ -17,6 +17,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI #include #include #include +#include namespace vsg { @@ -97,6 +98,8 @@ namespace vsg VkDeviceSize dataTotalSize = 0; VkDeviceSize imageTotalSize = 0; + ref_ptr transferCompleteFence; + bool waitOnTransferFence = false; ref_ptr transferCompleteSemaphore; ref_ptr transferConsumerCompletedSemaphore; diff --git a/src/vsg/app/TransferTask.cpp b/src/vsg/app/TransferTask.cpp index cf320b2a5..c7b0d8e54 100644 --- a/src/vsg/app/TransferTask.cpp +++ b/src/vsg/app/TransferTask.cpp @@ -415,7 +415,7 @@ TransferTask::TransferResult TransferTask::_transferData(DataToCopy& dataToCopy) log(level, " totalSize = ", totalSize); auto& frame = *(dataToCopy.frames[dataToCopy.frameIndex]); - auto& fence = frame.fence; + auto& fence = dataToCopy.transferCompleteFence; auto& staging = frame.staging; auto& commandBuffer = frame.transferCommandBuffer; auto& newSignalSemaphore = dataToCopy.transferCompleteSemaphore; @@ -432,13 +432,13 @@ TransferTask::TransferResult TransferTask::_transferData(DataToCopy& dataToCopy) log(level, " newSignalSemaphore = ", newSignalSemaphore, ", ", newSignalSemaphore ? newSignalSemaphore->vk() : VK_NULL_HANDLE); log(level, " copyRegions.size() = ", copyRegions.size()); - if (frame.waitOnFence && fence) + if (dataToCopy.waitOnTransferFence && fence) { uint64_t timeout = std::numeric_limits::max(); if (VkResult result = fence->wait(timeout); result != VK_SUCCESS) return TransferResult{result, {}}; fence->resetFenceAndDependencies(); } - frame.waitOnFence = false; + dataToCopy.waitOnTransferFence = false; // advance frameIndex dataToCopy.frameIndex = (dataToCopy.frameIndex + 1) % dataToCopy.frames.size(); @@ -545,7 +545,7 @@ TransferTask::TransferResult TransferTask::_transferData(DataToCopy& dataToCopy) result = transferQueue->submit(submitInfo, fence); - frame.waitOnFence = true; + dataToCopy.waitOnTransferFence = true; dataToCopy.transferConsumerCompletedSemaphore.reset();