Merge pull request 'Fix descriptor buffer size discrapency' (#34) from fix_buffer_size_issue into master

Reviewed-on: https://git.madvoxel.net/OpenVulkano/OpenVulkano/pulls/34
Reviewed-by: TymurStrelchyk <tymur.strelchyk.ext@madvoxel.com>
Reviewed-by: Vladyslav_Baranovskyi_EXT <vladyslav.baranovskyi.ext@madvoxel.com>
This commit is contained in:
Georg Hagen
2024-06-04 12:08:17 +02:00

View File

@@ -305,15 +305,22 @@ namespace OpenVulkano::Vulkan
ManagedBuffer* ResourceManager::CreateBuffer(vk::DeviceSize size, const vk::BufferUsageFlags& usage, const vk::MemoryPropertyFlags& properties)
{
size = Utils::Align(size, 16);
const vk::BufferCreateInfo bufferCreateInfo = { {}, size, usage, vk::SharingMode::eExclusive };
vk::BufferCreateInfo bufferCreateInfo = { {}, size, usage, vk::SharingMode::eExclusive };
vk::Buffer buffer = device.createBuffer(bufferCreateInfo);
const vk::MemoryRequirements memoryRequirements = device.getBufferMemoryRequirements(buffer);
uint32_t memtype = context->device->GetMemoryType(memoryRequirements.memoryTypeBits, properties);
if (memoryRequirements.size != size) Logger::DATA->debug("Memory Requirement Size ({0}) != Size ({1})", memoryRequirements.size, size);
MemoryAllocation* allocation = GetFreeMemoryAllocation(memoryRequirements.size, memoryRequirements.alignment, memtype);
if (memoryRequirements.size != size)
{
Logger::DATA->debug("Memory Requirement Size ({0}) != Size ({1})", memoryRequirements.size, size);
size = memoryRequirements.size;
device.destroy(buffer);
bufferCreateInfo.size = size;
buffer = device.createBuffer(bufferCreateInfo);
}
MemoryAllocation* allocation = GetFreeMemoryAllocation(size, memoryRequirements.alignment, memtype);
uint32_t offset = Utils::Align(allocation->used, memoryRequirements.alignment);
device.bindBufferMemory(buffer, allocation->memory, offset);
allocation->used += memoryRequirements.size + (offset - allocation->used);
allocation->used += size + (offset - allocation->used);
return new ManagedBuffer{ allocation, offset, size, buffer, usage, properties, nullptr };
}