|
|
|
@ -71,20 +71,19 @@ VKBuffer* VKStagingBufferPool::TryGetReservedBuffer(std::size_t size, bool host_ |
|
|
|
VKBuffer& VKStagingBufferPool::CreateStagingBuffer(std::size_t size, bool host_visible) { |
|
|
|
const u32 log2 = Common::Log2Ceil64(size); |
|
|
|
|
|
|
|
VkBufferCreateInfo ci; |
|
|
|
ci.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; |
|
|
|
ci.pNext = nullptr; |
|
|
|
ci.flags = 0; |
|
|
|
ci.size = 1ULL << log2; |
|
|
|
ci.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | |
|
|
|
VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | |
|
|
|
VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; |
|
|
|
ci.sharingMode = VK_SHARING_MODE_EXCLUSIVE; |
|
|
|
ci.queueFamilyIndexCount = 0; |
|
|
|
ci.pQueueFamilyIndices = nullptr; |
|
|
|
|
|
|
|
auto buffer = std::make_unique<VKBuffer>(); |
|
|
|
buffer->handle = device.GetLogical().CreateBuffer(ci); |
|
|
|
buffer->handle = device.GetLogical().CreateBuffer({ |
|
|
|
.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, |
|
|
|
.pNext = nullptr, |
|
|
|
.flags = 0, |
|
|
|
.size = 1ULL << log2, |
|
|
|
.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | |
|
|
|
VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | |
|
|
|
VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, |
|
|
|
.sharingMode = VK_SHARING_MODE_EXCLUSIVE, |
|
|
|
.queueFamilyIndexCount = 0, |
|
|
|
.pQueueFamilyIndices = nullptr, |
|
|
|
}); |
|
|
|
buffer->commit = memory_manager.Commit(buffer->handle, host_visible); |
|
|
|
|
|
|
|
auto& entries = GetCache(host_visible)[log2].entries; |
|
|
|
|