VulkanBuffer: Use WaitIdle instead of a fence (same effect)
This commit is contained in:
parent
6fd1f70a6d
commit
5fde1e335b
|
|
@ -46,7 +46,6 @@ namespace Nz
|
||||||
BufferUsageFlags m_usage;
|
BufferUsageFlags m_usage;
|
||||||
UInt32 m_size;
|
UInt32 m_size;
|
||||||
Vk::Buffer m_buffer;
|
Vk::Buffer m_buffer;
|
||||||
Vk::Fence m_stagingFence;
|
|
||||||
Vk::Device& m_device;
|
Vk::Device& m_device;
|
||||||
Vk::DeviceMemory m_memory;
|
Vk::DeviceMemory m_memory;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -80,12 +80,6 @@ namespace Nz
|
||||||
}
|
}
|
||||||
else
|
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))
|
if (!m_stagingBuffer.Create(m_device, 0, m_size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT))
|
||||||
{
|
{
|
||||||
NazaraError("Failed to create staging buffer");
|
NazaraError("Failed to create staging buffer");
|
||||||
|
|
@ -127,18 +121,20 @@ namespace Nz
|
||||||
m_stagingMemory.Unmap();
|
m_stagingMemory.Unmap();
|
||||||
|
|
||||||
Vk::CommandBuffer copyCommandBuffer = m_device.AllocateTransferCommandBuffer();
|
Vk::CommandBuffer copyCommandBuffer = m_device.AllocateTransferCommandBuffer();
|
||||||
copyCommandBuffer.Begin(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
|
if (!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))
|
|
||||||
return false;
|
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_stagingBuffer.Destroy();
|
||||||
m_stagingFence.Destroy();
|
|
||||||
m_stagingMemory.Destroy();
|
m_stagingMemory.Destroy();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue