diff --git a/include/Nazara/VulkanRenderer/VulkanBuffer.hpp b/include/Nazara/VulkanRenderer/VulkanBuffer.hpp index 190277143..71f8365df 100644 --- a/include/Nazara/VulkanRenderer/VulkanBuffer.hpp +++ b/include/Nazara/VulkanRenderer/VulkanBuffer.hpp @@ -46,7 +46,6 @@ namespace Nz BufferUsageFlags m_usage; UInt32 m_size; Vk::Buffer m_buffer; - Vk::Fence m_stagingFence; Vk::Device& m_device; Vk::DeviceMemory m_memory; }; diff --git a/src/Nazara/VulkanRenderer/VulkanBuffer.cpp b/src/Nazara/VulkanRenderer/VulkanBuffer.cpp index d1d047245..3bfc3f615 100644 --- a/src/Nazara/VulkanRenderer/VulkanBuffer.cpp +++ b/src/Nazara/VulkanRenderer/VulkanBuffer.cpp @@ -80,12 +80,6 @@ namespace Nz } else { - if (!m_stagingFence.Create(m_device)) - { - NazaraError("Failed to create staging fence"); - return nullptr; - } - if (!m_stagingBuffer.Create(m_device, 0, m_size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT)) { NazaraError("Failed to create staging buffer"); @@ -127,18 +121,20 @@ namespace Nz m_stagingMemory.Unmap(); Vk::CommandBuffer copyCommandBuffer = m_device.AllocateTransferCommandBuffer(); - copyCommandBuffer.Begin(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); - copyCommandBuffer.CopyBuffer(m_stagingBuffer, m_buffer, m_size); - copyCommandBuffer.End(); - - Vk::QueueHandle transferQueue = m_device.GetQueue(m_device.GetTransferQueueFamilyIndex(), 0); - if (!transferQueue.Submit(copyCommandBuffer, VK_NULL_HANDLE, 0, VK_NULL_HANDLE, m_stagingFence)) + if (!copyCommandBuffer.Begin(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)) return false; - m_stagingFence.Wait(); + copyCommandBuffer.CopyBuffer(m_stagingBuffer, m_buffer, m_size); + if (!copyCommandBuffer.End()) + return false; + + Vk::QueueHandle transferQueue = m_device.GetQueue(m_device.GetTransferQueueFamilyIndex(), 0); + if (!transferQueue.Submit(copyCommandBuffer)) + return false; + + transferQueue.WaitIdle(); m_stagingBuffer.Destroy(); - m_stagingFence.Destroy(); m_stagingMemory.Destroy(); return true; }