All data is 0 in dst buffer after vkCmdCopyBuffer. This is the code to copy staging buffer to device local buffer
bool VulkanBuffer::CopyToBuffer(VulkanBuffer* pVulkanBuffer)
{
if (mDesc.usage & vk::BufferUsageFlagBits::eTransferSrc && pVulkanBuffer->mDesc.usage & vk::BufferUsageFlagBits::eTransferDst)
{
vk::CommandPool cmdPool;
vk::CommandPoolCreateInfo cmdPoolCreateInfo = {};
cmdPoolCreateInfo.queueFamilyIndex = mpVulkanDevice->GetGraphicsQueueFamilyIndex();
CHECK_VK_RESULT(mpVulkanDevice->GetDevicePtr()->createCommandPool(&cmdPoolCreateInfo, nullptr, &cmdPool));
vk::CommandBufferAllocateInfo cmdBufferAllocInfo;
cmdBufferAllocInfo.commandPool = cmdPool;
cmdBufferAllocInfo.commandBufferCount = 1;
cmdBufferAllocInfo.level = vk::CommandBufferLevel::ePrimary;
vk::CommandBuffer cmdBuffer;
CHECK_VK_RESULT(mpVulkanDevice->GetDevicePtr()->allocateCommandBuffers(&cmdBufferAllocInfo, &cmdBuffer));
vk::CommandBufferBeginInfo cmdBufferBeginInfo = {};
cmdBufferBeginInfo.flags = vk::CommandBufferUsageFlagBits::eOneTimeSubmit;
CHECK_VK_RESULT(cmdBuffer.begin(&cmdBufferBeginInfo));
vk::BufferCopy bufferCopy = {};
bufferCopy.size = pVulkanBuffer->mDesc.size;
cmdBuffer.copyBuffer(mBuffer, pVulkanBuffer->GetBuffer(), 1, &bufferCopy);
cmdBuffer.end();
vk::SubmitInfo submitInfo = {};
submitInfo.commandBufferCount = 1;
submitInfo.pCommandBuffers = &cmdBuffer;
CHECK_RESULT(mpVulkanDevice->SubmitToQueue(submitInfo));
mpVulkanDevice->QueueIdle();
mpVulkanDevice->GetDevicePtr()->destroyCommandPool(cmdPool);
return true;
}
return false;
}
Did i do sumething wrong?!