summaryrefslogtreecommitdiffstats
path: root/src/video_core
diff options
context:
space:
mode:
authorRobin Kertels <robin.kertels@gmail.com>2021-08-07 15:15:01 +0200
committerRobin Kertels <robin.kertels@gmail.com>2021-08-07 15:28:05 +0200
commitbb29dcb7f2dad1e0ed67b32387912d56e40a5e5d (patch)
treed9acd207c966c23cc35af721a3e53f8ae4a0d049 /src/video_core
parentMerge pull request #6795 from sankasan/cmd-remove-cursor-fullscreen (diff)
downloadyuzu-bb29dcb7f2dad1e0ed67b32387912d56e40a5e5d.tar
yuzu-bb29dcb7f2dad1e0ed67b32387912d56e40a5e5d.tar.gz
yuzu-bb29dcb7f2dad1e0ed67b32387912d56e40a5e5d.tar.bz2
yuzu-bb29dcb7f2dad1e0ed67b32387912d56e40a5e5d.tar.lz
yuzu-bb29dcb7f2dad1e0ed67b32387912d56e40a5e5d.tar.xz
yuzu-bb29dcb7f2dad1e0ed67b32387912d56e40a5e5d.tar.zst
yuzu-bb29dcb7f2dad1e0ed67b32387912d56e40a5e5d.zip
Diffstat (limited to 'src/video_core')
-rw-r--r--src/video_core/vulkan_common/vulkan_memory_allocator.cpp8
-rw-r--r--src/video_core/vulkan_common/vulkan_memory_allocator.h2
2 files changed, 8 insertions, 2 deletions
diff --git a/src/video_core/vulkan_common/vulkan_memory_allocator.cpp b/src/video_core/vulkan_common/vulkan_memory_allocator.cpp
index aa173d19e..300a61205 100644
--- a/src/video_core/vulkan_common/vulkan_memory_allocator.cpp
+++ b/src/video_core/vulkan_common/vulkan_memory_allocator.cpp
@@ -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;
}
diff --git a/src/video_core/vulkan_common/vulkan_memory_allocator.h b/src/video_core/vulkan_common/vulkan_memory_allocator.h
index b61e931e0..86e8ed119 100644
--- a/src/video_core/vulkan_common/vulkan_memory_allocator.h
+++ b/src/video_core/vulkan_common/vulkan_memory_allocator.h
@@ -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.