vulkan_memory_allocator: Respect bufferImageGranularity
This commit is contained in:
		@@ -228,7 +228,9 @@ void MemoryCommit::Release() {
 | 
			
		||||
 | 
			
		||||
MemoryAllocator::MemoryAllocator(const Device& device_, bool export_allocations_)
 | 
			
		||||
    : device{device_}, properties{device_.GetPhysical().GetMemoryProperties()},
 | 
			
		||||
      export_allocations{export_allocations_} {}
 | 
			
		||||
      export_allocations{export_allocations_},
 | 
			
		||||
      buffer_image_granularity{
 | 
			
		||||
          device_.GetPhysical().GetProperties().limits.bufferImageGranularity} {}
 | 
			
		||||
 | 
			
		||||
MemoryAllocator::~MemoryAllocator() = default;
 | 
			
		||||
 | 
			
		||||
@@ -258,7 +260,9 @@ MemoryCommit MemoryAllocator::Commit(const vk::Buffer& buffer, MemoryUsage usage
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MemoryCommit MemoryAllocator::Commit(const vk::Image& image, MemoryUsage usage) {
 | 
			
		||||
    auto commit = Commit(device.GetLogical().GetImageMemoryRequirements(*image), usage);
 | 
			
		||||
    VkMemoryRequirements requirements = device.GetLogical().GetImageMemoryRequirements(*image);
 | 
			
		||||
    requirements.size = Common::AlignUp(requirements.size, buffer_image_granularity);
 | 
			
		||||
    auto commit = Commit(requirements, usage);
 | 
			
		||||
    image.BindMemory(commit.Memory(), commit.Offset());
 | 
			
		||||
    return commit;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -123,6 +123,8 @@ private:
 | 
			
		||||
    const VkPhysicalDeviceMemoryProperties properties; ///< Physical device properties.
 | 
			
		||||
    const bool export_allocations; ///< True when memory allocations have to be exported.
 | 
			
		||||
    std::vector<std::unique_ptr<MemoryAllocation>> allocations; ///< Current allocations.
 | 
			
		||||
    VkDeviceSize buffer_image_granularity; // The granularity for adjacent offsets between buffers
 | 
			
		||||
                                           // and optimal images
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// Returns true when a memory usage is guaranteed to be host visible.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user