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)
|
ManagedBuffer* ResourceManager::CreateBuffer(vk::DeviceSize size, const vk::BufferUsageFlags& usage, const vk::MemoryPropertyFlags& properties)
|
||||||
{
|
{
|
||||||
size = Utils::Align(size, 16);
|
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);
|
vk::Buffer buffer = device.createBuffer(bufferCreateInfo);
|
||||||
const vk::MemoryRequirements memoryRequirements = device.getBufferMemoryRequirements(buffer);
|
const vk::MemoryRequirements memoryRequirements = device.getBufferMemoryRequirements(buffer);
|
||||||
uint32_t memtype = context->device->GetMemoryType(memoryRequirements.memoryTypeBits, properties);
|
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);
|
if (memoryRequirements.size != size)
|
||||||
MemoryAllocation* allocation = GetFreeMemoryAllocation(memoryRequirements.size, memoryRequirements.alignment, memtype);
|
{
|
||||||
|
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);
|
uint32_t offset = Utils::Align(allocation->used, memoryRequirements.alignment);
|
||||||
device.bindBufferMemory(buffer, allocation->memory, offset);
|
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 };
|
return new ManagedBuffer{ allocation, offset, size, buffer, usage, properties, nullptr };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user