VulkanBuffer: Use WaitIdle instead of a fence (same effect)

This commit is contained in:
Lynix 2020-03-15 13:26:36 +01:00
parent 6fd1f70a6d
commit 5fde1e335b
2 changed files with 10 additions and 15 deletions

View File

@ -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;
};

View File

@ -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;
}