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:
@@ -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 };
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user